Überblick
Beim Programmieren kommt es sehr häufig vor, dass man Strings auf verschiedenste Art jund Weise verarbeiten muss. Will man Beispielsweise nur bestimmte Teile eines Strings weiterverarbeiten, ist es nötig diese interessanten Teile gewissermaßen auszuschneiden. Oder man will bestimmte Teile eines Strings ersetzen. Häufig kommet es auch vor, dass Datenbestände in Textdateien mit einer bestimmten vorgegebenen Struktur (beispielsweise CSV) vorliegen und diese bearbeitet werden müssen. In diesem Tutorial wollen wir uns ansehen, wie man so etwas mit Delphi macht.
Hier die wichtigsten Funktionen zur Stringverarbeitung in Delphi:
zum Suchen in Strings
– Pos
– PosEx
zum Verarbeiten von Strings
– Copy
– Delete
– Insert
– StringReplace
Sonstige
– Length
– AnsiUpperCase
– AnsiLowerCase
Ein paar Vorbemerkungen zu den Funktionen
Die Funktionen Copy, Delete, Insert, Length und Pos befinden sich in der Unit System, stehen also automatisch zur Verfügung. StringReplace (ab Delphi 5), AnsiUpperCase und AnsiLowerCase befinden sich in der Unit SysUtils. Weitere interessante String-Funktionen(u.a. auch PosEx) sind in der Unit StrUtils zu finden.
Zur Indizierung von Strings ist zu sagen, dass Strings in Delphi – anders als in anderen Programmiersprachen und anders als bei dynamischen Arrays – beginnend mit 1 indiziert werden. Was heißt das aber jetzt? Im Normalfall kann man davon ausgehen, dass in der Informatik mit 0 angefangen wird zu zählen. Delphi-Strings bilden hier euine Ausnahme:
1 2 3 | s := 'Hallo'; ShowMessage(s[0]); // existiert nicht --> erzeugt einen Compiler-Fehler ShowMessage(s[1]); // gibt 'H' aus. |
Diese Sonderstellung der Strings beruht auf der Implementierung von Strings in Delphi 1. Damals wurde in s[0] die Länge des Strings gespeichert, wodurch Strings auf eine maximale Länge von 255 Zeichen beschränkt waren.
Mit der Einführung von Delphi 2 wurde diese Form des Strings durch den AnsiString (oder kurz String) ersetzt. Die alte Implementierung steht mittlerweile unter dem Namen ShortString zur Verfügung. Ein Beispiel für ShortStrings:
1 2 3 4 5 6 7 | var s: string[50]; // der Wert in eckigen Klammern legt die maximale Länge fest begin s := 'Hallo. Ich bin ein ShortString. '; ShowMessage(IntToStr(Integer(s[0]))); // Länge auf Integer casten und in String umwandeln // gibt die Länge des ShortStrings aus ... |
Im Folgenden werden ausschließlich (Ansi)Strings zum Einsatz kommen. Es lassen sich jedoch sämtliche Beispiele auch mit Shortstrings verwenden. Seit Delphi 2009 bezeichnet der Datentyp string nicht mehr AnsiStrings, sondern UnicodeStrings. Darauf wird hier nicht weiter eingegangen, jedoch bleibt alles hier Vorgestellte im Großen und Ganzen auch für Delphi 2009 gültig.
Permalink
@Embarcadero (falls das jemand liest): Wär doch mal was, das direkt in die System.pas zu packen; könntet ihr auch gleich in eure elendslange Changelog-Datei schreiben und als neues Feature anpreisen 😉
Permalink
Meinst du ehrlich?
Ein Tutorial in der System.pas? Ob das so sinnvoll ist… *kopfkratz*
Permalink
Hmm wollt das eigentlich zu der LastPos()-Funktion dazuschreiben, allerdings wird das dann zum gesamten Tutorial kommentiert.