AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Parsen nach Datum

Ein Thema von zongo-joe · begonnen am 2. Feb 2019 · letzter Beitrag vom 9. Feb 2019
 
zongo-joe

Registriert seit: 8. Jun 2007
13 Beiträge
 
Delphi 7 Professional
 
#1

Parsen nach Datum

  Alt 2. Feb 2019, 16:10
Habe zum PArsen meiner Kontoauszüge eine Funktion geschrieben, um ein Datum in einem String zu suchen:

auch kein Highlight des eleganten Codens, aber funzt:

Delphi-Quellcode:
function datumsuchen(x:string; trenner:char; erstes,meldung,streng:boolean):string;
  // sucht ein Datum in x
  // trenner = trennzeichen zB . oder /
  // erstes = true = erstes vorhandenes Datum suchen, sonst letztes
  // meldung = Message, wenn kein Datum gefunden wird
  // streng = Jahr muss mindestens 2stellig sein (delphi akzeptiert auch einstellig)
  // Rückgabewert wenn kein Datum geunden wird ist leer

  var gefunden:boolean;
      posi:integer;
      res:string;

  function suchdatum (x:string; posi:integer):string;
    // posi = erstes trennzeiche, darum herum wird das datum gesucht
    var res:string;
         posi2,anz,i:integer;
         fehler:boolean;
         test : tdate;

    begin
      res:='';
      fehler:=false;

      // erst nach links alle zeichen kopieren, die zahlen oder trenner sind
      posi2:=posi;
      while (posi2 > 0) and (x[posi2] in [trenner,'0'..'9']) do begin
        res := x[posi2] + res;
        dec(posi2)
      end;


      // dann nach rechts alle zeichen kopieren, die zahlen oder trenner sind
      posi2:=posi+1;
      while (posi2 <= length(x)) and (x[posi2] in [trenner,'0'..'9']) do begin
        res := res + x[posi2];
        inc(posi2)
      end;


      // jetzt prüfen, ob genau 2 trenner vorhanden sind
      anz:=0;
      for i:=1 to length(res) do if res[i]=trenner then inc(anz);
      if anz <> 2 then fehler:=true;

      // jetzt prüfen, ob es sich um ein gültiges datum handelt
      try
        if not fehler then test := strToDate(res);
      except fehler:=true; end;

      if fehler then result:='else result:=res;

    end; // von function suchdatum



  begin
    gefunden:=false;


    if length(x) > 0 then begin

      if erstes then begin // erstes gültiges Datum suchen

        posi:=1;
        while (not gefunden) and (posi <= length(x)) do begin
          if x[posi] = trenner then begin
            res := suchdatum(x,posi);
            if res <> 'then gefunden := true;
          end;
          inc(posi);
        end;

      end else begin // letztes gültiges Datum suchen

        posi:=length(x);
        while (not gefunden) and (posi >0 ) do begin
          if x[posi] = trenner then begin
            res := suchdatum(x,posi);
            if res <> 'then gefunden := true;
          end;
          dec(posi);
        end;

      end;

    end; // von if length(x) > 0

    // prüfung of bei streng mindestesn 2stellige jahreszahl
    if gefunden and streng then begin
      posi:=length(res)+1;
      repeat
        dec(posi);
      until (posi=0) or (res[posi]=trenner);
      if posi > length(res)-2 then begin
        gefunden := false;
        res:='';
      end;

    end;

    if (not gefunden) and meldung then showmessage('Kein gültiges Datum in '+x+' gefunden.');

    result:=res

  end; // von function datumsuchen
Aufruf zB mit:
showmessage(datumsuchen('Der Mops hopst am 1.1.2019','.',true,true,true));
  Mit Zitat antworten Zitat
 

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:05 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-2025 by Thomas Breitkreuz