| Autor |
Beitrag |
mEzZo
Hält's aus hier
Beiträge: 12
WinXP
|
Verfasst: Mo 16.02.04 19:54
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
      
Beiträge: 48
|
Verfasst: Di 17.02.04 10:08
Hallo mEzZo
Also so funktioniert es schon mal in einer Form:
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
      
Beiträge: 34
Windows 95/98 SE/NT4.0 WS/2000 Professional/XP Home & Professional, SuSE Linux 7.0/9.0 Professional, OpenBSD
Dev-C++ 4.9.9.0, Borland C++ Builder 3 Personal/5 Professional/6 Enterprise, Borland Delphi 6 Enterprise/7 Enterprise
|
Verfasst: 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
|
|
mEzZo 
Hält's aus hier
Beiträge: 12
WinXP
|
Verfasst: 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.
Quelltext
mfg kai
|
|
smilie128
      
Beiträge: 48
|
Verfasst: 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.
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 
Hält's aus hier
Beiträge: 12
WinXP
|
Verfasst: 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
Zuletzt bearbeitet von mEzZo am Mi 18.02.04 13:28, insgesamt 1-mal bearbeitet
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
smilie128
      
Beiträge: 48
|
Verfasst: 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 
Hält's aus hier
Beiträge: 12
WinXP
|
Verfasst: 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
      
Beiträge: 48
|
Verfasst: 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
|
|