Forum Discussion

msalvador's avatar
msalvador
Frequent Contributor
5 years ago

replace a string in a file

Hi guys, I need to find a string in a file and replace with another string I find: web.admin.user=admin and I want to chane with: web.admin.user=pippo a snippet: function FindandReplaceTextValue(Filename, OldStr, NewStr) //Find a text in a file and replace it { var myFile = aqFile.OpenTextFile(Filename, aqFile.faReadWrite , aqFile.ctUTF8); var Str; myFile.SetPosition(1,1); Str = myFile.ReadLine(); // Reads text lines from the file and posts them to the test log while(! myFile.IsEndOfFile()) { Str = myFile.ReadLine(); if (Str == OldStr) { myFile.Cursor--; myFile.r myFile.Write(NewStr) //Replace the string } myFile.Cursor++; } // Closes the file myFile.Close(); } this do not work because add a new line
  • msalvador's avatar
    msalvador
    5 years ago

    Here the solution:

    function FindandReplaceTextValue(Filename, OldStr, NewStr) //Find a text in a file and replace it
    {
      var sPath = Filename;

      // Opens the created file for reading
      var myFile = aqFile.ReadWholeTextFile(sPath, aqFile.ctANSI);
     
        if (aqString.Find(myFile,OldStr)!= -1)
        {
          myFile = aqString.replace(myFile, OldStr, NewStr); //Replace string
          aqFile.WriteToTextFile(Filename, myFile, aqFile.ctANSI, true);
        }
    }
  • tristaanogre's avatar
    tristaanogre
    Esteemed Contributor

    For readability, repasting your function formatted better.

     

    function FindandReplaceTextValue(Filename, OldStr, NewStr) //Find a text in a file and replace it {
        var myFile = aqFile.OpenTextFile(Filename, aqFile.faReadWrite , aqFile.ctUTF8);
        var Str; myFile.SetPosition(1,1);
        Str = myFile.ReadLine(); // Reads text lines from the file and posts them to the test log
        while(! myFile.IsEndOfFile()) {
            Str = myFile.ReadLine();
            if (Str == OldStr) {
                myFile.Cursor--;
                myFile.r
                myFile.Write(NewStr) //Replace the string
            }
            myFile.Cursor++;
        }
        myFile.Close();
    }

    That said.... rather than reading the file one line at a time and then trying to replace the line, you could read the whole text file in all at once using aqFile.ReadWholeTextFile.  This will read the whole file in as a single string.  You can then simply use the aqString.Replace method to replace the desired string and then save the file back down, overwriting the existing file.

     

    • msalvador's avatar
      msalvador
      Frequent Contributor

      Here the solution:

      function FindandReplaceTextValue(Filename, OldStr, NewStr) //Find a text in a file and replace it
      {
        var sPath = Filename;

        // Opens the created file for reading
        var myFile = aqFile.ReadWholeTextFile(sPath, aqFile.ctANSI);
       
          if (aqString.Find(myFile,OldStr)!= -1)
          {
            myFile = aqString.replace(myFile, OldStr, NewStr); //Replace string
            aqFile.WriteToTextFile(Filename, myFile, aqFile.ctANSI, true);
          }
      }