AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Abstracter Fehler bei Parsefunktion

Ein Thema von Jens Hartmann · begonnen am 27. Mai 2010 · letzter Beitrag vom 27. Mai 2010
 
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
Angehängte Grafiken
Dateityp: gif abstrakter_fehler_367.gif (8,9 KB, 8x aufgerufen)
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz