Přidat otázku mezi oblíbené Zasílat nové odpovědi e-mailem Lazarus -StringList

Zdar.
Mam text soubor, který načtu do StringListu.
Potřebují ho projit po řadcich a odstranít všechny řadky, ktere obsahují určite slovo. Třeba ahoj.

Toto funguje

 for i  := 0 to TS.Count-1 do
  begin
    s:= TS.Strings[i];
    IF pos('ahoj',s) <> 0 then  showmessage('je to tam');                             
  end; 

Toto už ne.

 for i  := 0 to TS.Count-1 do
  begin
    s:= TS.Strings[i];
    IF pos('Připojeno',s) <> 0 then TS.Delete(i);                                
  end; 

Vyhodi to chybu List index (268) out of bounds.Asi tušim čim to je, pokažde, když smažu řadek, tak se sniži TS.Count

Jak na to?Děkují.

Řešení:

Áno, zmazaním riadku sa Ti zakaždým mení index...Prechádzaj od konca na začiatok, nie od začiatku po koniec ako to robíš Ty...

 for i := TS.Count - 1 downto 0 do
begin
... 
Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Rce
Jan Fiala
BigSandy
Jan Fiala

Musíš si uvědomit, že když vymažeš položku ze StringListu, změní jednak StringList.Count a též hodnoty všech indexů, co následují po vymazané položce. Tudíž procházet od konce je jediné možné řešení, páč tě pak už nezajímá změněný počet položek ani indexy co se mění za zmizelým prvkem.

Zpět do poradny Odpovědět na původní otázku Nahoru

Build a Mobile Site
View Site in Mobile | Classic
Share by: