AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String zerlegen; Trenner

Ein Thema von KPBecker · begonnen am 23. Okt 2007 · letzter Beitrag vom 24. Okt 2007
Antwort Antwort
Seite 1 von 3  1 23      
KPBecker

Registriert seit: 1. Mär 2004
Ort: Mannheim
120 Beiträge
 
Delphi 2010 Architect
 
#1

String zerlegen; Trenner

  Alt 23. Okt 2007, 16:46
Hallo, Delphi-Praktiker,

ich erinnere mich, daß es für Stringlists die Möglichkeit gibt, Substrings anhand eines Trenners zu extrahieren. (SirThornberry erwähnt das auch in einem Beitrag vom 17.07.2004)

Bloß: Ich finde diese Funktion nicht.
Wie heißt das Ding ?

Betste Grüße
Klaus-Peter
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#2

Re: String zerlegen; Trenner

  Alt 23. Okt 2007, 16:48
Du musst den .Delimiter setzen (Trennzeichen) und sagst dann Liste.DelimitedText := 'Dein;Text'.
Den Rest macht die Liste von alleine.

Allerdings habe ich die Erfahrung gemacht, dass die TStringList auch gerne bei sonstigen Trennern wie Leerzeichen, Kommas, Semikola im Text trennt, auch wenn in Delimiter was anderes festgelegt war.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: String zerlegen; Trenner

  Alt 23. Okt 2007, 16:49
hier ist das ding:
http://www.delphipraxis.net/internal...=205244#205244
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: String zerlegen; Trenner

  Alt 23. Okt 2007, 16:53
Delphi-Quellcode:
var
  sl: TStrings;
...
begin
   sl := TStringList.Create;
   ...
   sl.delimiter := '<Trennzeichen>';
   sl.DelimitedText := '<Text>';
   s1 := sl.Strings[0]; //1. Teilstring
   s2 := sl.Strings[1]; //2. Teilstring
...
Aber Achtung: Leerzeichen führen zusätzlich zur Trennung
Markus Kinzler
  Mit Zitat antworten Zitat
KPBecker

Registriert seit: 1. Mär 2004
Ort: Mannheim
120 Beiträge
 
Delphi 2010 Architect
 
#5

Re: String zerlegen; Trenner

  Alt 23. Okt 2007, 16:56
Zitat von SirThornberry:
Das ist die Eigenentwicklung von Dir, die ich zitierte.
Frage: Wie heißt die Delphi-eigene Funktion, auf die Du dort hinweist ?

Den Tip von Sebastian schaue ich mir an.

Klaus-Peter
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#6

Re: String zerlegen; Trenner

  Alt 23. Okt 2007, 16:59
Das ist genau das. Und mein Tip ist das gleiche, was mKinzler mit Beispielcode geliefert hat.
Delimiter setzen, Text zuweisen, fertig. Aber das geht glaub ich erst seit Delphi 5.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
KPBecker

Registriert seit: 1. Mär 2004
Ort: Mannheim
120 Beiträge
 
Delphi 2010 Architect
 
#7

Re: String zerlegen; Trenner

  Alt 23. Okt 2007, 17:25
Hallo,

im Prinzip ist Alles prima, der Tip von mkinzler und Sebastian läuft, aber ...

Sebastian hat leider recht:
Als Trenner habe ich '|' gesetzt, aber das Blank wird auch als (zusätzlicher) Trenner interpretiert.
(It's not a bug, it's a feature ???)

1. Was soll der Unsinn (der es doch wohl ist) ?
2. Kann man das sl.DelimitedText:= <Text> trotzdem zu sinnvollem Laufen bringen ?

Klaus-Peter
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: String zerlegen; Trenner

  Alt 23. Okt 2007, 17:28
Eine reichlich arme Lösung wäre ein davorgesetztes StringReplace, das die Leerzeichen entweder ganz entfernt, wenn sie nicht benötigt werden, oder aber die Leerzeichen in wenig genutzte Symbole verwandelt, falls du sie brauchst. Du solltest im letzteren Fall allerdings noch über die Strings iterieren und die Ersetzung wieder rückgängig machen, sofern dann keine neue Trennung durchgeführt wird. Wie gesagt, reichlich arm.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
KPBecker

Registriert seit: 1. Mär 2004
Ort: Mannheim
120 Beiträge
 
Delphi 2010 Architect
 
#9

Re: String zerlegen; Trenner

  Alt 23. Okt 2007, 17:32
Hallo, Philip,

die Eleganz läßt, wie du richtig sagst, dabei sicher zu wünschen übrig.
Man könnte dann fast diese Funktion wieder selbst schreiben.

Klaus-Peter
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: String zerlegen; Trenner

  Alt 23. Okt 2007, 17:37
Wo wir schon dabei sind: Warum machst du das eigentlich nicht? Eine einfache while-Schleife mit einem PosEx-Aufruf im Innern sollte dafür doch ausreichen...
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  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 13:36 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