2009-10-22 6 views
0

Je suis capable de lire une chaîne à partir d'un fichier, mais j'ai des problèmes pour la supprimer ou la vider. Merci de votre aide et bonne journée. Fondamentalement, le système de fichiers sous-jacent ne le supporte pas nativement.Comment vider une ligne dans un fichier et l'écrire à sa position d'origine?

#include <iostream> 
#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 
+0

Pourriez-vous nous dire exactement ce que ** ** vous essayez d'atteindre? – Jacob

+0

Je veux supprimer les données [requête] à partir du fichier texte désolé de ne pas être clair en premier lieu – Tim

Répondre

1


Vous devez donc le faire manuellement.

  • Ouvrez le fichier que vous souhaitez modifier en mode lecture.
  • Ouvrez un fichier temporaire en mode écriture.
  • Copiez le fichier lu dans le fichier d'écriture.
    • Ne copiez pas la ligne que vous souhaitez supprimer.
  • Fermer les fichiers
  • Swap les fichiers dans le système de fichiers
  • Supprimer l'ancien fichier.

En regardant votre code:
Vous ne devriez pas faire ceci:

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

La dernière ligne dans le fichier ne sera pas mis l'EOF correctement ainsi vous entrerez à nouveau la boucle, mais les deux getline() l'appel échouera.

deux 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; 
} 
Questions connexes