Datum aus Textdatei auslesen

Mister master

Erfahrenes Mitglied
Hallo Leute! Ich habe hier (für mich) ein etwas komplexeres Problem!

Ich will einen Geburtstagskalender programmieren, muss nicht viel können nur das:

Hab 2 Textboxen. In der einen wird der Name eingegeben, in der anderen das Datum (da könnt ihr mir sagen, wie das Datum eingegeben werden muss). Wenn man auf einen Button klickt, wird das gespeichert, für jeden Eintrag eine neue .txt Datei mit dem vollen Namen (also dem Eintrag in der ersten textbox) als Dateinamen in C:\Geburtstag

Dann soll, wenn ich das Programm starte, jede der .txt Dateien durchsucht werden. Wenn sich das Monat und der Tag überschneiden, dann soll eine Msgbox kommen, in der der Name des Geburtstagskindes steht. Wäre auch recht praktisch, wenn auch die 3 Tage davor eine Msgbox kommt, nur halt mit dem Text: "*Name* hat in 3 Tagen Geburtstag!"

Ich hoffe jemand nimmt die Herausforderung an, mir hier ein bischen (eigentlich ein bischen viel) unter die Arme zu greifen!

Danke schon im Voraus, euer
M&M.
 
Also, zum Thema Speichern und Laden solltest du einfach man im Forum suchen, es gibt schon zig Threads dazu.

Am besten, du schreibst den Namen und den Geburtstag zusammen in eine Zeile deiner Textdatei und liest sie auch zusammen wieder aus. Dann kannst du einfach der Person den Geburtstag zuordnen.

Zum Thema Erkennen, du brauchst aus dem Geburtstag nur den Monat auslesen, dazu bietet es sich an, den Geburtstag immer in der gleichen Form zu verarbeiten (systembedingt würde ich TT.MM.YYYY empfehlen). Um Datumsangaben zu vergleichen kannst du dann die Funktion DateDiff verwenden.


Der Doc!
 
Am besten ist, wenn du bei speichern den Namen und das Datum kombinierst
Visual Basic:
'Ich definiere hier mal Namen und Datum
sName = "DrSoong"
sDatum = "04.07.1974"
sZeile = sName & "|" & sDatum '"|" ist das Trennzeichen
Du speicherst jetzt diese Zeile in die Textdatei, damit hast du das Datum dem Namen zugeordnet. Am besten ist, du liest deine Textdatei auf einmal ein
Visual Basic:
sDatei = "C:\Daten.txt"
sInhalt = Space(FileLen(sDatei))
Open sDatei For Binary As #1
 Get #1, ,sInhalt
Close #1
Jetzt hast du den Inhalt der Textdatei in einer Variable, mit
Visual Basic:
sZeilen = Split(sInhalt, vbNewLine)
erhältst du ein Array mit den Namen und Geburtsdaten. Du brauchst jetzt in einer Schleife nur noch alle Arrayelemente durchgehen, das Datum isolieren (mit Instr() das Trennzeichen suchen und das Datum danach rauskopieren) und mittels DateDiff mit dem aktuellen vergleichen (bzw. noch das Jahr angleichen).


Der Doc!
 
Ich würde das ganze aber nicht in separete Dateien speichern, also für jeden Geburtstag eine, denn da suchst Du Dir hinterher einen Wolf, wenn Du irgendwann 500 Dateien durcheiern willst.

Da würde ich lieber eine Datei fester Satzlänge, eine sogenannte Random-Datei, nehmen.

Es geht z.B. so: In einem Modul legst Du Dir einen benutzerdefinierten Typ an:
Code:
Option Explicit

Type GeburtstagsTyp
   cName As String * 50
   Tag As Integer
   Monat As Integer
   Jahr As Integer
End Type

In Deiner Form kannst Du das dann wie folgt auswerten:
Code:
Option Explicit


Private tGeb As GeburtstagsTyp
Private FiName As String

Private Sub CmdLaden_Click()
   Dim FileNr As Integer
   Dim i As Integer
   
   FileNr = FreeFile
   Open FiName For Random As #FileNr Len = Len(tGeb)
   For i = 1 To LOF(FileNr) / Len(tGeb)
      Get #FileNr, i, tGeb
      If tGeb.Tag = Day(Now) And tGeb.Monat = Month(Now) Then
         MsgBox "Heute hat " + Trim(tGeb.cName) + " Geburtstag!", vbInformation
      End If
   Next
   Close #FileNr

End Sub

Private Sub CmdSave_Click()
   Dim FileNr As Integer
   Dim i As Integer
   Dim Gefunden As Boolean
   
   FileNr = FreeFile
   Open FiName For Random As #FileNr Len = Len(tGeb)
   tGeb.cName = Text1.Text
   tGeb.Tag = Day(DTPicker1.Value)
   tGeb.Monat = Month(DTPicker1.Value)
   tGeb.Jahr = Year(DTPicker1.Value)
   Put #FileNr, (LOF(FileNr) / Len(tGeb)) + 1, tGeb
   Close #FileNr
End Sub

Private Sub Form_Load()
   FiName = "C:\Geburtstagsliste.txt"
End Sub

Für die Datumseingabe habe ich den DtPicker genommen, der ist in den Microsoft Windows-Common-Controls-2 enthalten.

Viele Grüsse
ronaldh
 
Zurück