Einzelnen Beitrag anzeigen

NicoDE
(Gast)

n/a Beiträge
 
#10

Re: For-Schleife für eine Stringliste mit Insert in der Schl

  Alt 2. Feb 2006, 09:07
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).
  Mit Zitat antworten Zitat