Einzelnen Beitrag anzeigen

Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#1

Abstracter Fehler bei Parsefunktion

  Alt 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
Miniaturansicht angehängter Grafiken
abstrakter_fehler_367.gif  
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat