Hannah Schroeter wrote:
> 
> Hello!
> 
> On Mon, May 31, 1999 at 06:01:31PM +0200, Friedrich Dominicus wrote:
> > Hannah Schroeter wrote:
> 
> > > Hello!
> 
> > > On Fri, May 28, 1999 at 08:00:27AM +0200, Friedrich Dominicus wrote:
> > > > I wrote before with my trouble understanding hugsIsEOF. But I don't have
> > > > found a clean way just to write a cat. Can s.o give me a hand?
> 
> > > import System(getArgs)
> > > file2stdout :: String {- filename -} -> IO ()
> 
> > could you explain that to me?
> 
> "{- filename -}" is just a comment designating that that parameter
> shall be the filename of the file to be copied to stdout.

Oh mei, just a comment it's time for me to reread my book it should be
found there.

> 
> > If I want to do it line-by-line is is some combination from
> > getLine, putStr ?
> 
> If you want to do it line wise, you probably have to do some
> exception handling in the IO monad. I.e. you try to read a line,
> handle the EOF exception by just terminating, any other exception
> by re-throwing it. If getLine succeeds you output it and continue,
> using tail recursion.
> 
> That's something like this:
> 
> import IO (isEOFError,openFile,IOMode(ReadMode),hGetLine)
> 
> file2stdout filename = catch mainloop handler
>   where
>     mainloop = do
>       handle <- openFile filename ReadMode
>       mainloop' handle
>     mainloop' hdl = do
>       line <- hGetLine hdl
>       putStrLn line
>       mainloop' hdl
>     handler err = if isEOFError err then return () else ioError err -- rethrow
> 
> But why make it difficult if there's readFile?

I want to do the following, read a file line by line and finding out
which line is longer than x-chars. I want to print out which lines are
so long. I think that can just be done line-wise.

Thanks for you answer I hope I got it right with that information.

Regards
Friedrich


Reply via email to