Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - 2 Memo-felder und strings


Kalado - Fr 20.02.09 03:22
Titel: 2 Memo-felder und strings
Hallo,
Ich hab ein Problem.
Ich habe 2 memo felder und möchte einmal immer das erste wort von einem feld ins andere übertragen.
Das zweite Problem ist, ich möchte immer das erste Wort auf einer zeile löschen.
Ich hab beides eigtl auch hingekriegt, das Problem ist das es immer nur bei der ersten zeile klappt und die anderen ignoriert..

Hier der Quellcode für das problem bei dem ich immer das erste wort ins andere feld übertragen möchte.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure Tha.kClick(Sender: TObject);
var
    i,i2:integer;
    zeile,zeile2,zeile3:string;
begin
    adventure.clear;
    for i:=0 to book.lines.count-1 do begin
        zeile2:=book.lines[i];
        zeile:=adventure.lines[i];
        for i2:=1 to length(zeile2) do begin
            zeile3:=zeile3+zeile2[i2];
            if zeile2[i2]=' ' then break;
            adventure.lines[i]:=zeile3;
        end;
        zeile3:='';
    end;

end;


Und hier der Quellcode für das Problem bei dem ich immer das erste Wort löschen will.


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:
procedure Tha.lClick(Sender: TObject);
var
    i,i2:integer;
    zeile,zeile2,zeile3:string;
    schalter:boolean;
begin
    schalter:=false;
    i:=0;
    while i<book.Lines.Count-1 do begin
    i:=i+1;
    //for i:=0 to book.Lines.Count-1 do begin
        zeile2:=book.lines[i];
        zeile:=adventure.lines[i];
        for i2:=1 to length(zeile2) do begin
            if zeile2[i2-1]=' ' then schalter:=true;
            if schalter=true then begin
                zeile3:=zeile3+zeile2[i2];
                book.lines[i]:=zeile3;
            end;
        end;
        zeile3:='';
    end;

end;




book und adventure sind die beiden memo felder.
Vielen dank im voraus.


jaenicke - Fr 20.02.09 03:46

Hallo und :welcome: !

Wie wäre es mit der Funktion Pos? ;-)
Damit kannst du direkt die Position des ersten Leerzeichens abfragen.

Und statt

Delphi-Quelltext
1:
if schalter=true then                    
wäre richtig:

Delphi-Quelltext
1:
if schalter then                    
Mit dem Vergleich =true klappt das nicht immer.

// EDIT:
Ach ja: schalter wird auf true gesetzt, aber nie wieder auf false. Diese Variable ist also in der nächsten Zeile schon am Anfang true.


Kalado - Fr 20.02.09 13:38

Das zweite Problem hat sich damit wunderbar gelöst, schonmal vielen dank.

Für das erste hab ich dass jetzt mit pos gemacht aber er macht immernoch nur eine zeile :(

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
    i,i2,leerstelle:integer;
    zeile,zeile2:string;
begin
    adventure.clear;
    for i:=0 to book.lines.count-1 do begin
        zeile2:=book.lines[i];
        zeile:=adventure.lines[i];
            leerstelle:=Pos(' ', zeile2);
            if leerstelle=0 then zeile:=zeile2 else
                zeile:=copy(zeile2, 1, leerstelle);
            adventure.lines[i]:=zeile;
    end;

end;


jaenicke - Fr 20.02.09 13:59

Adventure bekommt ja auch keine neuen Zeilen, wie wäre es mit Lines.Add? Die Indizes, die du da benutzt, um mit Lines darauf zuzugreifen, existieren doch gar nicht, schließlich hast du adventure vorher geleert...


Kalado - Fr 20.02.09 14:12

ah, danke jetzt klappts.