1 2 | nächste Seite |
Gepostet: |
Fehler abfangen | ||||||||||
Kaum ist das ein Problem gelöst kommt das nächste. Mit readHandelUntilWhitespace handle command = do char <- hGetChar handle if ( char == ' ' ) then return (reverse command) else readHandelUntilWhitespace handle (char:command) lese ich Zeichen für Zeichen vom Handle ein, bis ein Leerzeichen kommt. Für “ABC 123“ erhalte ich “ABC“, aber was ist wenn es keine Leerzeichen gib? Dann bleibt das Programm einfach stehen. Das ganze mit hIsEOF abzufangen geht auch nicht. Meine Idee war mit catch zu erkennen wenn kein Zeichen mehr gelesen werden kann und dann entsprechend eine Fehlermeldung auszugeben gruß funnySmell |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
kannst du mal die ganze aufgabenstellung geben? ich kann mir das jetzt nich so richtig vorstellen was du machen willst... also wenn es keine Leerzeichen gibt dann liest du das programm den ganzen string ein wenn das leerzeichen am anfang des strings steht dann liest du garnix ein willst du abfangen das es kein leerzeichen gibt? wozu? und gib mir mal das was du an getWord geändert hast... |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Kann es sein, dass du das nicht in Haskell sonder in einer anderen Programmiersprache programmierst? Dein Quelltext-Auszug sieht ja eher C-like aus - und nicht Haskell-like ;-) | |||||||||||
Zum Seitenanfang | Homepage ICQ | ||||||||||
Gepostet: |
|||||||||||
Die Aufgabenstellung lautet einen Server in Haskell zu schreiben und eine Client in Python. http://www.ki.cs.uni-frankfurt.de/lehre/SS2005/Praktische-Informatik/praktikum/ Der Client erzeugt nen Socket (wie der Server auch) und schickt eine Anfrage z.B. “PROPF 3 a&b“ wobei sich die 3 auf die Länge der Formel a&b bezieht. Da in den Regeln des Protokolls nichts drin steht das der Client den Socket einseitig schließt oder am Ende der Anfrage ein \n mit sendet um dem Server zu sagen jetzt ist die Anfrage zu ende muss man Zeichen für Zeichen einlesen und auswerten. Funktioniert im normal fall auch. Wenn man aber “PROPF“ schickt hängt sich das Programm auf. getWord heißt bei mir readHandelUntilWhitespace ich rufe readHandelUntilWhitespace mit dem Handel vom Socket und einer leeren liste [] auf. request <- readHandelUntilWhitespace handle [] Und dann bleibt das Programm einfach stehen. |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
alllllllllsooooo:
Testlauf Type :? for help Main> getWord "das nich" "das" Main> getWord "das" "das" Main> getWord " das" "" Main> getWord "" "" du brauchst getword nicht mit einer leeren liste aufrufen... du hast mir immernoch nicht dein readuntilwhitespace reinkopiert...bei der aufgabe hast du ja noch einiges zu machen ;) ich denke der fehler liegt in deinen quelltext gruß jacke |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Das Problem an der Sache ist das ich nicht mit (x:xs) auf den Handel zugreifen kann. Also übergebe ich den Handel und lese mit hGetChar das erste Zeichen aus. Wenn der Handel aber zu ende ist und kein Leerzeichen gekommen ist dann hängt sich der Server auf. Ich mail dir mal dis Script. |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
so in der art müßte es eigentlich gehen |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Danke erstmal für deine Bemühungen!!! Kann es sein das hGetChar keinen Fehler ausgibt, wenn versucht wird etwas zu lesen wo nichts mehr ist? Hab grade versucht mit try either und catch diverse IoErrors abzufangen aber da tut sich rein gar nix |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
ich hab das normale gerChar benutzt...ja und getChar gibt keinen fehler zurrück...;) du kannst nur selber von hand kucken ob das handel leer is also z.b mit nen if gruß jacke |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Ich hab’s folgendermaßen gelöst readHandel handle command = do char <- hGetChar handle eof <- hIsEOF handle if ( char == ' ' ) then return ( reverse command ) else if ( eof ) then return "ERROR" else readHandel handle ( char:command ) und es schein zu funktionieren. Dumm wenn man versuch eine Exception zu fangen wo gar keine ausgegeben wird na ja aus Fehlern lernt man. Es Läuft mim Pythen Client und per Telnet kann man sich auch einwählen. Ich denke das hat zu reichen. Ehrlichgesagt hab ich auch keinen Bock mehr genug Haskell für heute. Noch mal Tausend Dank für deine Hilfe! |
|||||||||||
Zum Seitenanfang | |||||||||||
1 2 | nächste Seite |