Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

Datum in Zeichenkette finden

Uploader:AdministratorSebastian
Datum/Zeit:27.12.2008 19:32:06

'Siehe http://forum.qbasic.at/viewtopic.php?t=6180

#define KeinDatum "ERR"

'Prüft, ob der String nur aus Zahlen besteht
Function IstEineZahl (ByVal Z As String) As Integer
    For i As Integer = 0 To LEN(Z) - 1
        If Z[i] < 48 OR Z[i] > 57 Then Return 0
    Next i
    Return -1
End Function

'Findet ein Datum im Format TT.MM.JJJJ
Function FindDatum (ByVal Z As String) As String
    Dim As Integer i, start, p1, p2, fehler
    Dim As String Teile(1 To 3)
    If Z = "" Then Return KeinDatum
    start = 1
    Do
        p1 = Instr(start,Z,".")
        If p1 = 0 Then
            Return KeinDatum
        Else
            If (p1 > 2) And (p1 < (LEN(Z)-6)) Then
                p2 = Instr(p1+1,Z,".")
                If (p2 <> 0) AndAlso ((p2-p1) = 3) Then
                    Teile(1) = MID(Z,p1-2,2)
                    Teile(2) = MID(Z,p1+1,2)
                    Teile(3) = MID(Z,p2+1,4)
                    fehler = 0
                    For i = 1 to 3
                        If Not (IstEineZahl(Teile(i)) AndAlso Val(Teile(i)) > 0) Then
                            fehler = -1
                            Exit For
                        End If
                    Next i
                    If (Not fehler) AndAlso (Val(Teile(1)) < 32) AndAlso (Val(Teile(2)) < 13) Then
                        'Hier könnte man noch prüfen, ob der Tag im angegebenen Monat existiert.
                        '(Falls jemand den 31.02. oder sowas ausprobiert... ;-) )
                        RETURN MID(Z,p1-2,10)
                    End If
                End If
            End If
        End If
        start += 1
    Loop
End Function


Dim As String Test(9)

Test(0) = "Hallo.Welt.Dies ist ein Test."
Test(1) = "Hallo 24.12.2006 Test"
Test(2) = "Hallo 24.1X.2006 Test"
Test(3) = "Hallo 24.13.2005 Hallo"
Test(4) = "Hallo 88.01.2008 Test"
Test(5) = "Hallo 88.12.12.2008 Test"
Test(6) = "x...y"
Test(7) = "00.00.0000"
Test(8) = "234.3434.23.08.2007.34"
Test(9) = "A 93.10.1995 13.13.1993 01.01.2000 B"

For i As Integer = 0 To UBound(Test)
    PRINT Using "\                                  \  =>  \        \"; Test(i); FindDatum(Test(i))
Next i
SLEEP: END