Habe jetzt noch eine wenig ausprobiert,und bin leider doch nicht so weit.
Ich habe die entgegennahme jetzt direkt in die Verarbeitung der Schnittstellendaten eingepflegt.
Habe jetzt mal Texte geändert und so, sieht dann so ein Datensatz aus.
#$A#$D#$A'Ereignis: 6091'#$D#$A'Datum: 09.12.2008, Uhrzeit: 18:31:41'#$D#$A'Unscharf'#$D#$A'Hauptbereich: 001, Unterbereich: 000'#$D
Ergebnis als Textdatei gespeichert Hab den mal als Quellcode gewandelt, damit man die Kommentare erkenne kann
Delphi-Quellcode:
Ereignis: 5773 //Immer so
Datum: 09.12.2008, Uhrzeit: 19:07:31 //Immer so
Sabotagemeldergruppe: 0004 EIN //Doch sehr viele Varianten erscheint aber in jedem Datensatz
AP E/A E: 04 Differential-Eingang //Wenig Varianten, aber dafür nicht in jedem Datensatz vorhanden
Hauptbereich: 001, Unterbereich: 000 //Text kann evtl. auch "vbaelrvgbaelrvub" sein
//(Hauptbereich z.B. könnte auch einen selbst erstellten Namen habe)
Ereignis: 5774
Datum: 09.12.2008, Uhrzeit: 19:07:31
AP E/A E: 05 Sabotage Sirene EIN
Hauptbereich: 001
Ich hoffe du kannst erkennen, das die Datensätze doch unterschiedlich sein können. Ich übergebe jetzt doch wieder einen kompletten Datensatz an die Parsefunktion.
Mein Problem ist jetzt, immer noch die genaue Zuweisung der Daten in die richtigen Zeilen
Wenn ich mir den kompletten Datensatz ansehe, habe ich ja immer die Trennung zwischen den Zeilenvorschüben, Leider weiß ich immer noch nicht wie ich erkennen soll, das in der Mitte ein Teildatensatz fehlt.
Eréignis ist klar, damit fängt der Datensatz immer an
Datum somit auch kein Problem und
Uhrzeit bekomme ich auch gefilter.
Der Teilnehmer Text, wenn er da ist, könnte ich mir momentan noch vorstellen in an den Kürzeln AP, IE, MAKRO AE zu erkenne.
Der Bereich ist immer der letzte Datensatz allerdings ohne festen Namen
Vieleicht kannst du mir mal folgende Funktionen von der ParsenUtils erklären. Da habert es nämlich bei mir.
Delphi-Quellcode:
procedure TMyBaseParser.SkipTrash;
begin
while (DataPointer < Length(Data)) and (Data[DataPointer] in [#13, #10, #32]) do
Inc(DataPointer);
end;
function TMyBaseParser.GetTextLength(UpToLineEnd: Boolean): Integer;
function IsTerminatingChar(CharIndex: Integer): Boolean;
begin
if UpToLineEnd then
Result := Data[CharIndex] in [#13, #10]
else
Result := Data[CharIndex] in [#13, #10, #32];
end;
var
CurPointer: Integer;
begin
Result := -1;
CurPointer := DataPointer;
while Result < 0 do
begin
while (CurPointer < Length(Data)) and not IsTerminatingChar(CurPointer) do
Inc(CurPointer);
if (CurPointer + 1 < Length(Data)) and not IsTerminatingChar(CurPointer + 1) then
Inc(CurPointer)
else
Result := CurPointer - DataPointer;
if CurPointer = Length(Data) then
Result := CurPointer - DataPointer + 1;
end;
end;