AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein String anhand eines Trennzeichens zerlegen
Thema durchsuchen
Ansicht
Themen-Optionen

String anhand eines Trennzeichens zerlegen

Ein Thema von michael.cohrs · begonnen am 13. Mär 2020 · letzter Beitrag vom 14. Mär 2020
Antwort Antwort
Seite 1 von 3  1 23      
michael.cohrs

Registriert seit: 11. Nov 2005
Ort: Hamburg
130 Beiträge
 
#1

String anhand eines Trennzeichens zerlegen

  Alt 13. Mär 2020, 12:22
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?
Michael Cohrs
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: Verzweifelte Frage ;-)

  Alt 13. Mär 2020, 12:24
1. Ganz blöder Titel des Posts!
2. Welche Delphi-Version? (bzw. welche Target-Platform)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming

Geändert von Uwe Raabe (13. Mär 2020 um 12:26 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.094 Beiträge
 
Delphi 12 Athens
 
#3

AW: String anhand eines Trennzeichens zerlegen

  Alt 13. Mär 2020, 12:27
Zitat:
Note: Delete uses one-based array indexing even in platforms where the strings are zero-based.
http://docwiki.embarcadero.com/Libra.../System.Delete
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: String anhand eines Trennzeichens zerlegen

  Alt 13. Mär 2020, 12:27
Ich habe den Titel kurzerhand angepasst. Und ja, die Bitte ist grundsätzlich vorhanden, dass Ihr einen inhaltlich aussagekräftigen Titel wählt.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
michael.cohrs

Registriert seit: 11. Nov 2005
Ort: Hamburg
130 Beiträge
 
#5

AW: String anhand eines Trennzeichens zerlegen

  Alt 13. Mär 2020, 12:28
Sorry das der Titel "Blöd" war ich arbeite mit Delphi 10.1 Berlin
Michael Cohrs
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#6

AW: Verzweifelte Frage ;-)

  Alt 13. Mär 2020, 12:31
Du kannst deinen ersten Post bearbeiten und unten rechts auf [Erweitert], da lässt sich dann auch der Titel ändern.
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 {$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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (13. Mär 2020 um 12:39 Uhr)
  Mit Zitat antworten Zitat
michael.cohrs

Registriert seit: 11. Nov 2005
Ort: Hamburg
130 Beiträge
 
#7

AW: String anhand eines Trennzeichens zerlegen

  Alt 13. Mär 2020, 12:32
Mein Problem ist das das delete überhaupt nichts bewirkt Der erste Teil wird nicht abgeschnitten
Michael Cohrs
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: String anhand eines Trennzeichens zerlegen

  Alt 13. Mär 2020, 12:37
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

Geändert von runningsoft (13. Mär 2020 um 12:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#9

AW: String anhand eines Trennzeichens zerlegen

  Alt 13. Mär 2020, 12:40
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#10

AW: String anhand eines Trennzeichens zerlegen

  Alt 13. Mär 2020, 12:44
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];
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz