fb:porticula NoPaste
Datum in Zeichenkette finden
Uploader: | Sebastian |
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