Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Wörter trennen, Codeproblem
mEzZo - Mo 16.02.04 19:54
Titel: Wörter trennen, Codeproblem
Hey Jungs, ich bin ja ein ziemlich anfänger und hab natürlich mal wieder ne frage:
ich würde gerne folgenden code benutzen um einen string zu trennen, leider fehlt das erste wort und das beim letzten kommt ne fehlermeldung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var T: String; Ary: Array of String; begin T:='Hallo ich bin ein Frosch'; while Pos(' ',T)>0 do begin SetLength(Ary,Length(Ary)+1); Ary[High(Ary)]:=Trim(Copy(T,1,Pos(' ',T)-1)); Delete(T,1,Pos(' ',T)); |
hat jemand ne idee wie ich diesen string bei jedem LEERzeichen trennen kann so dass die Wörter ins besagte array wandern?!
Bitte verweist mich nicht auf Explode im Forum, das habe ich alles durchgeguckt und das hilft mir auch nicht weiter, danke
mfg Kai
Moderiert von
Motzi: Code- durch Delphi-Tags ersetzt
smilie128 - Di 17.02.04 10:08
Hallo mEzZo
Also so funktioniert es schon mal in einer Form:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var pos : integer; start : integer; temp : string; begin temp := ''; for pos:=1 to edit1.GetTextLen do begin temp := temp + edit1.Text[pos]; if (edit1.Text[pos] = ' ') or (pos = edit1.GetTextLen) then begin listbox1.Items.Add(temp); temp := ''; end; end
end;
end. |
du brauchst einen Button, eine ListBox und win Edit-Feld.
Wenn du statt einer ListBox ein Array verwendest sollte es auch funktionieren.
Ist nur so auf die Schnelle progreammiert.
Für einen besseren Vorschlag müßte ich noch wissen wo du den String herbekommst den du zerlegen willst.
Gruß
smilie128
Moderiert von
Peter Lustig: Code- durch Delphi-Tags ersetzt
Windoof - Di 17.02.04 12:20
Titel: StringReplace()???
Hallo, wieso nimmst du nicht einfach StringReplace() und fügst an der Stelle stadt Leerzeichen einfach nen String-Ende-Zeichen ('\0') ein, dass daraus nen Array wird... siehe
hier [
http://www.delphi-forum.de/viewtopic.php?t=22148]
mEzZo - Di 17.02.04 14:06
hallo smilie,
das hat mir sehr geholfen danke.
allerdings habe ich noch ein problem.
wie schreibe ich das ganze dann in ein array, da kommt immer ein error.
mfg kai
smilie128 - Di 17.02.04 21:14
Moin
Ich habe dir hier mal ein komplettes Beispiel geschrieben.
Du muß das natürlich entsprechend anpassen.
Die Komponenten meines Beispiels sind die selben wie im ersten Beispiel.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; Edit1: TEdit; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var pos : integer; start : integer; temp : string; i : integer; j : integer; Ary: Array of String; begin
temp := ''; i := 0; for pos:=1 to edit1.GetTextLen do begin temp := temp + edit1.Text[pos];
if (edit1.Text[pos] = ' ') or (pos = edit1.GetTextLen) then begin SetLength(Ary,Length(Ary)+1); Ary[i] := temp; temp := ''; i := i+1; end; end;
listbox1.Clear; for j:=0 to length(ary)-1 do begin listbox1.items.Add(ary[j]); end;
end;
end. |
Die Ausgabe in die ListBox1 ist nur um das ganze anschaulich zu machen.
Das Prinzip der Funktion ist eigentlich recht einfach:
Die erste For-Schleife geht Zeichen für Zeichen durch den String und merkt sich die Start-Position und die Position eines gefundenen Leerzeichens und kopiert auch Zeichen für Zeichen in eine Hilfsvariable (temp).
Ich hoffe das hilft weiter
Gruß
smilie128
Moderiert von
Peter Lustig: Code- durch Delphi-Tags ersetzt
mEzZo - Mi 18.02.04 13:08
Das hat mir sehr gegolfen danke.
Nun gehts weiter, aber es geht nicht wirklich weiter ;)
Dieser Button soll Buchstaben der Wörter vertauschen ^^
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.Button2Click(Sender: TObject); var i : integer; begin for i:=0 to length(ary)-1 do begin if length(ary[i]) = 4 then begin ary[i] := ary[i,1]+ary[i,3]+ary[i,2]+ary[i,4]; listbox2.items.Add(ary[i]) end; if length(ary[i]) = 5 then begin ary[i] := ary[i,1]+ary[i,4]+ary[i,2]+ary[i,3]+ary[i,5]; listbox2.items.Add(ary[i]) end end; end; |
Moderiert von
Peter Lustig: Code- durch Delphi-Tags ersetzt
Christian S. - Mi 18.02.04 13:17
Hallo, mEzZo und smilie128!
Bitte benutzt demnächst die Delphi-Tags. Durch die Delphi-Tags wird der Code mit Syntax-Highlighting angezeigt und ist somit sehr viel übersichtlicher.
Viele Dank!
Peter
smilie128 - Mi 18.02.04 14:35
@Peter Lustig
Sorry hatte mich damit noch nicht so weit auseinandergesetzt.
Das nächste mal benutze ich die Delphi-Tags
@mEzZo
Was soll das Programm den genau machen?
Muß das Buchstabentauschen rückgängig zu machen sein?
smilie128
mEzZo - Mi 18.02.04 15:57
im grunde soll es ein programm sein dass einen text aus nem memo holt, die buschstaben jedes wortes(bis auf den ersten und letzten buchstaben) vertauscht und das ganze in ein anderes memo schriebt.
smilie128 - Di 24.02.04 14:57
Hi mEzZo
Hast du das Programm mitlerweile hinbekommen oder brauchst du noch konkretere Hilf ?
Sonst muß ich mal ein kleines Beispiel programmieren.
Gruß
Smilie128
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!