I would like to find and replace a string in a text file.I found
this little code which belongs to TeamB/P. Below but i am bad at
converting pascal code to BCB.
procedure FileReplaceString(const FileName, searchstring, replacestring: string);
var
fs: TFileStream;
S: string;
begin
fs := TFileStream.Create(FileName, fmOpenread or fmShareDenyNone);
try
SetLength(S, fs.Size);
fs.ReadBuffer(S[1], fs.Size);
finally
fs.Free;
end;
S := StringReplace(S, SearchString, replaceString, [rfReplaceAll, rfIgnoreCase]);
fs := TFileStream.Create(FileName, fmCreate);
try
fs.WriteBuffer(S[1], Length(S));
finally
fs.Free;
end;
end;
I tried to convert it like :
void FileReplaceString(AnsiString FileName, AnsiString SearchString,AnsiString ReplaceString)
{
TFileStream *fs;
AnsiString S;
fs = new TFileStream(FileName, fmOpenRead || fmShareDenyNone);
try
{
fs->ReadBuffer(S.c_str(), fs->Size);
}
__finally
{
delete fs;
}
S = StringReplace(S, SearchString, ReplaceString,TReplaceFlags() << rfReplaceAll << rfIgnoreCase);
fs = new TFileStream(FileName, fmCreate);
try
{
fs->WriteBuffer(S.c_str(), S.Length());
}
__finally
{
delete fs;
}
}
Pfff, my code is rubbish i know :) Can anyone help me to find
my way please? How to convert this procedure to Borland C++
Builder ?
Eugene
> I found this little code which belongs to TeamB/P.
> Below but i am bad at converting pascal code to BCB.
void __fastcall FileReplaceString(const AnsiString &FileName, const
AnsiString &SearchString, const AnsiString &ReplaceString)
{
TFileStream *fs = new TFileStream(FileName, fmOpenread |
fmShareDenyNone);
try
{
AnsiString S;
S.SetLength(fs->Size);
fs->ReadBuffer(S.c_str(), fs->Size);
}
__finally {
delete fs;
}
S = StringReplace(S, SearchString, ReplaceString, TReplaceFlags() <<
rfReplaceAll << rfIgnoreCase);
fs = new TFileStream->Create(FileName, fmCreate);
try {
fs->WriteBuffer(S.c_str(), S.Length());
}
__finally {
delete fs;
}
}
Gambit
Thank you for your great help.I changed your code
slightly.Have a look at it.
Eugene
void __fastcall FileReplaceString(const AnsiString &FileName, const AnsiString &SearchString, const AnsiString &ReplaceString)
{
TFileStream *fs = new TFileStream(FileName, fmOpenRead | fmShareDenyNone);
AnsiString S;
try
{
S.SetLength(fs->Size);
fs->ReadBuffer(S.c_str(), fs->Size);
}
__finally {
delete fs;
}
S = StringReplace(S, SearchString, ReplaceString, TReplaceFlags() << rfReplaceAll << rfIgnoreCase);
fs = new TFileStream(FileName, fmCreate);
void __fastcall FileReplaceString(const AnsiString &FileName, const
AnsiString &SearchString, const AnsiString &ReplaceString)
{
std::auto_ptr<TFileStream> fs(new TFileStream(FileName, fmOpenread |
fmShareDenyNone));
AnsiString S;
S.SetLength(fs->Size);
fs->ReadBuffer(S.c_str(), fs->Size);
fs.reset();
S = StringReplace(S, SearchString, ReplaceString,
TReplaceFlags() << rfReplaceAll << rfIgnoreCase);
fs.reset(new TFileStream->Create(FileName, fmCreate));
fs->WriteBuffer(S.c_str(), S.Length());
}
Ivan Johansen