Zitat von
Alex_ITA01:
Code:
//...
File_Inhalt.LoadFromFile(FileList.Strings[k]);
for i := 0 to [color=red]File_Inhalt.Count - 1[/color] do
begin
if Pos('NETWORK',File_Inhalt.Strings[i]) > 0 then
begin
if Pos('TITLE',[color=red]File_Inhalt.Strings[i+1][/color]) > 0 then
Unangenehmer Bug. Du greifst am Ende der Schleife auf Strings[Count] zu!
Versuch's mit dieser Vorlage (ungetestet):
Delphi-Quellcode:
//...
File_Inhalt.LoadFromFile(FileList.Strings[k]);
i := 0;
while i < File_Inhalt.Count - 1 do
begin
if (Pos('NETWORK', File_Inhalt.Strings[i]) > 0) and
(Pos('TITLE', File_Inhalt.Strings[i + 1]) > 0) and
(Pos('=', File_Inhalt.Strings[i + 1]) > 0) then
begin
TmpStr1 := File_Inhalt.Strings[i + 1];
Delete(TmpStr1, 1, Pos('=', TmpStr1));
TmpStr1 := Trim(TmpStr1);
for j := 0 to AGrid.RowCount - 1 do
if (TmpStr1 = AGrid.Cells[0, j]) and (AGrid.Cells[1, j] <> EmptyStr) then
begin
{$BOOLEVAL OFF}
if (File_Inhalt.Count - i <= 2) or (Pos('//.', File_Inhalt.Strings[i + 2]) <= 0) then
begin
File_Inhalt.Insert(i + 2, '//.' + AGrid.Cells[1, j]);
Save := True;
if Assigned(GlobalList) then
GlobalList.Add(TmpStr1 + '//.' + AGrid.Cells[1, j]);
end;
Inc(i, 2); // Überspringe auch 'NETWORK' und 'TITLE'
Break;
end;
end;
Inc(i);
end;
File_Inhalt.SaveToFile(FileList.Strings[k]);
Allerdings gehe ich davon aus, dass sich das Parsen und Zerlegen der Strings optimieren lässt (siehe TString.Values und TStrings.Names).