Herunder er et forslag til en løsning. Den arbejder godt nok direkte på en StringList (TStrings) og ikke på strings før de tilføjes StringListen. Desuden er den opdelt i 4 rutiner, til gengæld kan man styre om søg og erstat er CaseSensitiv eller ej...
procedure ReplaceText(Src: TStrings; SearchFor, Text2Add: String; CaseSensitive: Boolean = True);
var
I, P: Integer;
S: String;
begin
for I := 0 to Src.Count-1 do
begin
S := Src.Strings[I];
if CaseSensitive then
P := Pos(SearchFor, S)
else
P := Pos(AnsiUpperCase(SearchFor), AnsiUpperCase(S));
if P > 0 then
begin
Delete(S, P, Length(SearchFor));
Insert(Text2Add, S, P);
Src.Strings[I] := S;
end;
end;
end;
procedure InsText(Src: TStrings; SearchFor, Text2Add: String; CaseSensitive: Boolean = True);
begin
ReplaceText(Src, SearchFor, Text2Add+SearchFor, CaseSensitive);
end;
procedure AddText(Src: TStrings; SearchFor, Text2Add: String; CaseSensitive: Boolean = True);
begin
ReplaceText(Src, SearchFor, SearchFor+Text2Add, CaseSensitive);
end;
procedure DelText(Src: TStrings; SearchFor: String; CaseSensitive: Boolean = True);
var
I, P: Integer;
S: String;
begin
for I := 0 to Src.Count-1 do
begin
S := Src.Strings[I];
if CaseSensitive then
P := Pos(SearchFor, S)
else
P := Pos(AnsiUpperCase(SearchFor), AnsiUpperCase(S));
if P > 0 then
begin
Delete(S, P, Length(SearchFor));
Src.Strings[I] := S;
end;
end;
end;
//Eksempel på brug...
procedure TForm1.Button1Click(Sender: TObject);
var
ST: TStringList;
begin
ST := TStringList.Create;
try
ST.Add('FileCtrlC:\\adm\\abcd\\');
ST.Add('FileCtrlC:\\test\\');
ST.Add('FileCtrlC:\\more\\abcd\\');
ST.Add('FileCtrlC:\\More\\efgh\\');
ST.Add('FileCtrlC:\\other\\a');
ST.Add('FileCtrlC:\\Other\\b');
AddText(ST, 'FileCtrl', ' = ');
InsText(ST, 'FileCtrl', ' ');
ReplaceText(ST, 'C:', 'D:');
ReplaceText(ST, 'more', 'MORE');
ReplaceText(ST, 'other', 'OTHER', False);
DelText(ST, '\\adm');
ListBox1.Items.AddStrings(ST); //Formen skal indeholde en ListBox
finally
ST.Free;
end;
end;
mvh
hsv