MAV nach Code Säuberung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

FunctionBauer

Betreff: MAV nach Code Säuberung

BeitragDi, Jul 27, 2010 11:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich arbeite zurzeit an einem Sofware Company Name Generator, der sich an einer Online Wordlist bedient.
Das hat eigentlich alles soweit auch recht gut geklappt, nur der Code war unübersichtlich und unordentlich.
Jetzt habe ich ihn einer kleinen Säuberung unterzogen, sprich Variablennamen verbessert, Zeileneinrückungen, sowie in Funktionen aufgeteilt. Wenn ich jetzt das Programm starte bekomme ich sofort eine "Memory Access Violation". Ich finde meinen Fehler nicht.
Kann jemand helfen? ->
Code: [AUSKLAPPEN]
;-----------Initialisieren&Variablen------------------------

Bibliotheken_Downloaden()

Global anzahl_Woerter_der_Bibliotheken%

Initialisieren()

Dim Woerter_der_Bibliotheken$(anzahl_Woerter_der_Bibliotheken)
Dim Wort_Endungen$(11)

Bibliotheken_einlesen()

;---------------Hauptprogramm--------------------------------


AppTitle "Software Company Name Generator v1.0"

Graphics 800,600
SetBuffer BackBuffer()
SeedRnd MilliSecs()


;hauptschleife

Repeat

Eingabe()

Until KeyHit(1)


;----------Funktionen------------------------------------------
Function Eingabe()

Local anzahl_woerter%
Local anzahl_Woerter_der_Bibliotheken

Print "Schreibe 'help' für die Auflistung der Befehle"


a$=Input(">> ")

Select a$
Case "exit"
End
Case "lib_update"
Bibliotheken_Downloaden()
Case "cls"
Graphics 800,600
Case "generate"
anzahl_woerter = Input("anzahl? ")
generate(anzahl_woerter,anzahl_Woerter_der_Bibliotheken)
Case "help"
Print "Befehle: help - Hilfe, cls - Clear Screen, lib_update - Library Update, gen - Generate"
Default Print "unknown expression!"
End Select

End Function

Function Bibliotheken_Downloaden()

   Local temp_line$, editedstream$
   Local offset%, endset%
   
   Print "Update Wortbibliotheken..."
   stream = OpenTCPStream("www.writedesignonline.com",80)

   If Not stream Print "Konnte keine Verbindung herstellen.":WaitKey:End

   WriteLine stream,"GET /resources/wordlist.html HTTP/1.1"
   WriteLine stream,"Host: writedesignonline.com"
   WriteLine stream,"User-Agent: BB"
   WriteLine stream,"Accept: */*"
   WriteLine stream,""

   If Eof(stream) Print "Failed." :  WaitKey : End


   file=WriteFile("Wortbibliotheken.dat")
   ;jede Line auslesen
   While Not Eof(stream)
      temp_line$ = ReadLine$(stream)
      If Instr(temp_line$,"absurd") <> 0 Then
         ;einzelne Line ueberpruefen
         Repeat
            temp_line$ = ReadLine$(stream)
            ;offset wert des wortes bestimmen
            For i = 1 To Len(temp_line$)
               If Mid$(temp_line$,i,1) <> " " Then
                  offset = i
                  Exit
               EndIf
            Next
            ;endset wert des wortes bestimmen
            For i = offset To Len(temp_line$)
               If Mid$(temp_line$,i,1) = "<" Then
                  endset = i - offset
                  Exit
               EndIf
            Next
            ;den bestimmten string aus dem stream extrahieren
            editedstream$ = Mid$(temp_line$,offset,endset)
            ;in der datei speichern
            If editedstream$ <> "" And editedstream$ <> " " Then
               WriteLine(file, editedstream$)
            EndIf
         Until Instr(temp_line$,"</TABLE>") <> 0
      End If
   Wend

   CloseTCPStream stream
   CloseFile file

End Function

Function generate(aw,astr)
   Local Zufallszahl1%, Zufallszahl2%
   
   For i = 1 To aw
      zufallszahl1% = Rand(0,11)
      zufallszahl2% = Rand(0,astr)
      genwort$=Woerter_der_Bibliotheken$(zahl2)+" "+Wort_Endungen$(zahl)
      Print genwort$
   Next
End Function

Function Initialisieren()

file=OpenFile("Wortbibliotheken.dat")
While Not Eof(file)
anzahl_Woerter_der_Bibliotheken = anzahl_Woerter_der_Bibliotheken +1
Wend
CloseFile file
End Function

Function Bibliotheken_einlesen()
Local i%
file=OpenFile("Wortbibliotheken.dat")
While i <> anzahl_Woerter_der_Bibliotheken
Woerter_der_Bibliotheken$(i) = ReadLine$(file)
i=i+1
Wend
CloseFile file
Restore string2
For i = 0 To 11
Read Wort_Endungen$(i)
Next

End Function
;---------------DATA------------------------------------------------------

.string2
Data "Research", "Inc.", "Studio" , "Productions", "Ltd.", "Programs"
Data "Ware", "Soft", "Science", "Solutions", ".org", "Unlimited"
Intel Quad Core 6600 Geforce 9500 GT
4 GB DDR-2 RAM 500 GB-Samsung

Hubsi

BeitragDi, Jul 27, 2010 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Einen MAV erhalte ich nicht, aber an dieser Stelle hast Du eine Endlosschleife gebastelt:

BlitzBasic: [AUSKLAPPEN]
Function Initialisieren()

file=OpenFile("Wortbibliotheken.dat")
While Not Eof(file)
anzahl_Woerter_der_Bibliotheken = anzahl_Woerter_der_Bibliotheken +1
Wend
CloseFile file
End Function

Solange Du nichts aus der Datei liest wird der Pointer logischerweise nicht verschoben und Eof nie eintreffen. Um den MAV etwas zu konkretisieren benutze einfach den Debugmodus. Dann wird die Meldung gleich deutlich ausssagekräftiger Very Happy (Im Standardeditor Debug enabled anwählen unter Compile)
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

FunctionBauer

BeitragDi, Jul 27, 2010 11:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die schnelle Antwort. Aber Debuggen ist eigentlich immer die Lösung auf alle meine Probleme und ich liebe ihn dafür Very Happy Aber auch diesmal hab ich ihn angewählt und trotz dessen 'MAV' !

Aber das mit der Schleife werd' ich mal prüfen Very Happy

Oke, so gelöst: Code: [AUSKLAPPEN]
...file=OpenFile("Wortbibliotheken.dat")
While Not Eof(file)
anzahl_Woerter_der_Bibliotheken = anzahl_Woerter_der_Bibliotheken +1
voidstring$ = ReadLine$(file)
Wend
CloseFile file
End Function ...


und trotzdem noch MAV!

Hier dokumentiert:

MAV trotz Debugger:
user posted image
Intel Quad Core 6600 Geforce 9500 GT
4 GB DDR-2 RAM 500 GB-Samsung

Tennisball

BeitragDi, Jul 27, 2010 11:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ist zwar keine Lösung für dein Problem, aber wenn ich anmerken darf: Die Funktion Initialisieren ist unnötig, denn du musst nicht um die Anzahl der Wörter herauszufinden die Datei noch einmal öffnen / durchgehen...
Anstattdessen einfach:

Code: [AUSKLAPPEN]
file=OpenFile("Wortbibliotheken.dat")
While Not Eof(file)
Woerter_der_Bibliotheken$(i) = ReadLine$(file)
anzahl_Woerter_der_Bibliotheken = anzahl_Woerter_der_Bibliotheken +1
Wend


mfg,
Tennisball

Edit: Ja, wir glauben dir ja, dass du ein MAV bekommst, aber markiert der Debugger nicht irgendeine Zeile?

FunctionBauer

BeitragDi, Jul 27, 2010 11:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Tennisball, klar die Methode hatte ich vorher auch schon und hab es in zwei Funktionen aufgespalten da ich erst den Array 'Woerter_der_Bibliotheken' erstellen kann wenn ich den Array Index weiß. Und diesen finde ich durch die Funktion Initialisieren heraus.

Grüße.

Sprich: Code: [AUSKLAPPEN]
...file=OpenFile("Wortbibliotheken.dat")
While Not Eof(file)
anzahl_Woerter_der_Bibliotheken = anzahl_Woerter_der_Bibliotheken +1
voidstring$ = ReadLine$(file)
Wend
CloseFile file...


muss vor Code: [AUSKLAPPEN]
Dim Woerter_der_Bibliotheken$(anzahl_Woerter_der_Bibliotheken)
stehen, weil ich ja sonst den Arrayindex noch nicht weiß.
Intel Quad Core 6600 Geforce 9500 GT
4 GB DDR-2 RAM 500 GB-Samsung

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group