Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   String anhand eines Trennzeichens zerlegen (https://www.delphipraxis.net/203692-string-anhand-eines-trennzeichens-zerlegen.html)

michael.cohrs 13. Mär 2020 12:22

String anhand eines Trennzeichens zerlegen
 
hallo zusammen,

ich habe einen String der durch folgendem delimeter getrennt ist:


Wert1|Wert2

Das steht alles in einem kompleten String.

es geling mir nicht, warum auch immer, nicht diese beiden werte zu trennen. ich habs versucht mit
Delphi-Quellcode:
sTemp ist der komplette String, als Beispiel sTemp := "test|Test1"
s1 := Copy(sTemp,0, Pos('|',sTemp) - 1 );
Delete(sTemp,0, Pos('|',sTemp) + 1); // um den ersten Teil abzuschneiden
s2  := sTemp; // um den Rest zuzuweisen
ich habe leider in sTemp immer noch den kompletten zugewiesenen String, was mache ich falsch?

Uwe Raabe 13. Mär 2020 12:24

AW: Verzweifelte Frage ;-)
 
1. Ganz blöder Titel des Posts!
2. Welche Delphi-Version? (bzw. welche Target-Platform)

Rollo62 13. Mär 2020 12:27

AW: String anhand eines Trennzeichens zerlegen
 
Zitat:

Note: Delete uses one-based array indexing even in platforms where the strings are zero-based.
http://docwiki.embarcadero.com/Libra.../System.Delete

Daniel 13. Mär 2020 12:27

AW: String anhand eines Trennzeichens zerlegen
 
Ich habe den Titel kurzerhand angepasst. Und ja, die Bitte ist grundsätzlich vorhanden, dass Ihr einen inhaltlich aussagekräftigen Titel wählt.

michael.cohrs 13. Mär 2020 12:28

AW: String anhand eines Trennzeichens zerlegen
 
Sorry das der Titel "Blöd" war :-( ich arbeite mit Delphi 10.1 Berlin:cry:

himitsu 13. Mär 2020 12:31

AW: Verzweifelte Frage ;-)
 
Du kannst deinen ersten Post bearbeiten und unten rechts auf [Erweitert], da lässt sich dann auch der Titel ändern. :zwinker:
Die Delphiversion kannst in deinem Profil angeben und auch in einigen Unterforen oben nochmal auswählen (links neben dem Titel), falls es abweichend ist.

Zitat:

Copy(sTemp, 0, Pos('|',sTemp) - 1 );
Ersteinmal: Normaler Weise fangen String-Indize bei 1 an und nicht bei 0.
(außer wenn man für iOS/Android kompilert, denn da ist
Delphi-Quellcode:
{$ZEROBASEDSTRINGS ON}
der Standard)

In etwas neuen Delphis kann man aber auch über den StringHelper arbeiten, der ist überall mit 0 indiziert.
Delphi-Referenz durchsuchensTemp.Substring

außerdem
  • warum einmal kopieren (copy für s1) und einmal ausschneiden (delete für s2), wenn du nur die Werte "extrahierhen" willst?
    Beide mal gleich ist bestimmt einfacher (1..pos-1 und pos+1..ende und das Ende kann man bei Copy auch weglassen, also Copy(S,3) = alles ab 3)
  • und die Position kann man auch einmal bestimmen und wiederverwenden

PS:
Delphi-Quellcode:
S := 'aaa|bbb';
S1 := GetShortHint(S);
S2 := GetLongHint(S);
Delphi-Referenz durchsuchenGetLongHint

michael.cohrs 13. Mär 2020 12:32

AW: String anhand eines Trennzeichens zerlegen
 
Mein Problem ist das das delete überhaupt nichts bewirkt :-( Der erste Teil wird nicht abgeschnitten

runningsoft 13. Mär 2020 12:37

AW: String anhand eines Trennzeichens zerlegen
 
Oder wenn es ein anderer Trenner als | ist, z.B. das Semikolon:

Delphi-Quellcode:
S := 'aaa;bbb';
N := Pos(';',S);
S1 := (Copy(S,1,N-1));
Delete(S,1,N);
S2 := S

himitsu 13. Mär 2020 12:40

AW: String anhand eines Trennzeichens zerlegen
 
Zitat:

Zitat von michael.cohrs (Beitrag 1459669)
Mein Problem ist das das delete überhaupt nichts bewirkt :-( Der erste Teil wird nicht abgeschnitten

Das kann nicht sein, außer es ist nur ein Zeichen zu löschen, was mit deinem falschen Start-Index kollidiert.

Uwe Raabe 13. Mär 2020 12:44

AW: String anhand eines Trennzeichens zerlegen
 
Mit den korrekten Werten für 1-basierte Strings sollte es gehen:
Delphi-Quellcode:
  s1 := Copy(sTemp, 1, Pos('|', sTemp) - 1);
  Delete(sTemp, 1, Pos('|', sTemp)); // um den ersten Teil abzuschneiden
  s2 := sTemp; // um den Rest zuzuweisen
Etwas komfortabler geht es aber so:
Delphi-Quellcode:
//   arr: TArray<string>;

  arr := sTemp.Split(['|']);
  s1 := arr[0];
  s2 := arr[1];


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz