Autor Beitrag
GericasS
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 540

Windows Vista Home Premium
D2010, VisualStudio2008
BeitragVerfasst: Mo 09.03.09 18:58 
Hi,

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

ausblenden 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

_________________
Alexander N.
Neue Bewaffnung Amilo xi2428 T9300
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Sa 09.05.09 22:40 
Du möchtest nur einen String "umdrehen"?
Das müsste doch eigentlich einfach nur so gehen:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: So 10.05.09 15:57 
Also ich denke mal, dass das hier eine gute Lösung ist - oder?:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

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