readme: add information section
[nit.git] / lib / csv / csv.nit
index 441f95c..57590ad 100644 (file)
@@ -53,7 +53,7 @@ end
 
 # A CSV document representation.
 class CsvDocument
-       super Streamable
+       super Writable
 
        # The format to use.
        #
@@ -103,7 +103,7 @@ class CsvDocument
        # * `has_header`: Is the first row the header?
        # * `skip_empty`: Do we skip the empty lines?
        # For details, see `CsvReader.skip_empty`.
-       fun load_from(stream: IStream, has_header: Bool, skip_empty: Bool) do
+       fun load_from(stream: Reader, has_header: Bool, skip_empty: Bool) do
                var reader = new CsvReader.with_format(stream, format)
                reader.skip_empty = skip_empty
                if has_header then
@@ -125,7 +125,7 @@ class CsvDocument
        # * `has_header`: Is the first row the header?
        # * `skip_empty`: Do we skip the empty lines?
        fun load(path: String, has_header: Bool, skip_empty: Bool) do
-               var istream = new IFStream.open(path)
+               var istream = new FileReader.open(path)
                load_from(istream, has_header, skip_empty)
                istream.close
        end
@@ -141,7 +141,7 @@ end
 # delimiters by some parsers.
 #
 # ~~~nit
-# var out = new StringOStream
+# var out = new StringWriter
 # var writer = new CsvWriter(out)
 # writer.write_row(1, 2.0, "foo\nbar")
 # writer.write_sequence([""])
@@ -150,7 +150,7 @@ end
 class CsvWriter
 
        # The output stream.
-       var ostream: OStream
+       var ostream: Writer
 
        # The format to use.
        #
@@ -168,8 +168,8 @@ class CsvWriter
        var always_escape = false is writable
 
        # Create a new writer with the specified format.
-       init with_format(ostream:OStream, format: CsvFormat) do
-               self.ostream = ostream
+       init with_format(ostream:Writer, format: CsvFormat) do
+               init(ostream)
                self.format = format
        end
 
@@ -213,7 +213,7 @@ end
 # By default, uses the format recommended by RFC 4180 (see `rfc4180`).
 #
 # ~~~nit
-# var example = new StringIStream("""
+# var example = new StringReader("""
 # foo,bar\r
 # "Hello, word!",1234.5 + 42\r
 # "Something\r
@@ -233,7 +233,7 @@ class CsvReader
        super Iterator[Array[String]]
 
        # The input stream.
-       var istream: IStream
+       var istream: Reader
 
        # The format to use.
        #
@@ -259,8 +259,8 @@ class CsvReader
        private var started = false
 
        # Create a new reader with the specified format.
-       init with_format(istream:IStream, format: CsvFormat) do
-               self.istream = istream
+       init with_format(istream:Reader, format: CsvFormat) do
+               init(istream)
                self.format = format
        end
 
@@ -314,10 +314,9 @@ class CsvReader
                var got_delimiter = false
 
                loop
-                       var i = istream.read_char
-                       var c: Char
+                       var c = istream.read_char
 
-                       if i < 0 then
+                       if c == null then
                                if got_row then
                                        row.add value.to_s
                                        return row
@@ -325,7 +324,6 @@ class CsvReader
                                        return null
                                end
                        end
-                       c = i.ascii
 
                        if c == format.delimiter then
                                if got_delimiter and unescaped == 0 then
@@ -334,11 +332,10 @@ class CsvReader
                                end
                                # Read all bytes until the delimiter.
                                loop
-                                       i = istream.read_char
-                                       assert not_eof: i >= 0 else
+                                       c = istream.read_char
+                                       assert not_eof: c != null else
                                                sys.stderr.write "Unexpected end of file before the end of a delimited value.\n"
                                        end
-                                       c = i.ascii
                                        if c == format.delimiter then break
                                        value.add c
                                end