[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