Seite 1 von 2

Problem mit ReadString...

Verfasst: 15.02.2011 00:13
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.

Re: Problem mit ReadString...

Verfasst: 15.02.2011 00:20
von c4s
Was sagt denn die Fehlermeldung?

Re: Problem mit ReadString...

Verfasst: 15.02.2011 00:22
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...

Re: Problem mit ReadString...

Verfasst: 15.02.2011 00:26
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

Re: Problem mit ReadString...

Verfasst: 15.02.2011 00:30
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:

Re: Problem mit ReadString...

Verfasst: 15.02.2011 00:41
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?

Re: Problem mit ReadString...

Verfasst: 15.02.2011 12:02
von c4s
In dem Zusammenhang wie im ersten Post solltest du sowieso nicht die OnError-Lib benutzen.

Re: Problem mit ReadString...

Verfasst: 15.02.2011 13:06
von SebastianJu2
Warum? Sollte man Fehler nicht möglichst immer abfangen?

Re: Problem mit ReadString...

Verfasst: 15.02.2011 13:11
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!

Re: Problem mit ReadString...

Verfasst: 15.02.2011 13:23
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.