Delphi-PRAXiS

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 11: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 11:24

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

Rollo62 13. Mär 2020 11: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 11: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 11: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 11: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 11: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 11: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 11: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 11: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];

michael.cohrs 13. Mär 2020 11:54

AW: String anhand eines Trennzeichens zerlegen
 
Vielen Dank euch allen!!

hoika 13. Mär 2020 12:56

AW: String anhand eines Trennzeichens zerlegen
 
Hallo,
StringList und Delimiter.
Nicht ebend schnell, funktioniert aber.

Neutral General 13. Mär 2020 12:59

AW: String anhand eines Trennzeichens zerlegen
 
Gibt auch noch String.Split:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var s: String;
    strParts: TArray<String>;
begin
  s := 'Hallo|Welt';
  strParts := s.Split(['|']);
end;

himitsu 13. Mär 2020 13:44

AW: Verzweifelte Frage ;-)
 
Zitat:

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

Jo, Split ist auch voll cool, aber es gibt direkt eine Funktion, die ganz genau das macht. :lol:

DieDolly 13. Mär 2020 13:53

AW: String anhand eines Trennzeichens zerlegen
 
Wieso benutzt du nicht einfach Split() ? Wieso immer so kompliziert.

Rollo62 13. Mär 2020 14:12

AW: Verzweifelte Frage ;-)
 
Zitat:

Zitat von himitsu (Beitrag 1459684)
Zitat:

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


Jaaaa, und ich Idiot baue mir sowas immer selber.
Dankesehr für den Link, was es nicht alles gibt :thumb:

venice2 13. Mär 2020 14:48

AW: String anhand eines Trennzeichens zerlegen
 
https://www.delphipraxis.net/1109688-post298.html

DieDolly 13. Mär 2020 14:50

AW: String anhand eines Trennzeichens zerlegen
 
Wieso kramst du eine Split-Funktion aus 2011 raus, obwohl es eine in der VCL gibt? :stupid:

venice2 13. Mär 2020 14:54

AW: String anhand eines Trennzeichens zerlegen
 
Zitat:

Zitat von DieDolly (Beitrag 1459692)
Wieso kramst du eine Split-Funktion aus 2011 raus, obwohl es eine in der VCL gibt? :stupid:

Weil VCL nicht gleich VCL ist abhängig von der Delphi Version die man verwendet.
Nicht jede VCL Version unterstützt Split. Informiere dich doch besser mal. :stupid:
Zudem kann man sich hier die variable aSplit: TSplitStrArray; sparen wenn man anstelle dieser direkt Result übergibt.

Auch wenn er sie mit Delphi 10.1 nicht benötigt kann sie vielleicht jemand anderes gebrauchen.
Zudem ist es interessant wie man so etwas programmatisch lösen kann als immer nur vorgekautes zu verwenden besonders was Anfänger betrifft.

DieDolly 13. Mär 2020 15:01

AW: String anhand eines Trennzeichens zerlegen
 
Zitat:

Nicht jede VCL Version unterstützt Split.
Wer noch ein Uralt-delphi verwendet, ist auch selber schuld und muss sich dann solche Codeschnipsel suchen.

venice2 13. Mär 2020 15:03

AW: String anhand eines Trennzeichens zerlegen
 
Zitat:

Zitat von DieDolly (Beitrag 1459695)
Zitat:

Nicht jede VCL Version unterstützt Split.
Wer noch ein Uralt-delphi verwendet, ist auch selber schuld und muss sich dann solche Codeschnipsel suchen.

Was passt dir daran nicht?
Wann oder wie lange programmierst du schon mit Delphi und gestehst Anfängern nicht zu zu lernen?
Seltsame Weltanschauung

Nebenbei habe ich herausgelesen das er lernen möchte wie man einen String zerlegt.
Mit der VCL Split Funktion tut er es definitiv nicht. Ja ist einfach aber nicht hilfreich.

michael.cohrs 14. Mär 2020 12:38

AW: String anhand eines Trennzeichens zerlegen
 
Danke nochmals allen für die Antworten!!! der String kann jedoch folgendermaßen aussehen: Beispiel A|1|B|2|C|3 etc. Ich benötige immer die erste Bez. inkl den hinter der Pipe stehenden Wert, danach den nächsten usw. Deshalb dachte ich mir es wäre gut den String auseinander zu nehmen oder?

DieDolly 14. Mär 2020 12:40

AW: String anhand eines Trennzeichens zerlegen
 
Guck dir doch mal Split an und vergiss das mit GetShortHint und GetLongHint.

michael.cohrs 14. Mär 2020 12:43

AW: String anhand eines Trennzeichens zerlegen
 
Ich steh grad ein wenig auf dem "Schlauch", hast Du vlt ein Beispiel für mich? und Danke für die Antwort!!

michael.cohrs 14. Mär 2020 12:44

AW: String anhand eines Trennzeichens zerlegen
 
Die beiden extrahierten Werte sollen in ein Object geschrieben werden, ohne Pipe....

DieDolly 14. Mär 2020 12:46

AW: String anhand eines Trennzeichens zerlegen
 
Delphi-Quellcode:
var
 s: string;
 BezeichnerUndWerte: TArray<string>;
begin
 s := 'A|1|B|2|C|3';
 BezeichnerUndWerte := s.Split.Split(['|']));


 {*
 Ergebnisse:
  BezeichnerUndWerte[0] > A
  BezeichnerUndWerte[1] > 1
  BezeichnerUndWerte[2] > B
  BezeichnerUndWerte[3] > 2
  BezeichnerUndWerte[4] > C
  BezeichnerUndWerte[5] > 3
 *}
end;

michael.cohrs 14. Mär 2020 13:00

AW: String anhand eines Trennzeichens zerlegen
 
Ich danke Dir für die Antwort, genau das habe ich gesucht!!!

DieDolly 14. Mär 2020 13:10

AW: String anhand eines Trennzeichens zerlegen
 
Die Antwort dazu stand schon am Ende auf der ersten Seite.

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

AW: String anhand eines Trennzeichens zerlegen
 
Das stimmt, ich hab sie nur nicht gleich richtig verstanden ;-( dennoch vielen Dank!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 Uhr.

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-2025 by Thomas Breitkreuz