===== Pos()-Funktion ===== \\ ==== Einleitung==== Diese [[..:standardfunktionen|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 [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: [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|Pos()-Funktion]] ist es in Kombination mit einer oder mehreren [[cockpit-xp:addon:schleifen:schleifen|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|Standardfunktionen]] vor. Im einzelnen sind das die Funktionen [[.:copy|Copy()]], [[.:delete|Delete()]], [[.:length|Length()]], und [[.:inc|Inc()]] und [[.:trim|Trim()]]. Außerdem gibt es eine [[cockpit-xp:addon:schleifen:schleifen#repeat-until-schleife|Repeat...Until-]] und eine [[cockpit-xp:addon:schleifen:schleifen#for-schleife|For-Schleife]]. \\ ---- [[cockpit-xp:start|Start]] - [[cockpit-xp:faq|FAQ]] - [[cockpit-xp:glossar|Glossar]] - [[cockpit-xp:sitemap|Sitemap]] - [[cockpit-xp:impressum|Impressum]]