« Return to Thread: Source.fromFile(file).getLines
Sorry, I'm feeling a bit confused now ...
I thought that "\n" is a "line terminator", (at least the
one on *nix based systems).
So I would translate your sentence
Into "How would you tell apart a line that ends in a line end
> How would you tell apart a line that ends in "\n" with one
> that doesn't?
with one that doesn't?"I now ask: How would tell that a stream of characters is a "line"
if not by the line end marker? (Beside eof/eos of course).
So far ...
> The method getLines doesn't strip away any characters present in
> the file. Which, by the way, is pretty standard behavior.
... so bad. Think of the regex pattern match problem discussed earlier
> In Perl, for instance, you need to "chomp"
> away newlines if you don't want them. Likewise, in Scala, you
> need to stripLineEnd newlines if you don't want them.
here. (You have to strip the line before matching with "^some$" or
use "(?s)^some$").
From a domain progger's view:
When reading a CSV file into excel I get the data into cells,
without the cell separator (the C in CSV).
So when calling getLine() I would expect to get the "line" without
the technical EOL detail. This may be added again if I write
"line" out to some file with write[Line|ln] or print[Line|ln],
like I get the comma again when exporting the data as CSV.
Same is true for every envelope data on underlying transport
layers. They are only present on that layer.
Looking at a stream from a char perspective I would
expect to see it.
Looking at it from a line perspective, it makes no sense to me.
Just my 2ct.
>
>
> On Thu, Jul 9, 2009 at 2:07 PM, Ricky Clarkson
> <ricky.clarkson@...> wrote:
>
>
> ricky@ricky-desktop:~$ cat test.scala
> import scala.io.Source
> import java.io.File
>
> object Main {
> def main(args: Array[String]) {
> for (line <- Source.fromFile(new
> File("test.scala")).getLines)
> print("("+line+")")
> }
> }
>
>
> ricky@ricky-desktop:~$ scalac test.scala
> ricky@ricky-desktop:~$ scala Main
> (import scala.io.Source
> )(import java.io.File
> )(
> )(object Main {
> )( def main(args: Array[String]) {
> )( for (line <- Source.fromFile(new
> File("test.scala")).getLines)
> )( print("("+line+")")
> )( }
> )(}
> )(
> )(
> )
>
> Note that I used print instead of println. I can't
> imagine it's a
> good thing to have line contain a line terminator of any kind.
>
> 2009/7/9 Daniel Sobral <dcsobral@...>:
>
> > No, not expected. I don't get that either. Try doing
> map(_ map(_ toInt)) to
> > the result of getLines. Maybe you are getting "\r\n"
> and confusing it with
> > "\n\n".
> >
> > On Thu, Jul 9, 2009 at 1:38 PM, Gilles SCOUVART
> <Gilles.SCOUVART@...>
> > wrote:
> >>
> >> Hello all,
> >>
> >> I was surprised to notice that using
> Source.fromFile(file).getLines on a
> >> file with empty lines, those were added to the
> previous non empty line.
> >> I.e. if the file contains this:
> >> ------
> >> test
> >>
> >>
> >> ------
> >> then getLines.next would return "test\n\n" (written
> java-echap-style).
> >> I expected it would iterate on three lines instead:
> "test", "", and "".
> >> This is a little bit annoying for pattern matching
> on full lines...
> >>
> >> Is this expected behaviour?
> >>
> >> Gilles Scouvart.
> >
> >
> > --
> > Daniel C. Sobral
> >
> > Something I learned in academia: there are three
> kinds of academic reviews:
> > review by name, review by reference and review by value.
> >
>
>
>
>
> --
> Ricky Clarkson
> Java Programmer, AD Holdings
> +44 1565 770804
> Skype: ricky_clarkson
> Google Talk: ricky.clarkson@...
>
>
>
>
>
> --
> Daniel C. Sobral
>
> Something I learned in academia: there are three kinds of
> academic reviews: review by name, review by reference and
> review by value.
>
>
« Return to Thread: Source.fromFile(file).getLines
| Free embeddable forum powered by Nabble | Forum Help |