![]() |
Parsen nach Datum
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:
Aufruf zB mit:
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 showmessage(datumsuchen('Der Mops hopst am 1.1.2019','.',true,true,true)); |
AW: Parsen nach Datum
Was willst du uns damit sagen? Oder wolltest du einfach diesen Quellcode dem allgemeinen Publikum dankenswerterweise zur Verfügung stellen?
|
AW: Parsen nach Datum
Hallo zongo-joe,
schöne Routine und war bestimmt sehr aufwendig diese zu Testen und zu entwickeln. Hast du schon Mal von Regulären Ausdrücken gehört? Mit diesen kann man ganz prima Dinge suchen in dem man Regeln vorgibt. Beispiel: 44.55.6666 Wenn du das Suchen willst, dann wäre der Suchstring z.B. \d{2}\.\d{2}\.\d{4} Das kann man dann noch verfeiner, um z.B. zu sagen, dass der Monat nur 0 oder 1 in der ersten Stelle haben kann. \d{2}\.[01]\d\.\d{4} Jahreszahl 2 oder 4 stellig: \d{2}\.[01]\d\.(\d{2}){1,2} Gibt da wirklich viele tolle Möglichkeiten. ![]() ![]() |
AW: Parsen nach Datum
Um das RegEx Thema zu komplettieren: Delphi hat eine RegEx Klasse irgendwo in der RTL mit drin.
Ich weiß jetzt nur nicht wie die heißt und wie man die benutzt, sondern nur, dass es diese gibt. |
AW: Parsen nach Datum
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 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