user3408085
user3408085

Reputation:

Editing a text file

I want to edit a text file, but I'm stuck in finding the correct functions or methods to do so. So far I'm able to open a text file and look for a certain string, but I have no idea on how to move the cursor, add or replace information, steps 4 - 7 in my pseudocode shown below.

Can you provide some guidance? Which functions should I use (in case they already exist)? A sample 'easy' code would be appreciated as well.

Pseudocode:

1. Open file.
2. While not eof
3.    Read file until string "someString" is found.
4.    Position the cursor at the next line (to where the someString was found).
5.    If "someString" = A go to step 6. Else go to step 7. 
6.       Replace the information in whole line with "newString". Go to step 8.
7.       Add new information "newString_2", without deleting the existing.
8. Save and close the text file.

Thanks.

Upvotes: 2

Views: 18742

Answers (2)

Skardan
Skardan

Reputation: 31

I would recommend to put the getline command into the while loop because then it won't stop only because of EOF but when getline is not able to read anymore. Like when the error bad occurs (which happens when someone deleted the file while your program was reading it).

It seems like you want to search inside a string, so "find" might be quite helpful.

#include <iostream>
#include <fstream>
#include <string>

int main (){
  std::fstream yourfile;
  std::string line, someString;

  yourfile.open("file.txt", ios::in | ios::app);  //The path to your file goes here

  if (yourfile.is_open()){  //You don't have to ask if the file is open but it's more secure
    while (getline(line)){
      if(line.find(someString) != string::npos){ //the find() documentation might be helpful if you don't understand
        if(someString == "A"){
          //code for replacing the line
        }
        else{
          yourfile << "newString_2" << endl;
        }
      } //end if
    } //end while
  } //end if
  else cerr << "Your file couldn't be opened";

  yourfile.close();
  return 0;
}

I can't tell you how to replace a single line in a text file but I hope you can work with that little I can give you.

Upvotes: 3

user1585121
user1585121

Reputation:

This should be a good start:

// basic file operations
#include <string>
#include <fstream>

int main ()
{
  std::fstream myfile;
  std::string line;

  while (!myfile.eof())
  {
    std::getline(myfile,line); // Check getline() doc, you can retrieve a line before/after a given string etc.
    //if (line == something)
    //{
        // do stuff with line, like checking for content etc.
    //}
  }
  myfile.close();
  return 0;
}

More informations here

Upvotes: 0

Related Questions