[Newbies] go to the end of a loop
Louis LaBrunda
Lou at Keystone-Software.com
Mon Apr 25 15:39:26 UTC 2016
Hi Joe,
Better than checking for #nextLine answering nil, I think you can send the file stream #atEnd
to see if there is any more data. You would then use a #whileFalse: and move the #nextLine
call into the second block of the whileFalse:. Then test for empty lines with something like:
(line size < 2) ifFalse: [...putting all the code that does the work on a line with data in
here...].
Lou
PS. If this is not a school project, we can be of more help, we just don't like doing
students projects for them as they learn more with just a few hints and not real code.
On Mon, 25 Apr 2016 10:16:33 -0500, Joseph Alotta <joseph.alotta at gmail.com> wrote:
>Greetings,
>
>I have this code:
>
>******
>
>read
> "read the category file into the dictionary
> the first item is the category, the rest of the line are payees
>
> office expense|home depot|staples|costco
> groceries|natures best|jewel|trader joes|fresh thyme
> "
>
>| f line |
>f := FileStream oldFileNamed: myfile.
>
>[(line := f nextLine) notNil] whileTrue: [ | array cat payees |
>
> array := line findTokens: $| escapedBy: Character tab .
>
> cat := array first.
> payees := array reject: [ :i | i = cat ]. "rest of the line"
>
> payees do: [ :p | mydict at: (p withBlanksCondensed) put: (cat withBlanksCondensed)].
> ].
>
>
>f close.
>
>*********
>
>I am getting some blank lines in the data file. Lines with just a Character cr. I was wondering how to handle that. In other languages, there is a break for the loop, to go to the end. I can do:
>
>(line size < 2) ifTrue: [ f nextLine.].
>
>But that would interfere with the notNil idiom at the end of the file. So where do I put this. Is there a common way to jump to the end?
>
>
>Sincerely,
>
>
>Joe.
--
Louis LaBrunda
Keystone Software Corp.
SkypeMe callto://PhotonDemon
More information about the Beginners
mailing list