Ich versuche, eine Delphi-Funktion zu finden, die eine Eingabezeichenfolge basierend auf einem Trennzeichen in ein Array von Zeichenfolgen aufteilt. Ich habe viel bei Google gefunden, aber alle scheinen ihre eigenen Probleme zu haben, und ich konnte keine davon zum Laufen bringen.
Ich muss nur einen String wie: "word:doc,txt,docx"
in ein Array teilen,
das auf ':' basiert. Das Ergebnis wäre
['word', 'doc,txt,docx']
.
Hat jemand eine Funktion, von der er weiß, dass sie funktioniert?
Danke dir
Es ist nicht erforderlich, eine
Split
Funktion zu konstruieren . Es existiert bereits, siehe :Classes.ExtractStrings
.Verwenden Sie es folgendermaßen:
Und um die Frage vollständig zu beantworten;
List
stellt das gewünschte Array mit den Elementen dar:quelle
split
Funktion zu konstruieren , sondern die Notwendigkeit einesTStrings
Objekts. Und wegen der Erwähnungen der Inflexibilität (@awmross) würde ich Franks LösungSie können verwenden
StrUtils.SplitString
.Seine Beschreibung aus der Dokumentation :
quelle
Mit Hilfe der SysUtils.TStringHelper.Split Funktion in Delphi XE3 eingeführt:
Dadurch wird eine Zeichenfolge mit einem bestimmten Trennzeichen in ein Array von Zeichenfolgen aufgeteilt.
quelle
Ich benutze immer etwas Ähnliches:
quelle
Strutils::AnsiReplaceText
list.Text := AnsiReplaceStr(source, delimiter, #13#10);
.Ähnlich der von Mef angebotenen Explode () -Funktion, jedoch mit einigen Unterschieden (von denen ich einen als Fehlerbehebung betrachte):
Unterschiede:
Beispiele:
Es ist das nachfolgende Trennzeichen und das fiktive "leere letzte Element", das ich als Fehlerbehebung betrachte.
Ich habe auch die von mir vorgeschlagene Änderung der Speicherzuordnung mit Verfeinerung aufgenommen (ich habe fälschlicherweise vorgeschlagen, dass die Eingabezeichenfolge höchstens 50% Trennzeichen enthalten könnte, aber möglicherweise auch aus 100% Trennzeichen bestehen könnte, was ein Array leerer Elemente ergibt!)
quelle
Explode ist eine Hochgeschwindigkeitsfunktion, deren Quellcode von der TStrings-Komponente stammt. Ich benutze den nächsten Test zum Explodieren: Explodiere 134217733 Datenbytes, ich erhalte 19173962 Elemente, Arbeitszeit: 2984 ms.
Implode ist eine sehr langsame Funktion, aber ich schreibe es einfach.
quelle
Strings
ist kein Typ.Zeilen in der si- Liste enthalten geteilte Zeichenfolgen.
quelle
Sie können Ihre eigene Funktion erstellen, die TArray of string zurückgibt:
quelle
Hier ist eine Implementierung einer Explosionsfunktion, die in vielen anderen Programmiersprachen als Standardfunktion verfügbar ist:
Beispielnutzung:
quelle
Ich habe diese Funktion geschrieben, die eine verknüpfte Liste getrennter Zeichenfolgen nach einem bestimmten Trennzeichen zurückgibt. Reiner freier Pascal ohne Module.
quelle
Die Jedi-Codebibliothek bietet eine erweiterte StringList mit integrierter Split-Funktion, mit der der vorhandene Text sowohl hinzugefügt als auch ersetzt werden kann. Es bietet auch eine Referenzzählschnittstelle. Dies kann also auch mit älteren Delphi-Versionen verwendet werden, die keine SplitStrings haben, und ohne sorgfältige und etwas mühsame Anpassungen der Standard-TStringList, um nur bestimmte Trennzeichen zu verwenden.
Zum Beispiel kann eine gegebene Textdatei von Zeilen, wie
Dog 5 4 7
man sie analysieren kann, mit:http://wiki.delphi-jedi.org/wiki/JCL_Help:IJclStringList.Split@string@string@Boolean
quelle
Dies wird Ihr Problem lösen
quelle
Meine Lieblingsfunktion zum Teilen:
quelle
ListOfStrings.add(temp);
nach der Schleife hinzufügen, um das letzte Element hinzuzufügen.* *
* *
quelle
Die Basis der NGLG-Antwort https://stackoverflow.com/a/8811242/6619626 Sie können die folgende Funktion verwenden:
Es funktioniert in allen Delphi-Versionen.
quelle
Für delphi 2010 müssen Sie Ihre eigene Split-Funktion erstellen.
Sie können es als solches bezeichnen
quelle
quelle
quelle