Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
Delphi XE2 Professional
|
Abstracter Fehler bei Parsefunktion
27. Mai 2010, 09:48
Hallo zusammen,
ich habe ein Problem, das in meinem Programm seid neustem ein Abstracter Fehler beim Parsen von String Zeilen auftritt. Leider kann ich mit der unten angehangen Fehlermeldung recht wenig anfangen. Kann mir da eventuell jemand was genauers zu sagen?
Hier zeige ich mal kurz den Code bei dem der Fehler auftritt...
Delphi-Quellcode:
...
ParserTreeViewMB100.ParseMB100(DataMB100); /Fehlerzeile wenn Daten kommen
...
//Klasse zum Parsen
TMyBaseParser = class
private
Data: String;
DataPointer: Integer;
function OemToAnsi(const OemStr: string): string;
procedure SkipSpaces;
procedure SkipTrash;
function GetTextLength(UpToLineEnd: Boolean): Integer;
function ReadLine: String;
public
EntriesMB256: array of TMyDataEntryMB256;
EntriesMB100: array of TMyDataEntryMB100;
EntriesUEZ : array of TMyDataEntryUEZ;
EntriesIQ8 : array of TMyDataEntryIQ8;
procedure ParseMB256(Text: String); virtual; abstract;
procedure ParseMB100(Text: String); virtual; abstract;
procedure ParseUEZ(Text: String); virtual; abstract;
procedure ParseIQ8(Text: String); virtual; abstract;
end;
//Der Teil der Klasse wo es eigendlich passieren muss
TMyParserMB100 = class(TMyBaseParser)
private
public
procedure ParseMB100(Text: String); override;
end;
//Die Procedure ParseMB100
procedure TMyParserMB100.ParseMB100(Text: String);
var
CurEntry : ^TMyDataEntryMB100;
TempDatum : String;
TempUhr : string;
Temp1 : String;
Temp2 : String;
Temp3 : String;
Temp4 : string;
Temp5 : String;
Temp6 : String;
Temp1Int : Integer;
iPos : Integer;
iPosString: Integer;
DatenMB100: TStringList;
iSL : integer;
begin
try
try
SetLength(EntriesMB100, Length(EntriesMB100) + 1);
CurEntry := @EntriesMB100[High(EntriesMB100)];
DatenMB100 := TStringList.Create;
while Pos(#$D#$A, Text) > 0 do
begin
iPos := Pos(#$D#$A, Text);
Data := Copy(Text,1,iPos-1);
DatenMB100.Add(Data);
Delete(Text,1,iPos+1);
end;
for iSL := 0 to DatenMB100.Count -1 do
Form1.DatenMemo.Lines.Add(DatenMB100[iSL]);
Form1.DatenMemo.Lines.Add('');
Temp1 := DatenMB100[0];
Temp1 := Copy(Temp1, 11, 4);
TryStrToInt(Temp1,Temp1Int);
Temp2 := DatenMB100[1];
Temp2 := Copy(Temp2, 1, 22);
TempUhr := DatenMB100[1];
TempDatum := DatenMB100[1];
TempUhr := Copy(TempUhr, Length(TempUhr)-7, 8);
TempDatum := Copy(TempDatum, Length(TempDatum)-17,9);
if Pos('JAN', TempDatum)= 4 then
begin
Delete(TempDatum, 4, 4);
Insert('01.20', TempDatum , 4);
end;
if Pos('FEB', TempDatum)= 4 then
begin
Delete(TempDatum, 4, 4);
Insert('02.20', TempDatum , 4);
end;
if Pos('MRZ', TempDatum)= 4 then
begin
Delete(TempDatum, 4, 4);
Insert('03.20', TempDatum , 4);
end;
if Pos('APR', TempDatum)= 4 then
begin
Delete(TempDatum, 4, 4);
Insert('04.20', TempDatum , 4);
end;
if Pos('MAI', TempDatum)= 4 then
begin
Delete(TempDatum, 4, 4);
Insert('05.20', TempDatum , 4);
end;
if Pos('JUN', TempDatum)= 4 then
begin
Delete(TempDatum, 4, 4);
Insert('06.20', TempDatum , 4);
end;
if Pos('JUL', TempDatum)= 4 then
begin
Delete(TempDatum, 4, 4);
Insert('07.20', TempDatum , 4);
end;
if Pos('AUG', TempDatum)= 4 then
begin
Delete(TempDatum, 4, 4);
Insert('08.20', TempDatum , 4);
end;
if Pos('SEP', TempDatum)= 4 then
begin
Delete(TempDatum, 4, 4);
Insert('09.20', TempDatum , 4);
end;
if Pos('OKT', TempDatum)= 4 then
begin
Delete(TempDatum, 4, 4);
Insert('10.20', TempDatum , 4);
end;
if Pos('NOV', TempDatum)= 4 then
begin
Delete(TempDatum, 4, 4);
Insert('11.20', TempDatum , 4);
end;
if Pos('DEZ', TempDatum)= 4 then
begin
Delete(TempDatum, 4, 4);
Insert('12.20', TempDatum , 4);
end;
case DatenMB100.Count of
2: begin
CurEntry.LfdNr := Temp1Int;
CurEntry.Datum := TempDatum;
CurEntry.Uhrzeit := TempUhr;
CurEntry.Ereignis := Trim(Temp2);
end;
3: begin
CurEntry.LfdNr := Temp1Int;
CurEntry.Datum := TempDatum;
CurEntry.Uhrzeit := TempUhr;
CurEntry.Ereignis := Trim(Temp2);
if pos('Einbruch HA',Temp2) or pos('Überfall HA', Temp2)
or pos('Bereich', Temp2) or pos('Sabo', Temp2) > 0 then
CurEntry.Bereich := Trim(DatenMB100[2])
else
CurEntry.Teilnehmer := Trim(DatenMB100[2]);
end;
4: begin
CurEntry.LfdNr := Temp1Int;
CurEntry.Datum := TempDatum;
CurEntry.Uhrzeit := TempUhr;
CurEntry.Ereignis := Trim(Temp2);
CurEntry.Bereich := Trim(DatenMB100[2]);
CurEntry.Teilnehmer := Trim(DatenMB100[3]);
end;
5: begin
CurEntry.LfdNr := Temp1Int;
CurEntry.Datum := TempDatum;
CurEntry.Uhrzeit := TempUhr;
CurEntry.Ereignis := Trim(Temp2);
CurEntry.Bereich := Trim(DatenMB100[2]);
CurEntry.Teilnehmer := Trim(DatenMB100[3]+' '+DatenMB100[4]);
end;
6: begin
CurEntry.LfdNr := Temp1Int;
CurEntry.Datum := TempDatum;
CurEntry.Uhrzeit := TempUhr;
CurEntry.Ereignis := Trim(DatenMB100[3]+' '+Temp2);
CurEntry.Bereich := Trim(DatenMB100[2]);
CurEntry.Teilnehmer := Trim(DatenMB100[4]+' '+DatenMB100[5]);
end;
end;
except
Form1.ServiceMemo.Lines.Add('Fehler beim Parsen von Eingangsstring aufgetreten');
end;
finally
DatenMB100.Free;
end;
end;
Ich weiß, das der Code wahrscheinlich nicht viel hergibt. Allerdings, hoffe ich das mir trotzallem jemand helfen kann.
Danke schon mal und Gruß Jens
Jens Hartmann Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
|