Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
RE: [Caml-list] Setting the EOL character....
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2002-09-13 (02:24)
From: artboreb@n...
Subject: RE: [Caml-list] Setting the EOL character....
"Richard Lyman" <> wrote:

>To start - I really don't know that much about programming (3 years self-taught in scripted web languages - Perl/PHP/Ruby), and I'm trying to learn OCaml...
>I've mostly dealt with persistent socket servers in other programming languages, and I'd like to write one in OCaml.
>I've read most of the book - Developing Applications with Objective Caml (English PDF), so I understand a little - but I'm still very unsure of myself.
>Here's the problem I'm trying to solve...
>I have a proprietary format I'm trying to read in through a socket - when I say proprietary I mean that the EOL character is the ASCII null character (\000) and not the '\n' character.
>I've looked at the examples in the OReilly book, but I'm not sure how to change the default End Of Line character (\n) to \000.
>Will I have to do some sort of pattern match on the stream so that I can deal with 'each line' using \000 as the EOL character?
>Do the input, input_line, read, or read_line methods accept a different EOL character as a parameter - or can I define the method differently?
>Since I can read in a certain amount of characters with methods like read, can I find the location of the ASCII null character and read from the stream until right after it?
>I hope I've asked good enough questions...
>Thanks for any help you guys can give!
>Let me know if anything's not clear enough...


you could try something like this

let read_eol inchan =
  let rec f buf =
    let c = input_char inchan in
    if c = '\000' then Buffer.contents buf
    else begin Buffer.add_char buf c; f buf end
  in f (Buffer.create 64);;   

or in 'revised syntax which I prefer)

value read_eol inchan =
  f (Buffer.create 64) where rec f buf =
    let c = input_char inchan in
    if c = '\000' then Buffer.contents buf
    else do { Buffer.add_char buf c; f buf }

(Note there is no exception handling in examples)
Arturo Borquez

The NEW Netscape 7.0 browser is now available. Upgrade now! 

Get your own FREE, personal Netscape Mail account today at
To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: