Replacing text in txt files

I have my data saved as C:\data.txt and this is the data

Peter
Level=02
Panel=02

John
Level=02
Panel=02

how can i change the Peter 's Level's '02' to '03' and save the changes ?

I want my button to 'look' for the 2 digits allocated to 'Level' that is tagged under 'Peter' in data.txt, change it to '03' and save the changes.
tyfingAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

nestoruaCommented:
HI,
You can do it in different ways:
1. Using TIniFile.
2. Using TStringList, finding the string "Peter",
then the next string is "Level=02", change digit "2" on digit
"3" as you do it working with strings.
Or work with that string as you do with the string
"A=B".
Sincerely,
Nestorua.

0
tyfingAuthor Commented:
i do not get wat u mean
0
nestoruaCommented:
HI,
Put it more clearily (for the second proposition).
1.Read your file to TStringList object (call it YourStringList).
2.Using IndexOf method of YourStringList find the index of the string "Peter".
3.The next index in YourStringList has then the string "Level=02".
4.Change in that string the last Char from "2" to "3".
That's all.
Sincerely,
Nestorua.
0
Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

CynnaCommented:
tyfing,

Copy/Paste (place Button1 on the form):
---------------


function ReplaceIt(FileName, HeaderString, ValueString, NewValue: String): Boolean;
var f: TStringList;
    start, i: Integer;
    s, OldVal: String;
begin
  Result:=FALSE;
  f:=TStringList.Create;
  try
      if not FileExists(FileName) then Exit;
      // Grab file into TStringList:
      f.LoadFromFile(FileName);
      // Find first occurence of line with HeaderString:
      start:=f.IndexOf(HeaderString);
      if start=-1 then Exit;
      // Next line should have ValueString:
      s:=f.Strings[start+1];
      ValueString:=ValueString+'=';
      i:=Pos(ValueString, s);
      if i>0 then begin
         // Get value string and next 2 chars:
         OldVal:=Copy(s, i+Length(ValueString), 2);
         // Replace this with NewValue:
         f.Strings[start+1]:=StringReplace(s, ValueString+OldVal, ValueString+NewValue,
                                           [rfIgnoreCase]);
         Result:=TRUE;
         f.SaveToFile(FileName);
      end;
  finally
     f.Free;
  end;  
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ReplaceIt('C:\data.txt', 'Peter', 'Level', '00') then
     ShowMessage('Replaced OK.')
  else
     ShowMessage('Error!');
end;


0
CynnaCommented:
OOPS!

Sorry nestorua, didn't read your comment (great minds think the same :=) ...

typfing, if you are satisfied with the code, please
give nestorua half of the points.
0
CynnaCommented:
OOPS #2!

I'm a bit sleepy today...

typfing, replace:

  if ReplaceIt('C:\data.txt', 'Peter', 'Level', '00') then
   
with:

  if ReplaceIt('C:\data.txt', 'Peter', 'Level', '03') then
0
tyfingAuthor Commented:
heck, i'm totally CONFUSED....argh
0
CynnaCommented:
typfing,

> heck, i'm totally CONFUSED....

OK, I will be very detailed, but please don't take this as patronising...

1. Start new application
2. Place Button1 on a Form
3. Goto Unit1.pas source, copy and paste following function:

function ReplaceIt(FileName, HeaderString, ValueString, NewValue: String): Boolean;
var f: TStringList;
   start, i: Integer;
   s, OldVal: String;
begin
 Result:=FALSE;
 f:=TStringList.Create;
 try
     if not FileExists(FileName) then Exit;
     // Grab file into TStringList:
     f.LoadFromFile(FileName);
     // Find first occurence of line with HeaderString:
     start:=f.IndexOf(HeaderString);
     if start=-1 then Exit;
     // Next line should have ValueString:
     s:=f.Strings[start+1];
     ValueString:=ValueString+'=';
     i:=Pos(ValueString, s);
     if i>0 then begin
        // Get value string and next 2 chars:
        OldVal:=Copy(s, i+Length(ValueString), 2);
        // Replace this with NewValue:
        f.Strings[start+1]:=StringReplace(s, ValueString+OldVal, ValueString+NewValue,
                                          [rfIgnoreCase]);
        Result:=TRUE;
        f.SaveToFile(FileName);
     end;
 finally
    f.Free;
 end;  
end;


4. Double-click Button1, and Copy/Paste this inside its event handler:

procedure TForm1.Button1Click(Sender: TObject);
begin
 if ReplaceIt('C:\data.txt', 'Peter', 'Level', '03') then
    ShowMessage('Replaced OK.')
 else
    ShowMessage('Error!');
end;

-----------------------------

Function which does what you want is ReplaceIt(). Its arguments are:

1. FileName     - full path of the file you are parsing
                  (in your case 'C:\data.txt')
2. HeaderString - The line that marks the start of the
                  block you want to change (in your case
                  it's 'Peter', but can be changed
                  to 'John')
3. ValueString  - The following line must contain this
                  string, then '=', then 2 digits (in your
                  case it's 'Level'
4. NewValue     - Digits will be replaced with this string
                  (you wanted '03')

------------------------------

Is this any clearer?



0
tyfingAuthor Commented:
yes thanx.how abt i give all the points to u and u share it out ?
0
CynnaCommented:
OK, fine with me.
nestorua, all OK?
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
nestoruaCommented:
HI,
Do as you want.
Sincerely,
Nestorua.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Delphi

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.