Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Datum überprüfen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
Autor Thema:  Datum überprüfen (1491 mal gelesen)
wasc
Mitglied
Bautechniker


Sehen Sie sich das Profil von wasc an!   Senden Sie eine Private Message an wasc  Schreiben Sie einen Gästebucheintrag für wasc

Beiträge: 52
Registriert: 15.04.2005

Windows 2000, ACAD2005, P4 2,8

erstellt am: 14. Okt. 2005 23:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

hallo !
wie kann ich nach eingabe eines datums in
einer edit_box (attribut eines blocks)überprüfen ob es
sich wirklich um ein  "richtiges" datum handelt ? damit meine ich
erstens das ausschliesen von tippfehlern sowie die korrektheit
des datums selbst. der grund der prüfung ist folgender:
da die daten über einen dxf-import in ein "grafisches Informationssystem (GIS)" laufen,
muss das datum unbedingt korrekt sein sonst wird der import abgebrochen. das datum müsste folgendes format aufweisen:
z.b.: 12.1.2005 oder 1.12.2005

besten dank für die tipps im voraus

  walter

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mapcar
Mitglied
CADmin



Sehen Sie sich das Profil von mapcar an!   Senden Sie eine Private Message an mapcar  Schreiben Sie einen Gästebucheintrag für mapcar

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 15. Okt. 2005 11:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für wasc 10 Unities + Antwort hilfreich

Das ist ein nichttriviales Problem, dessen Lösung vor allem davon abhängt, wie das Ziel definiert ist: Soll nur geprüft werden, ob die Eingabe ein gültiges Datum sein könnte (z.B. 29.02.2001), der ob es auch ein gültiges Datum IST. Wenn ich mich recht erinnere, gab es einen 29.2.2000, aber keinen 29.2.1900). Solche Probleme fängt man sich ruckzuck ein, wenn historische Daten ins Spiel kommen, und das kann bei solchen Anwendungen durch alte Zeichnungen/Baugenehmigungen/... usw. durchaus mal der Fall werden. 

Technisch würde ich das so lösen: Mein PCRE-Paket (PerlCompatible Regular Expressions - gibt es bei Cadwiesel gratis) verwenden und einen reguläre Suchausdruck für eine Datumseingabe auf die Eingabe loslassen. Wird in der Eingabe ein gültiges Datum gefunden und existieren keine überflüssigen Zeichen, dann handelt es sich um eine valide Eingabe. Die notwendigen Regular Expressions findet man im Netz - nicht nur 'mögliches Datum', sondern auch 'gültiges Datum' (mit Anwendung aller Schaltjahrregeln). Diese Vorgehensweise ist z.B. auch die gängige Technik beim Testen von URIs oder Email-Adressen, obwohl da die Sache noch deutlich komplexer wird, da man ja TLD-Listen usw. vorhalten muss.

Gruß, Axel Strube-Zettler

<edit>
Selbstverständlich lassen sich dann auch Eingaben transformieren:
2005/10/15  (american)                =>15.10.2005
15. Oktober 05 (deutsch)              =>15.10.2005
15.10.05 (auch deutsch)              =>15.10.2005
2005-15-10 (irgendwo gibt's auch das) =>15.10.2005

Und noch ein ganz anderer Ansatz: Eine Website suchen, bei der Datumsangaben über drei getrennte Dropdownliste eingegeben werden. Wenn die Site ein 'historisches Thema' hat (mein Tipp: irgendwas für Genealogen), dann lässt sich die Schaltjahr-Validierung vielleicht im JavaScript-Code entdecken. Den Algorithmus kann man dann nach Lisp übersetzen.
</edit>

------------------
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze

[Diese Nachricht wurde von mapcar am 15. Okt. 2005 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1763
Registriert: 11.10.2004

Window 11
ACAD 2021
CIVIL 2021
BricsCAD ab V14
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz
32.0GB RAM
NVIDIA GeForce MX450<P>

erstellt am: 17. Okt. 2005 08:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für wasc 10 Unities + Antwort hilfreich

Hallo Walter,
ich habe ein bißchen probiert. Die folgende Funktion prüft das eingegebene Datum auf Plausibilität.
Das Problem mit den Schaltjahren, das z.B. 1900 keins war bin ich so umgangen, daß nur die Jahre 1980 - 2099 zulässig sind.
Was Du dann noch einbauen könntest wäre eine Prüfung auf ungültige Zeichen, oder, naja, ich glaube da gibt es noch so einiges, was man falsch eingeben könnte, wenn man will.
Der Aufruf ist folgendermaßen:
(datum_pruef "17.10.2005")

Code:

(defun datum_pruef  (string / liste error sj schaltjahre)
  (setq error t)

  (if (vl-string-search "." string)

    (progn
;;;schaltjahre von 1980 - 2099 => wenn durch 4 teilbar
      (setq sj 1976)
      (repeat 30
(setq schaltjahre (cons (setq sj (+ sj 4.0)) schaltjahre)))


      (while (vl-string-search "." string)
(setq liste  (cons
      (substr string 1 (vl-string-search "." string))
      liste)
      string (substr string
    (+ 2 (vl-string-search "." string)))))
      (setq liste (reverse (cons string liste)))
;;;Prüfung Tag
      (cond
((or (< (atoi (car liste)) 1) (> (atoi (car liste)) 31))
(alert "\nDer Tag ist falsch.")
(setq error nil))
((and (member (atoi (cadr liste)) '(2 4 6 9 11))
      (= (atoi (car liste)) 31))
(alert "\nDer Tag ist falsch.")
(setq error nil))
((and (= (atoi (cadr liste)) 2)
      (= (atoi (car liste)) 30))
(alert "\nDer Tag ist falsch.")
(setq error nil))
((and (= (atoi (cadr liste)) 2)
      (= (atoi (car liste)) 29))
(if (not (member (atof (caddr liste)) schaltjahre))
  (progn
    (alert "\nDer Tag ist falsch, kein Schaltjahr.")
    (setq error nil)))))
;;;Prüfung Monat
      (cond
((or (<= (atoi (cadr liste)) 0) (> (atoi (cadr liste)) 12))
(alert "\nDer Monat ist falsch.")
(setq error nil))

)
;;;Prüfung Jahr (Festlegung kleinstes Jahr 1980, größtes Jahr 2099)
      (cond ((or (< (atoi (caddr liste)) 1980)
(>= (atoi (caddr liste)) 2099))
    (alert "\nDer Monat ist falsch.")
    (setq error nil))

    )
      )
    (progn
      (alert
"als Trennzeichen muß eine Dezimalpunkt verwendet werden.")
      (setq error nil)))
  error
  )



------------------
viele Grüße

Jörn

[Diese Nachricht wurde von joern bosse am 17. Okt. 2005 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 17. Okt. 2005 11:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für wasc 10 Unities + Antwort hilfreich

wie wärs damit ?
statt da viel herumzurechnen : VBScript kann mit Datums rechnen

(defun TestDatum ( datum / math ret)
(vl-load-com)
(setq math (vlax-get-or-create-object "ScriptControl"))

(vlax-put math "Language" "VBScript")
(if (= -1 (vlax-invoke math "EVAL" (strcat "IsDate(\"" datum "\")")))
    (setq ret (vlax-invoke math "EVAL" (strcat "cstr(CDate(\"" datum "\"))")))
    (setq ret nil)
)
        (vlax-release-object math)
  ret
)


(testdatum "29.02.1900")
nil
(testdatum "28.2.1900")
"28.02.1900"
(testdatum "15. Oktober 2005")
"15.10.2005"
(testdatum "15. Wetlgesundheitstag 2005")
nil

[Diese Nachricht wurde von fuchsi am 17. Okt. 2005 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

wasc
Mitglied
Bautechniker


Sehen Sie sich das Profil von wasc an!   Senden Sie eine Private Message an wasc  Schreiben Sie einen Gästebucheintrag für wasc

Beiträge: 52
Registriert: 15.04.2005

Windows 2000, ACAD2005, P4 2,8

erstellt am: 17. Okt. 2005 13:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

hallo !
danke für die schnellen antworten !!

mapcar:
danke auch für die  antwort !! vor allem gratulation
für deine lisp seiten !! hab schon sehr viel davon und
daraus gelernt ! die funktionen sind super beschrieben
und leicht verständlich !!!

jorn bosse:
danke für die antwort ! da ich anfänger bin ist dieser
code für mich auch verständlich !!

fuchsi:
danke auch für die antwort ! da ich mit VBSkript noch sehr
wenig zu tun hatte, ist es ein bisschen schwer für mich nachzu-
vollziehen was da genau passiert !! der code funktioniert
aber super !!!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


Sehen Sie sich das Profil von fuchsi an!   Senden Sie eine Private Message an fuchsi  Schreiben Sie einen Gästebucheintrag für fuchsi

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 17. Okt. 2005 13:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für wasc 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von wasc:
danke auch für die antwort ! da ich mit VBSkript noch sehr
wenig zu tun hatte, ist es ein bisschen schwer für mich nachzu-
vollziehen was da genau passiert !! der code funktioniert
aber super !!!

ich verwende das VB Scripting sehr häufig in Lisp, da man damit alles machen kann, was die VB Scriptsprache ermöglicht.

Es gibt z.B.: zwar ein Alert in Lisp, jedoch kein OK Cancel Abfrage oder ien Inputbox.

Das ist mit diesem Tools sehr leicht realisierbar

(defun InputBox ( _prompt _title _default / math ret)
  (vl-load-com)
  (setq math (vlax-get-or-create-object "ScriptControl"))
  (vlax-put math "Language" "VBScript")
  (setq ret (vlax-invoke math "EVAL" (strcat "Inputbox(\""  _prompt  "\",\"" _title "\",\"" _default "\")")))
  (vlax-release-object math)
  ret
)
(inputbox "geben sie einen Vornamen ein " "AutoCad" "Toni")

(defun MsgBox ( _prompt _buttons _title / math ret )
  (vl-load-com)
  (setq math (vlax-get-or-create-object "ScriptControl"))
  (vlax-put math "Language" "VBScript")
  (setq ret (vlax-invoke math "EVAL" (strcat "Msgbox(\""  _prompt  "\"," _Buttons ",\"" _title "\")")))
  (vlax-release-object math)
  ret
)
(MsgBox "Wollen sie das wirklich löschen ?" "vbYesNo+vbQuestion" "AutoCad" )

------------------

Ing. Anton Fuchs
WWW.FFZELL.AT.TC

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz