Entwickler-Ecke

Sonstiges (Delphi) - ExtractStrings


GericasS - Mo 09.03.09 18:58
Titel: ExtractStrings
Hi,

da ich ein Programm zur bearbeitung von Strings, durch verschiedene Methoden schreibe, hab ich jetzt folgendes ausprobiert...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
    begin
      List := TStringList.Create;
      for x := 0 to ExtractStrings(['\'],[' '],pchar(temp),List) -1 do
        begin
          List[x]:= ReverseString(List[x]);
          ListBox1.Items.Add(List[x]);
        end;


Es soll wie beim vorherigen Beispiel der String in der richtigen Reihenfolge ausgegeben werden aber umgedreht..
nur wo liegt hier der Fehler..

LG

GericasS


ffgorcky - Sa 09.05.09 22:40

Du möchtest nur einen String "umdrehen"?
Das müsste doch eigentlich einfach nur so gehen:

Delphi-Quelltext
1:
2:
3:
4:
Label1.Caption:='';
probestring:='Hallo, wie geht es Ihnen?';
for i:=length(probestring)-1 downto 0 do
        Label1.Caption:=Label1.Caption+probestring[i];

...oder habe ich Dich jetzt falsch verstanden?
Meinst Du nicht einfach nur das Umdrehen des Textes?
Da käme dann doch sonst in Label1.Caption bei meinem Beispiel einfach nur dieses raus:
?nenhI se theg eiw ,ollaH


jaenicke - So 10.05.09 01:59

Wofür machst du das Extract in jedem Schleifendurchlauf, dadurch überschreibst du doch alle Änderungen in der Liste gleich wieder? :shock:

Was passiert denn falsch, also kommt denn als Ergebnis heraus? Und was hast du beim Debugging bisher festgestellt?


ffgorcky - So 10.05.09 15:57

Also ich denke mal, dass das hier eine gute Lösung ist - oder?:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.PfadUmdrehen();
var i:Integer;
    versuch:String;
begin
Memo1.Text:=stringreplace(Label1.Caption,'\','\'+#13#10,[rfReplaceAll]);
for i:=Memo1.Lines.Count-1 downto 0 do
        versuch:=versuch+Memo1.Lines[i];
Label2.Caption:=versuch;
end;


jaenicke - So 10.05.09 16:21

Was macht das Memo dabei? Und nebenbei drehst du die Teile zwischen \ nicht um sondern tauschst nur deren Reihenfolge um. Genau das was also verhindert werden sollte. Du machst also recht exakt das Gegenteil des gewünschten Ergebnisses, wenn ich den Versuch oben korrekt verstanden habe. ;-)


ffgorcky - So 10.05.09 18:46

@Jaenike: ich dachte jetzt, dass GericasS gerne die (in meinem Fall) Verzeichnisse/Datei richtig benannt haben möchte, aber den Pfad einfach nur andersherum, also eben mit der Datei angefangen und dann bis zum Lagerort (z.B. Festplatte) hoch.
Das Memo diehnt ja nur der Zeilenweisen Ablage zwischendurch, was man ja eigentlich auch mit einem normalen String machen könnte. (Oder?)


jaenicke - So 10.05.09 19:04

Die Frage ist einfach was genau passieren soll. Das obige Beispiel macht aus 'abcd\efg\hij' statdessen 'dcba\gfe\jih' in den drei Zeilen.

Ich weiß ja nicht was das Ziel war. :nixweiss:

Ich werfe mal noch den Vorschlag in den Raum:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var
  MyList: TStringList;
  i: Integer;
begin
  MyList := TStringList.Create;
  try
    ExtractStrings(['\'], [' '], PChar(Edit1.Text), MyList);
    for i := 0 to MyList.Count - 1 do
      MyList[i] := ReverseString(MyList[i]);
    MyList.Delimiter := '\';
    Edit2.Text := MyList.DelimitedText;
  finally
    MyList.Free;
  end;
Der macht eben geschriebenes von einem Editfeld zum anderen.


ffgorcky - Mo 11.05.09 12:04

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Das obige Beispiel macht aus 'abcd\efg\hij' statdessen 'dcba\gfe\jih' in den drei Zeilen.


Also meine Beispiele machen daraus als Ergebnis nicht sowas, weil ich ja die '\' nur als Trennzeichen nehme und dann die (damit in mehrere Reihen geteilten) Zeichenketten nur andersherum wieder zusammenfüge.
Ich sehe also hier nur die zitierte Möglichkeit, wenn man die beiden Möglichkeiten zusammenbaut.