Original geschrieben von emanHH
Hab jetzt herausgefunden wie ich es hinbekomme bestimmte wörter in einer TXT DAtei (Sie aus dem FMS-Text erstellt wurde) zu suchen!
Problem ist nur das die Einzelnen "Details" mit "/" getrennt sind!
BsP: Auftragnummer/Uhrzeit/Notf/ERKR//Ort/Strasse/NAme
Wie bekomme ich nun die "/" weg, damit ich die Wörter einzelnd auswerten kann?
Jede "höhere" Programmiersprache bietet diverse String-Funktionen. Mit diesen läßt sich das Problem lösen.
Eine einfache Funktion zum splitten der Meldung in einzelne Worte läßt sich über eine Schleife lösen.
Man läuft den String von Position 1 bis zur Länge des Strings durch und merkt sich die Position des ersten Trennzeichens.
Dann schreibt man das erste "Wort" von der Position 1 bis zur Position des Zeichens vor dem Trennzeichen raus.
Anschließend sucht man ab dem Zeichen nach dem Trennzeichen weiter in Richtung Stringende.
Sobald man erneut ein Trennzeichen findet Schreibt man nun das "Wort, beginnend mit dem Zeichen das dem zuvor gefundenen Trennzeichen folgte bis zum Zeichen vor dem nächsten gefundenen Trennzeichen raus. Anschließend (wenn noch nicht das Stringende erreicht ist) wiederholt man diesen Schritt, bis man nach dem letzten gefundenen Trennzeichen keines mehr findet.
Das letzte "Wort" beginnt mit dem Zeichen nach dem letzten gefundenen Trennzeichen und umfaßt die restlichen Zeichen des Strings bis zum Ende.
Jetzt hat man alle Worte einzeln und kann sie mit den entsprechenden Ersatzbegriffen vergleichen.
Das ganze läßt sich auch in einer Funktion 'SplitLine' implementieren, die als Rückgabewert das jeweilige Wort hat und als übergabeparameter den Gesamtstring, Pos_1 und Pos_2.
Der erste Aufruf würde dann so aussehen:
String := 'Auftragnummer/Uhrzeit/Notf/ERKR//Ort/Strasse/NAme';
Pos_1 := 1;
Pos_2 := 0;
i := 1;
Trenner := '/';
While Pos_2 < Length (String) Do
Wort(i) := SplitLine(String, Pos_1, Pos_2, Trenner);
Pos_1 := Pos_2 + 1;
Inc(i);
Loop;
Nach dem ersten Aufruf hat Wort(1) den Wert Auftragnummer und Pos_2 den Wert 14.
Nach dem zweiten Aufruf hat Wort(2) den Wert Uhrzeit und Pos_2 den Wert 22.
...
Nach dem 'letzten' Aufruf hat Wort(8) den Wert NAme und Pos_2 den Wert 50.
Da 50 nicht mehr kleiner als die Länge des Strings ist (ist genau die Länge des Strings + 1) wird die Schleife beendet, und alle Worte sind in dem Array Worte() als einzelne Worte gespeichert
Die Funktion SplitLine könnte etwa folgenden Aufbau haben:
Function SplitLine(Text as String, Pos1 as Number, Pos2 as Number, TrennZeichen as Char) returns String;
Pos2 := FindPos(Text, Pos1, TrennZeichen);
if Pos2 < 1 then
Pos2 := Length(Text) + 1;
end if;
return substring(Text, Pos1, Pos2 - Pos1);
end function;
Die Funktionen FindPos und Substr werden in der Regel von der Hochsprache zur Verfügung gestellt.
Mit kameradschaftlichen Grüßen
FWP