Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [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!

Tutorial

RANDOM-Tutorial

von RedakteurytwinkySeite 3 von 3

Hmm, wenn dieser Record dem Compiler bekannt ist(und das ist er, sonst würde das Speichern ja nicht funktionieren), dann müsste auch SizeOf() funktionieren. Bingo, SizeOf(Adressen) gibt die Länge des DatenTyps aus und das ist 100.
(Dann ist es auch kein Wunder, dass die Ausgabe nicht in Ordnung ist.)
Bevor wir also selbst ausrechnen, was FreeBASIC unserer Meinung nach benutzen müsste, ist es sicherer, die Funktionen von FreeBASIC zu benutzen. Gern weise ich in diesem Zusammenhang nochmal auf die Funktion FreeFile hin, die immer einen freien Datei-Handle liefert und deshalb besser verwendet werden sollte(gerade bei größeren Programmen) als die manuelle Vergabe, um Konflikte zu vermeiden.
Die Struktur des verwendeten Records sollte den Benutzern des Programms stets mitgeteilt werden, da sonst Fehleingaben gewissermaßen 'vorprogrammiert' sind. Auch bietet es sich an, die Konstanten für den Record an einer leicht auffindbaren Stelle des Programmes unterzubringen, falls die Struktur mal geändert werden sollte. Vorsicht, falls das erforderlich wird, können die Dateien, die mit der alten Struktur geschrieben wurden, nicht mehr richtig gelesen werden!!!
So, wer sich jetzt noch kein eigenes Programmbeispiel geschrieben hat, bekommt es jetzt hier:

Randomize Timer
Const VornameLen=20, NachnameLen=30, WohnortLen=40, Dateiname="Personen.Dat", MaxEintrag=4
Type Adressen
  Vorname As String*VornameLen   'damit es auch mehrere Vornamen sein dürfen
  Nachname As String*NachnameLen 'es kann ja auch Doppelnamen geben
  Alter As Integer               'auch ein Integer hat eine feste Länge: 4
  Wohnort As String*WohnortLen   'damit auch Stadtteile benutzt werden können
End Type
Dim As Adressen DatenListe(1 To MaxEintrag), TestEintrag
Dim As Integer DatenFile=FreeFile, i, RecordLaenge=SizeOf(TestEintrag), j

Open Dateiname For Random As #DatenFile Len=RecordLaenge
  For i=1 To MaxEintrag
        With DatenListe(i)
          Read .Vorname, .Nachname, .Alter, .Wohnort
        End With
      Put #DatenFile, , DatenListe(i)
  Next i
Close #DatenFile
i=SizeOf(TestEintrag.Vorname)
j=i
?i
i=SizeOf(TestEintrag.Nachname)
j+=i
?i
i=SizeOf(TestEintrag.Alter)
j+=i
?i
i=SizeOf(TestEintrag.Wohnort)
?i
?j+i
?RecordLaenge
For i=1 To MaxEintrag
    With DatenListe(i)
      ? .Vorname &" " &.Nachname &", " &.Alter &", " &.Wohnort
    End With
Next i

Data "Ben", "Cartwright", 199, "Ponderosa", _
     "Joe", "Dalton", 41, "Wilder Westen", _
     "Lois", "Lane", 22, "Metropolis", _
     "Marge", "Simpson", 34, "Springfield"
'Jetzt Testeintrag benutzen, um zu zeigen, daß es klappt^^
Do
    Input "Welche Adresse lesen(0=Ende):", i
    If i And i<=MaxEintrag Then
        Open Dateiname For Random As #DatenFile Len=RecordLaenge
          Get #DatenFile, Int(Rnd*MaxEintrag+1), TestEintrag
            With TestEintrag
              Print .Vorname &" " &.Nachname &", " &.Alter &", " &.Wohnort
            End With
        Close #DatenFile
    End If
Loop Until i=0
Print "Eniki..";
Print Input(1)

Jetzt kommen wir auf Rnd() zurück ;-))
Bei dem oben erwähnten Beispiel mit den Songs wäre es ganz praktisch, wenn der Rechner automatisch einen Song auswählen würde..
Dazu wird die Funktion Int(Rnd*MaxEintrag+1) benutzt, die immer einen Eintrag aus 1..MaxEintrag liefert ;-))
Wenn dann noch als erste Zeile Randomize Timer benutzt wird, ist die Reihenfolge immer zufällig(also auch RANDOM).
(aber das steht ja auch in der Referenz..)
Interessant ist natürlich auch die letzte Zeile, die demonstriert, wie einfach ein Tastendruck abgefragt werden kann, ohne dass der Tastaturpuffer hinterher noch 'gewartet' werden muss^^
So, das war erstmal eine Einführung(!!) in die Dateiverwaltung mit RANDOM xD
Viel Spaß beim Organisieren der 70000 Songs^^
Gruß
ytwinky

 

Gehe zu Seite Gehe zu Seite  1  2  3  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 21.01.2008 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 07.09.2017 von Mitgliedavrfreund gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen