[Newbies] Re: reading lines from textfiles on Linux
Klaus D. Witzel
klaus.witzel at cobss.com
Tue May 16 10:28:25 UTC 2006
Hi Charles,
on Tue, 16 May 2006 10:48:15 +0200, you <charleshixsn at earthlink.net> wrote:
> Klaus D. Witzel wrote:
>> You forgot to tell us
>> a) SmalltalkImage current platformName
>> b) fil lineEndConvention "after fil was opened"
>> c) fil detectLineEndConvention "before the first nextLine"
>>
>> Note that detectLineEndConvention scans only the first (LookAheadCount
>> = 2048) characters.
>>
> OK, I've modified the code to include the detectLineEndConvention, thus:
>
> | fil lin n |
> fil := FileStream fileNamed: 'aising/data/technologies.csv' .
> fil detectLineEndConvention.
> "fil defaultToLF."
> Transcript cr; show: 'LineEndConvention = '; show: fil
> lineEndConvention.
> fil position: 0.
> n := 0.
> [fil atEnd] whileFalse:
> [ lin := fil nextLine.
> n := n + 1.
> Transcript cr; show: 'lin '; show: n; show: ' = '; show: lin.
> ].
> Transcript cr; show: 'normal end after '; show: n; show: ' lines'.
>
> this causes the printout to begin:
>
> LineEndConvention = nil
> lin 1 = 'technology'
> 'id' 'name' 'cost1' 'cost2' 'cost3' 'pre1'
> 'pre2' 'pre3' 'danger' 'typeName' 'typeValue'
> 1 'Autonomous Vehicles' 40000 1000 0 27 16 0
> 0 0
> ...
> normal end after 1 lines
>
> as it did before.
Please! Nobody here can see results when you don't print them and copy
them into your next posting! !! Please insert the following code just
after open:
Transcript cr; show: 'detectLineEndConvention = '; show: fil
detectLineEndConvention.
> Linux Squeak3.8-6665full.image
> That's true, but it's a guess at what you're asking for, because I don't
> understand the request for "SmalltalkImage current platformName ".
> Squeak-3.8-6665-i686-pc-linux-gnu-3.7.7.tar.gz is the file I started
> from.
This is Smalltalk jargon, when asked do the following
a) copy and paste SmalltalkImage current platformName into a workspace
b) select the pasted text
c) do a print-it from the context menu
d) copy&paste the result text into your next posting
> The file lines end with an LF (i.e. 0x0a), as examined with a hex
> editor. Since all lines end with the same character, 2048 is plenty.
> (FWIW, the entire file is only 0x97B bytes long. It's terminated by an
> ordinary 0x0A, with no special markings.)
>
> Also, I didn't "forget" to do fil detectLineEndConvention. I didn't
> know I was supposed to do it.
This was only for me to find out what's going wrong. So, what does fil
detectLineEndConvention print?
> I'm still not sure, since it doesn't seem
> to make any difference.
It was not supposed to make a difference, I just wanted to know what that
prints.
/Klaus
> I do notice the difference with this method
> however. With a prior approach when I did position: 0 I got a
> "primitive method throws an error" message, whereas with this the line
> end convention is just set to nil. Something is clearly wrong, as it
> should be LF, but attempting to coerce it into LF just throws an error:
> Multi-byte stream does not understand method defaultToLF, which is
> weird, as I can see that method in the class when I look. I copied the
> method name with a copy and paste from the MultiByteFileStream class
> into the workspace, so I know I didn't misspell it.
More information about the Beginners
mailing list