Problem mit ReadString...

Anfängerfragen zum Programmieren mit PureBasic.
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Problem mit ReadString...

Beitrag von SebastianJu2 »

Ich habe ein Problem mit einem Testprogramm. Es soll eine Textdatei zeilenweise auslesen und ans Debug liefern. Nur hängt sich der Prozess auf bzw kommt nicht zum Ende.

Code: Alles auswählen

Procedure Err(Err$)
  If Err$="SysError":Err$=ErrorMessage():EndIf
  MessageRequester("Error","Error: "+Err$,0)
  End
EndProcedure
Procedure Msg(Msg$)
  MessageRequester("Message","Message: "+Msg$,0)
EndProcedure

OnErrorCall(@Err("SysError"))

MainWindowHandle=OpenWindow(#PB_Any,0,0,300,300,"SortIt",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered)
If MainWindowHandle=0
  Err("Couldnt open Window.")
EndIf
LoadButtonHandle=ButtonGadget(#PB_Any,10,10,70,25,"Load File")
If LoadButtonHandle=0
  Err("Couldnt create Button.")
EndIf

Repeat
  EventID = WaitWindowEvent()
  If EventWindow()=MainWindowHandle And EventID=#PB_Event_Gadget And EventGadget()=LoadButtonHandle
    File$ = OpenFileRequester("Please chose the file to read from","","Text (*.txt)|*.txt;*.bat|All Files (*.*)|*.*", 0)
    If File$
      Msg("You have chosen the following file:" + #LF$ + File$)
    Else
      Err("No file was chosen.") 
    EndIf
    ReadFileHandle=ReadFile(#PB_Any, File$)
    If ReadFileHandle
      While Eof(ReadFileHandle)=0
        Debug ReadString(ReadFileHandle)
      Wend
      CloseFile(ReadFileHandle)
    Else
      Err("Couldnt open File for Reading")
    EndIf


  EndIf
Until EventID = #PB_Event_CloseWindow
Das mit dem Debug habe ich aus dem ReadFile-Eintrag aus der Hilfe. Ich habe eine Textdatei ausgewählt die nur 2 Zeilenn enthielt. Trotzdem kommt es nicht zum Ende.

Dann habe ich nach einer Fehlermeldung einen roten Punkt an der Seite den ich nicht wegbekomme. Ist wohl kein Breakpoint aber ich finde auch nicht wie ich es entfernen kann.
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Problem mit ReadString...

Beitrag von c4s »

Was sagt denn die Fehlermeldung?
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Problem mit ReadString...

Beitrag von SebastianJu2 »

Es gibt keine Fehlermeldung. Seit 50min ist keine neue Fehlermeldung im Log unten zu sehen.
Das Problem scheint eine unendlich laufende Schleife zu sein. Das Debugfenster wird aber auch nicht geöffnet. Ich sehe nur dass CPU1 auf 100% arbeitet und das macht sie bis ich das Programm mit Rechtsklick usw schließe...
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Problem mit ReadString...

Beitrag von SebastianJu2 »

Ich habe jetzt noch mal den Leseteil ergänzt um ein Fileseek bis ans Ende der Datei aber auch dann wird nicht abgebrochen.
Dann habe ich Messageboxen eingebaut und diese Messageboxen erscheinen unendlich oft scheinbar.

Code: Alles auswählen

      While Eof(ReadFileHandle)=0
        MessageRequester("test","test",0)
        Debug ReadString(ReadFileHandle)
        MessageRequester("test","test",0)
        FileSeek(0,length)
        MessageRequester("test","test",0)
      Wend
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Problem mit ReadString...

Beitrag von ts-soft »

Hast Du den Debugger überhaupt an?
Wenn Du Dir in der Hilfe noch die Form von OnError ansiehst biste
schon mal etwas weiter.

PS: Ein Leerzeichen hinter Satzzeichen, wie einem Komma, macht das
ganze evtl. leserlich.

Bis zum Dateilesen kommt es doch garnicht :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Problem mit ReadString...

Beitrag von SebastianJu2 »

Du hattest Recht... irgendwie muss ich wohl den Debugger abgeschaltet haben... wie auch immer das passiert ist. Jetzt beschwert er sich über den OnErrorCall. "Die in @Procedure() angegebene Prozedur hat nicht das benötigte Argument bzw. den Rückgabetyp."
Allerdings hat die Beispielprozedur in der Hilfe keinen besonderen Typ. Darf man keinen Parameter übergeben?

Aber bis zum Dateilesen muss es schon gekommen sein weil es meine Testmessageboxen ja aufrief...

Edit: Es scheint wirklich wie wenn die Errorfunktion von OnErrorCall() keinen Parameter haben darf. Seltsam.
Jetzt macht es scheinbar was es tun soll. Allerdings gibt es noch eine Warnung dass die OnError Library mit eingeschaltetem Debugger nicht alle Fehler aufgreifen wird. Ich schätze das ist egal wenn die Exe kompiliert ist oder?
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Problem mit ReadString...

Beitrag von c4s »

In dem Zusammenhang wie im ersten Post solltest du sowieso nicht die OnError-Lib benutzen.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Problem mit ReadString...

Beitrag von SebastianJu2 »

Warum? Sollte man Fehler nicht möglichst immer abfangen?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Problem mit ReadString...

Beitrag von ts-soft »

SebastianJu2 hat geschrieben:Warum? Sollte man Fehler nicht möglichst immer abfangen?
Doch, aber mit eigenem Code! Die OnError Lib ist zum Abfangen von Laufzeitfehlern, die
von Dir nicht vorhergesehen wurden, damit der Nutzer Dir mitteilen kann, welcher Fehler,
in welcher Zeile usw.

Die OnError Lib gibt aber für Dich keine Meldungen aus, deshalb auch keine Parameter,
es kann ja gar keine geben!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Problem mit ReadString...

Beitrag von SebastianJu2 »

Du meinst das was die OnError-Lib bei einem Systemfehler ausgibt ist ohnehin zu ungenau als dass ich damit etwas anfangen könnte?
Im Moment gebe ich nur ErrorMessage() aus. Ich dachte damit könnte man etwas anfangen im Fall der Fälle.
Aber wenn das nichts bringt nehm ich das raus.
Antworten