Inhaltsverzeichnis
Pos()-Funktion
Einleitung
Diese Standardfunktion ermittelt die Position eines oder mehrerer Zeichen in einer größeren Zeichenfolge.
Syntax
Befehl | hier dann die richtige Schreibweise gemäß Cockpit |
---|---|
Funktion | Gibt die Position einer Zeichenkette innerhalb einer größeren Zeichenfolge zurück. |
Rückgabewert | Integer |
Codebeispiel 1
Das Beispiel führt einige Befehle mit dem Pfad zum Pfad des AddOns durch und schreibt das Ergebnis in eine Protokolldatei.
var PosDataFolder : Integer; LaengeText : Integer; cpDataFolder : String; s: String; begin s:= Trim( cpGetPackagePath() ); // Leerzeichen vor und nach Zeichenkette entfernen LaengeText := Length(s); // Länge von s ermitteln PosDataFolder := Pos('Cockpit', s); // Pfad zum Cockpit-Datenverzeichnis extrahieren cpDataFolder := Copy(s, 1, PosDataFolder + 10); // Cockpit-Datenverzeichnis speichern Cockpit.WriteLog := '--------------------------------------------------'; Cockpit.WriteLog := 'Package Pfad : ' + s; Cockpit.WriteLog := 'Anzahl Zeichen Pfad: ' + IntToStr(LaengeText); Cockpit.WriteLog := 'Position "Cockpit" : ' + IntToStr(PosDataFolder); Cockpit.WriteLog := 'Datenverzeichnis : ' + cpDataFolder; Cockpit.WriteLog := '--------------------------------------------------'; end.
Inhalt der Log-Datei
- LogAddOn.txt
[29.03.2015 14:23:24] -------------------------------------------------- [29.03.2015 14:23:24] Package Pfad : C:\ProgramData\Cockpit-V2\AddOn\SLX - Snippets\SLX - Beispiele Wiki [29.03.2015 14:23:24] Anzahl Zeichen Pfad: 67 [29.03.2015 14:23:24] Position "Cockpit" : 16 [29.03.2015 14:23:24] Datenverzeichnis : C:\ProgramData\Cockpit-V2\ [29.03.2015 14:23:24] --------------------------------------------------
Codebeispiel 2
In diesem Beispiel wird der Pfad zum AddOn ermittelt und dieser dann in seine einzelnen Bestandteile zerlegt. Das Resultat landet in der Protokolldatei LogAddOn.txt.
var i : Integer; s : String; PathComponents : TStringList; PosBackSlash : Integer; PathComponentsCount : Integer; begin // Leerzeichen vorne und am Ende der Zeichenkette entfernen s := Trim(cpGetPackagePath()); // Einen Backslash anfügen. Erleichtert die Verarbeitung s := s + '\''; Cockpit.WriteLog := '--------------------------------------------------'; // Zeichenkettenauflistung als Objekt erstellen PathComponents := TStringList.Create; repeat // Wie sieht die Variable s zur Zeit aus? Cockpit.WriteLog := 'Aktueller Inhalt s : ' + s; // Position des Backslash ermitteln PosBackSlash := Pos('\'', s); Cockpit.WriteLog := 'Position Slash : '+IntToStr(PosBackSlash); // Zeichenfolge zu Liste hinzufügen PathComponents.Add( Copy(s, 1, PosBackSlash) ); Cockpit.WriteLog := 'Kopierter Text : '+ Copy(s, 1, PosBackSlash); Cockpit.WriteLog := '--------------------------------------------------'; Delete(s, 1, PosBackSlash); // Zeichenfolge mit \ löschen Inc(PathComponentsCount); // Zähler um 1 erhöhen until s = ''; // So lange durchlaufen, bis die Variable s leer ist. // Protokolldatei schreiben Cockpit.WriteLog := '--------------------------------------------------'; Cockpit.WriteLog := 'Pfad zerlegt in : ' + IntToStr(PathComponentsCount) + ' Teile.'; Cockpit.WriteLog := '--------------------------------------------------'; // Jeden einzelnen Ordnernamen im Pfad in Log schreiben for i := 0 to PathComponentsCount - 1 do begin Cockpit.WriteLog := 'Name Ordner ['+IntToStr(i)+'] : ' + PathComponents[i]; end; Cockpit.WriteLog := '--------------------------------------------------'; PathComponents.Free; // Objekt wieder freigeben end.
Inhalt der Log-Datei:
- LogAddOn.txt
[29.03.2015 14:14:22] -------------------------------------------------- [29.03.2015 14:14:22] Aktueller Inhalt s : C:\ProgramData\Cockpit-V2\AddOn\SLX - Snippets\SLX - Beispiele Wiki\ [29.03.2015 14:14:22] Position Slash : 3 [29.03.2015 14:14:22] Kopierter Text : C:\ [29.03.2015 14:14:22] -------------------------------------------------- [29.03.2015 14:14:22] Aktueller Inhalt s : ProgramData\Cockpit-V2\AddOn\SLX - Snippets\SLX - Beispiele Wiki\ [29.03.2015 14:14:22] Position Slash : 12 [29.03.2015 14:14:22] Kopierter Text : ProgramData\ [29.03.2015 14:14:22] -------------------------------------------------- [29.03.2015 14:14:22] Aktueller Inhalt s : Cockpit-V2\AddOn\SLX - Snippets\SLX - Beispiele Wiki\ [29.03.2015 14:14:22] Position Slash : 11 [29.03.2015 14:14:22] Kopierter Text : Cockpit-V2\ [29.03.2015 14:14:22] -------------------------------------------------- [29.03.2015 14:14:22] Aktueller Inhalt s : AddOn\SLX - Snippets\SLX - Beispiele Wiki\ [29.03.2015 14:14:22] Position Slash : 6 [29.03.2015 14:14:22] Kopierter Text : AddOn\ [29.03.2015 14:14:22] -------------------------------------------------- [29.03.2015 14:14:22] Aktueller Inhalt s : SLX - Snippets\SLX - Beispiele Wiki\ [29.03.2015 14:14:22] Position Slash : 15 [29.03.2015 14:14:22] Kopierter Text : SLX - Snippets\ [29.03.2015 14:14:22] -------------------------------------------------- [29.03.2015 14:14:22] Aktueller Inhalt s : SLX - Beispiele Wiki\ [29.03.2015 14:14:22] Position Slash : 21 [29.03.2015 14:14:22] Kopierter Text : SLX - Beispiele Wiki\ [29.03.2015 14:14:22] -------------------------------------------------- [29.03.2015 14:14:22] Pfad zerlegt in : 6 Teile. [29.03.2015 14:14:22] -------------------------------------------------- [29.03.2015 14:14:22] Name Ordner [0] : C:\ [29.03.2015 14:14:22] Name Ordner [1] : ProgramData\ [29.03.2015 14:14:22] Name Ordner [2] : Cockpit-V2\ [29.03.2015 14:14:22] Name Ordner [3] : AddOn\ [29.03.2015 14:14:22] Name Ordner [4] : SLX - Snippets\ [29.03.2015 14:14:22] Name Ordner [5] : SLX - Beispiele Wiki\ [29.03.2015 14:14:22] --------------------------------------------------
Hinweise
Mit der Pos()-Funktion ist es in Kombination mit einer oder mehreren Schleifen, einen strukturierte Zeichenkette, z.B. einen Pfad zu einem Verzeichnis auf der Festplatte auch komplett zu verarbeiten und in seine Bestandteile zu zerlegen.
In dem komplexeren Codebeispiel 2 kommen weitere Standardfunktionen vor. Im einzelnen sind das die Funktionen Copy(), Delete(), Length(), und Inc() und Trim().
Außerdem gibt es eine Repeat...Until- und eine For-Schleife.