AGB  ·  Datenschutz  ·  Impressum  







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

String teilen

Ein Thema von Danniolo · begonnen am 27. Dez 2005 · letzter Beitrag vom 27. Dez 2005
Antwort Antwort
Danniolo
(Gast)

n/a Beiträge
 
#1

String teilen

  Alt 27. Dez 2005, 15:18
Nachdem ich schon oft die Frage gehört habe, wie man einen String nach einem bestimmten Zeichen trennen kann
und ich nur umständliche Wege gefunde habe, habe ich mir meine eigene Methode zusammengebastelt.
eine Besonderheit dieser Function ist, dass ein Komma nach dem Trennzeichen ignoriert wird.
Die einzelnen Teile des Strings werden in einer StringList ausgegeben.

Delphi-Quellcode:
function CommaTxt(PromtString, Splitter: String): TStrings;
var ix, ix2: Integer;
    TempStringList: TStringList;
    CommaTxtX: String;
Begin
  TempStringList := TStringList.Create;
  TempStringList.Clear;
  TempStringList.Add('');
  For ix := 1 To length(PromtString) Do
  Begin
    if PromtString[ix] = Splitter Then
    begin
      CommaTxtX := '';
      if PromtString[ix + 1] = ' Then ix2 := ix + 1 Else ix2 := ix; //Diese Zeile löschen, falls das Leerzeichen hinter
      while ix2 < length(PromtString) Do //dem Trennzeichen berücksichtigt werden soll
      Begin
        Inc(ix2);
        if PromtString[ix2] <> splitter Then
          CommaTxtX := CommaTxtX + PromtString[ix2]
        Else
          ix2 := length(PromtString);
      End;
      TempStringList.Add(CommaTxtX);
    End Else
    Begin
      CommaTxtX := '';
      ix2 := 0;
      while ix2 < length(PromtString) Do
      Begin
        Inc(ix2);
        if PromtString[ix2] <> Splitter Then
          CommaTxtX := CommaTxtX + PromtString[ix2]
        Else
          ix2 := length(PromtString);
      End;
      TempStringList[0] := (CommaTxtX);
    End;
  End;
  Result := TempStringList;
End;
Ein Beispielaufruf würde so aussehen:

CommaTxt('Teil1, Teil2, Teil3, Teil4, etc.',','); Als Ergebnis wird ausgegeben:
Code:
Teil1
Teil2
Teil3
Teil4
etc.
Ein weiterer Beispielaufruf würde so aussehen:

CommaTxt('Teil1; Teil2; Teil3; Teil4; etc.',';'); Als Ergebnis wird dasselbe wie beim ersten Beispiel ausgegeben.



Ich hoffe, ihr könnt etwas hiermit anfangen
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: String teilen

  Alt 27. Dez 2005, 15:41
Hi,
bereits hier in der Codelibrary vorhanden.

Chris
  Mit Zitat antworten Zitat
27. Dez 2005, 15:42
Dieses Thema wurde von "Chakotay1308" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: String teilen

  Alt 27. Dez 2005, 16:50
Zitat von Chakotay1308:
Hi,
bereits hier in der Codelibrary vorhanden.

Chris
Dort wird aber nicht ein nachfolgendes Leerzeichen ignoriert .

@Danniolo: Warum gibst du nicht einfach als weiteren Parameter an, ob ein Leerzeichen ignoriert werden soll, anstatt dass der Programmierer in deinem Code herumarbeiten muss?

Ich würde aber eher auf reguläre Ausdrücke setzen, denn erstens ist es höchstwahrscheinlich schneller zu programmieren und zweitens kinderleicht an die äußeren Bedingungen anzupassen. Statt z.B. nun die Funktion so zu verändern, dass sie mehrere Leerzeichen ignoriert, würde einfach der Ausdruck
Code:
(,|^)\s*([^,]*)
genügen, fertig.

[add]Für den Regex gebe ich keine Garantie (weder Richtigkeit noch Einfachheit) [/add]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: String teilen

  Alt 27. Dez 2005, 16:57
Delphi-Quellcode:
X := Explode(',', S);
For i := 0 to High(X) do X[i] := TrimRight(X[i]);
Aber für'n Notfall stört so'ne kleine Erweiterung och nich,
aber mal sehn was aus der hier vorgestellten Version wird. ^^
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:23 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