Entwickler-Ecke

Sonstiges (Delphi) - mal wieder pos , copy


Sauger Chris - Fr 18.05.07 14:25
Titel: mal wieder pos , copy
Moin

beschäftige mich gerade mit dem pos , copy , Delete,Insert usw.

unten hab ich mal meinen code gepostet
es tritt folgender fehler auf

(Im Projeckt Project2.exe ist eine Exception der Klasse EstringListError aufgetreten. Meldung:
Listindex überschreitet das maximum(1))

so es liegt wetten an

Delphi-Quelltext
1:
checkstring := konf.Strings[i];                    



aber wie soll ich sonst jede einzelne zeile checken ?? plz help me thx



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Writeln('()=======() String lösch test ()========()');
Writeln('');
  konf := TStringList.Create;
try
  konf.Sorted := true;
  konf.Duplicates := dupIgnore;
  konf.LoadFromFile('test.txt');                 // strings aus test.txt laden
for i:=0 to konf.Count -1 do                      // alle strings zurch zählen
begin
checkstring := konf.Strings[i];                      //1 zeile dem checkstring zuweisen
position := Pos(':', checkstring);                   // nach dem zeichen suchen :
konf.Text := Copy(checkstring, 1, Position-1);     // alles was nach dem zeichen kommt weg löschen + das zeichen selber
konf.SaveToFile('dddd.txt');
end;
except
  Writeln('Ein Fehler ist aufgetreten');
  konf.Free;
end;




mfg saugi


Tino - Fr 18.05.07 14:30

Hallo!

Der Fehler liegt wohl an dieser Zeile:

Delphi-Quelltext
1:
konf.Text := Copy(checkstring, 1, Position-1);                    

Mit dieser Zuweisung hat die StringListe plötzlich nur noch eine Zeile! Beim nächsten Durchlaufe der Schleife wenn du auf die zweite Zeile zugreifen willst knallt es natürlich. ;-)

Besser wäre das wahrscheinlich so:

Delphi-Quelltext
1:
konf.Strings[i] := Copy(checkstring, 1, Position-1);                    


Außerdem solltest du die StringListe immer freigeben und nicht nur im Falle einer Exception. ;-)

Macht es wirklich sinn in jedem Schleifen-Durchlauf die StringListe zu speichern?
Gruß
Tino


Calculon - Fr 18.05.07 14:34

..und die Zeile


Delphi-Quelltext
1:
konf.SaveToFile('dddd.txt');                    

würde ich außerhalb der for-Schleife platzieren, außer es hat einen tieferen Sinn für dich, dass sie dort steht.

[edit]..zu spät[/edit]


Sauger Chris - Fr 18.05.07 14:41

ok so geht es thx euch 2 =)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  konf := TStringList.Create;
try
  //konf.Sorted := true;
  //konf.Duplicates := dupIgnore;
  konf.LoadFromFile('test.txt');
for i:=0 to konf.Count -1 do
begin
checkstring := konf.Strings[i];
position := Pos(':', konf.Strings[i]);
konf.Strings[i] := Copy(checkstring, 1, Position-1);
end;
konf.SaveToFile('dddd.txt');
konf.Free;
except
  Writeln('Ein Fehler ist aufgetreten');
  konf.Free;
end;