Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi prüfen, ob string Datum enthält (ohne Fehler) , D5 (https://www.delphipraxis.net/139795-pruefen-ob-string-datum-enthaelt-ohne-fehler-d5.html)

Oldy 5. Sep 2009 14:05


prüfen, ob string Datum enthält (ohne Fehler) , D5
 
Hallo Leute :)

Ich habe eine Stringgrid, genauer gesagt ADVColumnGrid von den TMS´.
Nun, ich habe ine Prozedur, die mir aus 5 TStrings, die ich aus dem Internet fülle, jeweils 5 Spalten füllt.
Nun möchte ich jede Zeile durchgehen (Schleife).
Delphi-Quellcode:
for i:=1 to advcolumngrid1.rows.count -1 do begin .... end;
Wenn .GridCells[0,i] kein Datum enthält, soll die gesamte Zeile gelöscht werden.
wie kann ich jedoch prüfen, ob ein string ein Datum ist?
Denn wenn ich strtodate mache und kein Datum drinnen is, bekopmme ich zwangsweise eine Fehlermeldung..

Vielen Danks chonmal

Mfg
Oldy

Meflin 5. Sep 2009 14:09

Re: prüfen, ob string Datum enthält (ohne Fehler) , D5
 
Zitat:

Zitat von Oldy
Denn wenn ich strtodate mache und kein Datum drinnen is, bekopmme ich zwangsweise eine Fehlermeldung..

Code:
try
  StrToDate()
except
  ...
:?: :wink:

Oldy 5. Sep 2009 14:13

Re: prüfen, ob string Datum enthält (ohne Fehler) , D5
 
:wall:
stimmt ja.. try gibts ja auch noch :wall: :wall: :wall:

danke :D

Sir Rufo 5. Sep 2009 14:16

Re: prüfen, ob string Datum enthält (ohne Fehler) , D5
 
oder mit
Delphi-Quellcode:
StrToDateDef( <StringWert>, <DefaultDatum> )
dann sparst du dir den try ... except Block, der ja die Performance bremst.
Ist das Ergebnis gleich dem Default-Wert, dann war das kein Datum (Default-Wert am besten auf 0 setzen)

cu

Oliver

[edit]ich weiß aber nicht, ob es den Befehl schon unter Delphi 5 gibt[/edit]

Oldy 5. Sep 2009 14:24

Re: prüfen, ob string Datum enthält (ohne Fehler) , D5
 
Zitat:

Zitat von Sir Rufo
ich weiß aber nicht, ob es den Befehl schon unter Delphi 5 gibt

nbe leider nich..

im Try block: wie kann ich das in ne if-abfrage machen?
wenn ich
Delphi-Quellcode:
if strtodate(s) = true then begin .. end;
mache, kommt nur "inkompatible Typen" :(

Sir Rufo 5. Sep 2009 14:29

Re: prüfen, ob string Datum enthält (ohne Fehler) , D5
 
äh, StrToDate wandelt einen Wert vom Typ String in einen Wert vom Typ Date um (darum StrToDate)

Und der Typ Date ist natürlich mit dem Typ Boolean nicht verträglich!

So geht es:
Delphi-Quellcode:
Datum := 0;
try
  Datum := StrToDate( Wert );
except
end;
if Datum = 0 then
  ZeileLoeschen;

Oldy 5. Sep 2009 14:35

Re: prüfen, ob string Datum enthält (ohne Fehler) , D5
 
Zitat:

Zitat von Sir Rufo
äh, StrToDate wandelt einen Wert vom Typ String in einen Wert vom Typ Date um (darum StrToDate)

Und der Typ Date ist natürlich mit dem Typ Boolean nicht verträglich!

So geht es:
Delphi-Quellcode:
Datum := 0;
try
  Datum := StrToDate( Wert );
except
end;
if Datum = 0 then
  ZeileLoeschen;

vielen dank :)

ich hab nur nen bool reingemacht weil Delphi egsagt hat "Ausdruckstyp muss Boolean sein" ...
komisch

himitsu 5. Sep 2009 14:40

Re: prüfen, ob string Datum enthält (ohne Fehler) , D5
 
eine leere Exceptionbehandlungist keine Behandlung!

wenn schon, dann so:
Delphi-Quellcode:
try
  Datum := StrToDate( Wert );
except
  ZeileLoeschen;
end;
und wenn dich das Datum selbst nicht interessiert, sondern nur ob es eines ist, dann kann man Datum:= auch weglassen

Sir Rufo 5. Sep 2009 15:01

Re: prüfen, ob string Datum enthält (ohne Fehler) , D5
 
Zitat:

Zitat von himitsu
eine leere Exceptionbehandlungist keine Behandlung!

wenn schon, dann so:
Delphi-Quellcode:
try
  Datum := StrToDate( Wert );
except
  ZeileLoeschen;
end;
und wenn dich das Datum selbst nicht interessiert, sondern nur ob es eines ist, dann kann man Datum:= auch weglassen

nur würde ich in einem except-teil keinen code ausführen der wiederum eine exception werfen könnte, aber das ist wohl Geschmacksache :mrgreen:

himitsu 5. Sep 2009 15:20

Re: prüfen, ob string Datum enthält (ohne Fehler) , D5
 
Delphi-Quellcode:
Try
  // mach was
Except
  // tu irgendwas
  Raise; // reiche die Exception weiter
End;
genau dafür ist Raise ohne Parameter gedacht

Delphi-Quellcode:
Try
  // mach was
Except
  On E: Exception do
    Raise TMyExteption.Create('Fehler in xyz aufgetreten'#13#10 + E.Message);
End;
halt die Nachricht erweitern und eventuell an die Klasse anpassen

z.B. in himXML fange ich fast keine Exceptions ab, sondern leite sie in meine Exceptionklasse um,
damit der User dann extern gezielt auf Exceptions aus meinen Klassen reagieren kann.
Und erweitere die Nachricht um ein paar Zusatzinfos.

Wie gesagt, solange man den Grund für die Exception nicht gezielt alternativ behandelt hat und es absolut keinen Grund mehr gibt, daß diese Meldung noch jemanden interessiert,
sollte man sie auch weiter durchreichen und nicht einfach verschlucken.

Immerhin gab es ja einen Grund für diese Exception und das ist im Normalfall nicht unwichtig.


Exception = schwerwiegende Ausnahmesituation
und das besagt doch, daß man sie nicht leichtsinniger Weise ignorieren/umgehen/ausnutzen sollte


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 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