Autor Beitrag
mEzZo
Hält's aus hier
Beiträge: 12

WinXP

BeitragVerfasst: 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:

ausblenden 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 user profile iconMotzi: Code- durch Delphi-Tags ersetzt
smilie128
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 48



BeitragVerfasst: Di 17.02.04 10:08 
Hallo mEzZo

Also so funktioniert es schon mal in einer Form:
ausblenden volle Höhe 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
    { Private declarations }
  public
    { Public declarations }
  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 user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt
Windoof
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
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
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12

WinXP

BeitragVerfasst: 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.


ausblenden Quelltext
1:
 wort[pos]:=temp;					


mfg kai
smilie128
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 48



BeitragVerfasst: 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.

ausblenden volle Höhe 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
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  pos : integer;     //
  start : integer;   // Hilfsvariablen
  temp : string;     //

  i : integer; // Zählervariable
  j : integer; // Zählervariable

  Ary: Array of String// Array zur Aufnahme der Worte
begin

  temp := ''// Temporäre Variable initialisieren
  i := 0// Zähler initialisieren

  for pos:=1 to edit1.GetTextLen do
  begin
    temp := temp + edit1.Text[pos];

    // Prüfung ob Leerzeichen oder Ende des Strings gefunden wurde
    if (edit1.Text[pos] = ' 'or (pos = edit1.GetTextLen) then
    begin
      SetLength(Ary,Length(Ary)+1);  // Länge des Arrays dynamisch anpassen
      Ary[i] := temp;    // Wort im Array speichern
      temp := ''// Temporäre Variable leeren
      i := i+1;  // Array-Zähler
    end;
  end;

  // Ausgabe
  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 user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt
mEzZo Threadstarter
Hält's aus hier
Beiträge: 12

WinXP

BeitragVerfasst: 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 ^^

ausblenden 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 user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt


Zuletzt bearbeitet von mEzZo am Mi 18.02.04 13:28, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 48



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12

WinXP

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 48



BeitragVerfasst: 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