开发者

How to empty a line in file and write it back to the original position?

开发者 https://www.devze.com 2022-12-09 06:37 出处:网络
I\'m able to read a string from a file but I\'m having trouble deleting or emptying that string. Thanks you for helping and have a great day.

I'm able to read a string from a file but I'm having trouble deleting or emptying that string. Thanks you for helping and have a great day.

#include <iostream&g开发者_如何学Pythont;
#include <fstream>
#include <map>
#include <string>
#include <cstdlib>
#include <sstream>

using namespace std;

int main() {
    map<string, string> Data; // map of words and their frequencies
    string key;               // input buffer for words.
    fstream File;
    string description;
    string query;
    int count=0;
    int i=0;

    File.open("J://Customers.txt");

    while (!File.eof()) {
        getline(File,key,'\t');
        getline(File,description,'\n');
        Data[key] = description;
    }

    File.close();

    cout << endl;

    for ( count=0; count < 3; count++)  {
        cout << "Type in your search query.";
        cin >> query;
        string token[11]; 
        istringstream iss(Data[query]);  
        while ( getline(iss, token[i], '\t') ) {
            token[0] = query;
            cout << token[i] << endl;
            i++;        
        }  
    }   
    system("pause");

}//end main


Basically the underlying file system does not support that natively.
So you need to do it manually.

  • Open the file you want to modify in read mode.
  • Open a temporary file in write mode.
  • Copy from the read file into the write file.
    • Don't copy the line you want to delete.
  • Close both files
  • Swap the files in the file system
  • Delete the old file.

Looking at your code:
You should not be doing this:

while (!File.eof())
{
     getline(File,key,'\t');
     getline(File,description,'\n');
     Data[key] = description;
}

The last line in the file will not set the EOF correctly thus you will enter the loop again but the two getline() call will fail.

A couple of options:

while (!File.eof())
{
     getline(File,key,'\t');
     getline(File,description,'\n');
     if(File) // Test to make sure both getline() calls worked
     {    Data[key] = description;
     }
}

// or more commonly put the gets in the condition

while (std::getline(File,line))
{
     key          = line.substr(0,line.find('\t'));
     description  = line.substr(line.find('\t')+1);
     Data[key]    = description;
}
0

精彩评论

暂无评论...
验证码 换一张
取 消