einfügen und löschen von strings in einer liste

hallo!
ich bin ziemlicher anfänger mit delphi, habe ca. seit einem halben jahr in der schule turbo pascal gehabt und seit ein paar wochen delphi. wir haben die aufgabe bekommen, einen vokabeltrainer mit verschiedenen funktionen zu machen. dazu haben wir eine text datei bekommen, in der englische vokabeln mit deutscher übersetzung mit komma und leerzeichen getrennt sind. (also z.b. „tree, Baum“) ich wollte jetzt beides trennen, also die englischen vokabeln in eine txt und die deutschen in eine andere.
Dazu hatte ich die idee einfach dass komma und leerzeichen mit einem zeilenumbruch zu ersetzen, aber irgendetwas scheint nicht zu funktionieren…
hier ist mein quelltext für die procedure:

procedure TForm1.BitBtn1Click(Sender: TObject);
var i,c:integer;
begin
c:=listbox1.items.count-1;
for i:=0 to c do
begin
Delete(listbox1.items[i],pos(’, ‚,listbox1.Items[i]),2);
insert(chr(13),listbox1.items[i],pos(‘,’,listbox1.Items[i]));
end;

for i:=0 to c do
begin
listbox2.Items.Add(listbox1.Items[i\*2]);
end;
listbox2.items.SaveToFile(‚vokeng.txt‘);
end;

bei mir kommt dann immer bei der delete und insert zeile: „Constant object cannot be passed as var parameter“ es scheint sich dabei um die pos funktion zu handeln…
ich weiß, dass das ziemlich umständlich ist, aber irgendwie muss man das doch hinkriegen? oder gibt es einen weg, das ganze ohne transfer zu einer anderen liste zu machen?
bitte helft mir =(
danke im voraus

Hallo,

procedure TForm1.BitBtn1Click(Sender: TObject);
var i,c:integer;
begin
c:=listbox1.items.count-1;
for i:=0 to c do
begin
Delete(listbox1.items[i],pos(’, ‚,listbox1.Items[i]),2);
insert(chr(13),listbox1.items[i],pos(‘,’,listbox1.Items[i]));
end;

for i:=0 to c do
begin
listbox2.Items.Add(listbox1.Items[i\*2]);
end;
listbox2.items.SaveToFile(‚vokeng.txt‘);
end;

bei mir kommt dann immer bei der delete und insert zeile:
„Constant object cannot be passed as var parameter“ es scheint
sich dabei um die pos funktion zu handeln…

nein, das Problem ist das Delete. Items[i] ist keine Variable, die an die Funktion übergeben und darin bearbeitet werden kann (= var-Parameter) sondern eine Property von Listbox (das ist in diesem Fall zwar auch nicht ganz exakt, tut aber nichts zur Sache). Hinter dieser Eigenschaft versteckt sich eine Methode von TListbox. Die Funktion Delete kann aber als Parameter keine Funktion (bzw deren Wert = Constant Object) übernehmen sondern nur eine Variable.

Schau dir doch einfach mal die Funktion StringReplace an. Die kann Const-Parameter übernehmen und einen entsprechenden String zurückgeben. Du könntest dann zB das ", " durch ein „=“ ersetzen und an der gleichen Stelle in der Listbox speichern.

 Listbox.Items[i] := StringReplace(Listbox.Items[i], ', ', '=', rfReplaceAll);

Damit erzeugst du „Name=Value“-Paare (Pro Listboxzeile einen Eintrag z.B. tree=Baum). Die Klasse TStrings (von der Items abstammt) enthält verschiedene Methoden und Properties, um mit solchen Paaren zu arbeiten.

Du kannst dann z.B. mit

 EnglishWord := Listbox.Items.Names[5];
 DeutschesWort := Listbox.Items.Values[5];

auf die entsprechenden Vokabeln zugreifen.

Gruß, Niels