Daten aus Datei in Programm laden und verändern/erweitern

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

MoM007

Betreff: Daten aus Datei in Programm laden und verändern/erweitern

BeitragMi, Jun 07, 2006 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ich hab schon wieder ein Problem, dass wohl recht simpel zu lösen ist.

ich habe ein Adressbuch prgrammiert, in das können Adressen eingegeben
werden können, diese werden auch in einer Datei gespeichert. Genau diese
Datei will ich zur weiterbearbeitung bei einem erneuten Programmstart
hineinladen und dann weiter mit Adressen fütter. Ich habe nur die Probleme, dass die neuen Daten die alten überschreiben würden und dass ich die dateien
nicht in das Adreebuch geladen bekomme.

danke in Vorraus

MfG MoM007

PS: bitte steinigt mich nicht weil ich so viele Gosub(2) und Goto(2) hab

Code: [AUSKLAPPEN]
AppTitle "Adressbuch"

Graphics 800, 600, 0, 2

Dim address$(100,6)

Repeat

 .back

 Cls
 Locate 1, 1


 Print "1 - Adresse eingeben"
 Print "2 - Adresse abfragen"
 Print "3 - Adressen speichern"
 Print "4 - Ende"
 Print " "

 vote = Input$("Bitte wählen: ")

 Cls
 Locate 1, 1

; hier sollte eine Ladefunktion stehen

 Select vote
   Case 1
   index = index + 1
   address$(index,0) = Input("Telefonnummer: ")
   address$(index,1) = Input("Vorname: ")
   address$(index,2) = Input("Nachname: ")
   address$(index,3) = Input("Straße und Hausnr.: ")
   address$(index,4) = Input("Wohnort: ")
   address$(index,5) = Input("Land: ")
   address$(index,6) = Input("E-Mail Adresse: ")
  Case 2
   found = 0
   search$ = Input$("Nachname eingeben: ")
   For I=1 To index
    If address$(I,2) = search$ Then
     Print address$(I,1) + " " + address$(I,2)
     Print "- " + address$(I,0)
     Print "- " + address$(I,3)
     Print "- " + address$(I,4)
     Print "- " + address$(I,5)
     Print "- " + address$(I,6)
     found = 1
    EndIf
   Next
   If found = 0 Then Print "Kein Eintrag gefunden"
  Case 3
   f = WriteFile("otext.txt")
    For I = 0 To 100
     For J = 0 To 6
      WriteLine f, address$(I,J)
     Next
    Next
   CloseFile f
   Print "done!"
  Case 4
   .bla

   Cls
   Locate 1, 1

   Print "Möchten Sie das Adressbuch speichern oder die vorgenommenen Einträge verwerfen?"
   Print ""
   Print "1 - speichern"
   Print "2 - verwerfen"
   Print "3 - zurück"
   Print ""

   vote2% = Input$("Ihre Wahl: ")

   If vote2% = 1 Then Gosub save
   If vote2% = 2 Then End
   If vote2% = 3 Then Goto back
   If vote2% <> 1 Or vote2% <> 2 Then Print "Ungültige Wahl!" Goto bla
 
   Case 5

    Gosub rread
 
   Default
   Print "Ungültige Wahl"
  End Select
  Print "Taste drücken"
 WaitKey
Forever

 

;--------------SUB--------------

.save
f = WriteFile("otext.txt")
 For I = 0 To 100
  For J = 0 To 6
   WriteLine f, address$(I,J)
  Next
 Next
CloseFile f
Print "done!"
WaitKey
End
Return

 
.rread
Repeat
 For R = 0 To 6
  f = ReadFile("otest.txt")
  address(I,J) = ReadLine$(f)
  CloseFile f
 Next
 index = index+1
Until Eof(f) Or index=100
Return
AMD XP 2800+, 9600 256RAM, 1GB RAM, WIN XP PRO

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Jun 07, 2006 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist schon ein Fehler...
Code: [AUSKLAPPEN]
Repeat
 For R = 0 To 6
  f = ReadFile("otest.txt")
  address(I,J) = ReadLine$(f)
  CloseFile f
 Next
 index = index+1
Until Eof(f) Or index=100

Es wird immer nur die erste Zeile der Datei ausgelesen!
Besser ist ...
Code: [AUSKLAPPEN]
Repeat 
f = ReadFile("otest.txt")

 For R = 0 To 6
   address(I,J) = ReadLine$(f)
   
 Next
CloseFile f

 index = index+1
Until Eof(f) Or index=100

Damit wird schon mal der komplette Block eingelesen!
Allerdings wird nun immer nur der erste ausgelesen da die datei ja immer wieder neu geöffnet wird!
Einfacher ist es die komplette Datei einzulesen und bei neu hinzugefügten diese alle wieder zu speichern!

Für solche Daten eignen sich Types am besten!
[BB2D | BB3D | BB+]

MoM007

BeitragDo, Jun 08, 2006 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Danek für die Tips, werds mal versuchen.
Die types hat mir schon ein anderer vorgeschlagen, ich versteh die aber
nicht so ganz, muss wohl wieder das buch rausholen...

MfG MoM007
AMD XP 2800+, 9600 256RAM, 1GB RAM, WIN XP PRO

MoM007

BeitragMo, Jun 12, 2006 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe mal eine Lösung für mein Problem geschrieben
Man muss vorher allerdings eine Datei "otext.txt" estellen

Code: [AUSKLAPPEN]
AppTitle "Adressbuch"
Graphics 800, 600, 2, 2




Dim address$(100,6)
Dim bezeichnung$(6)

   Global index=0

   Const nachname=0
   Const vorname=1
   Const telefon=2
   Const strasse=3
   Const ort=4
   Const land=5
   Const email=6

   bezeichnung (nachname)="Nachname"
   bezeichnung (vorname)="Vorname"
   bezeichnung (telefon)="Telefon"
   bezeichnung (strasse)="Straße und Hausnummer"
   bezeichnung (ort)="Wohnort"
   bezeichnung (land)="Land"
   bezeichnung (email)="E-Mail Adresse"


   Const selEnter=1
   Const selShow=2
   Const selSave=3
   Const reload=4
   Const deleteall=5
   Const selExit=6

ReadAll()


Repeat
    Cls
    Locate 1, 1


   Print "1 - Adresse eingeben"
   Print "2 - Adresse abfragen"
   Print "3 - Adressen speichern"
   Print
   Print "4 - Änderungen mit Speicherung überschreiben"
   Print "5 - Alle Adressen löschen"
   Print "6 - Ende"
   Print
   Print

   vote = Input$("Bitte wählen: ")

   Cls: Locate 1,1



 Select vote
   Case selEnter
      Print "Adresse Nr. "+index+":"
      Print
      ;nachname eingeben
      address$(index,nachname) = Input("Nachname (kein Eintrag=abbrechen): ")
   
      ;restliche adresse eingeben
      If address$(index,nachname)<>"" Then
         For i=vorname To email
            address$(index,i) = Input(bezeichnung(i)+": ")
         Next
           index = index + 1
         somethingChanged=1
      EndIf

  ;Adresse suchen
  Case selShow
   search$ = Input$("Nachname eingeben: ")
   For I=0 To 100
    If Lower(address$(I,nachname)) = Lower(search$) Then   ;Lower: Groß- und Kleinschreibung egal
      ;adresse gefunden
      ShowAddress (i)
      Print
      Print
      Print "Press a key to continue"
      Goto found
    EndIf
   Next
   ;adresse nicht gefunden
   Print "Kein Eintrag gefunden"
   .found
   FlushKeys() : WaitKey



  ;Adressen speichern
  Case selSave
      SaveAll
      SomethingChanged=0

  ;Adressen neu laden
  Case reload
      ReadAll()

  ;address() löschen
  Case deleteall
      index=0
      For i=0 To 6
         address$(0,i)=0
      Next
      somethingChanged=1

  ;beenden
  Case selExit
      Cls: Locate 1, 1
   
      If somethingChanged=0 Then End
   
      Print "Möchten Sie das Adressbuch speichern oder die vorgenommenen Einträge verwerfen?"
      Print
      Print "1 - alles speichern"
      Print "2 - Änderungen verwerfen"
      Print "sonst: abbrechen (zurück)"
      Print

      vote2% = Input$("Ihre Wahl: ")
      Select vote2
         Case 1:  SaveAll: End         
         Case 2:  End
      End Select

  Default
   Print "Ungültige Wahl"
  End Select
Forever

 


; FUNCTIONS


Function SaveAll()
   f=WriteFile("otext.txt")
   WriteLine f, index-1
   For I = 0 To index-1
      For J = 0 To 6
         WriteLine f, address$(I,J)
      Next
   Next
   CloseFile f
End Function


Function ReadAll()
   f=ReadFile ("otext.txt")
   If f=0 Then
      ;DATEI NICHT VORHANDEN
      Print "Datei nicht gefunden! Press a key to continue"
      FlushKeys() : WaitKey

   Else
      index=ReadLine (f)
      For i=0 To index
         For j=0 To 6

            ;FEHLER IN DATEI
            If Eof(f) Then
               Print "Datei 'otext.txt' fehlerhaft. Adressen konnten nicht geladen werden."
               FlushKeys(): WaitKey
            EndIf

            address$(i,j)=ReadLine(f)
         Next
      Next
      index=index+1
   EndIf
End Function


Function ShowAddress(index)
   Cls
   Print "Adresse von " + address$(index,vorname) + " " + address$(index,nachname)+":"
   Print
   For i=telefon To email
       Print bezeichnung(i)+": " + address$(index,i)
   Next
End Function
AMD XP 2800+, 9600 256RAM, 1GB RAM, WIN XP PRO

Hip Teen

BeitragMo, Jun 12, 2006 22:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Man muss vorher allerdings eine Datei "otext.txt" estellen

Dafür kann man einfach einen einfachen Code vor dem laden hängen.
Einfach in der Funktion "ReadAll" nach der Zeile
Code: [AUSKLAPPEN]
f=ReadFile ("otext.txt")

noch folgendes ranhängen:
Code: [AUSKLAPPEN]
If f = 0 Then
   f = WriteFile ("otext.txt")
End If

Schon muss die Datei nicht existieren Very Happy
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"

MoM007

BeitragMo, Jun 12, 2006 23:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt, aber es geht mir nicht darum, wollte nur sagen, dass es sonst nicht gehen kann, aber die Idee ist gut
AMD XP 2800+, 9600 256RAM, 1GB RAM, WIN XP PRO

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group