thanks goran

Stef

On Jan 21, 2010, at 11:12 AM, Göran Krampe wrote:

> Hi guys!
> 
> I admit not having tracked this thread in detail BUT attached is a changeset 
> that I dug out from the Squeak beginners list where I posted it waaay back. 
> The added Date class method included below shows what it offers.
> 
> And of course, there are TONS of more cool stuff it could handle, but it is 
> meant to be "smart enough" for a reasonable set of cases. ...And it was an 
> "hour hack" ... :)
> 
> regards, Göran
> -----------------------------
> 
> readFrom: inputStream pattern: pattern
>       "Read a Date from the stream based on the pattern which can include the 
> tokens:
>       
>               y = A year with 1-n digits
>               yy = A year with 2 digits
>               yyyy = A year with 4 digits
>               m = A month with 1-n digits
>               mm = A month with 2 digits
>               d = A day with 1-n digits
>               dd = A day with 2 digits
>               
>       ...and any other Strings inbetween. Representing $y, $m and $d is done 
> using
>       \y, \m and \d and slash itself with \\. Simple example patterns:
> 
>               'yyyy-mm-dd'
>               'yyyymmdd'
>               'yy.mm.dd'
>               'y-m-d'
> 
>       A year given using only two decimals is considered to be >2000."
> 
>       | day month year patternStream char |
>       patternStream := pattern readStream.
>       [patternStream atEnd] whileFalse: [
>               inputStream atEnd ifTrue: [^nil].
>               char := patternStream next.
>               char = $\
>                       ifTrue: [inputStream next = patternStream next ifFalse: 
> [^nil]]
>                       ifFalse: [
>                               char = $y
>                                       ifTrue: [
>                                               (patternStream nextMatchAll: 
> 'yyy')
>                                                       ifTrue: [year := 
> (inputStream next: 4) asInteger]
>                                                       ifFalse: [
>                                                               (patternStream 
> peekFor: $y)
>                                                                       ifTrue: 
> [
>                                                                               
> year := (inputStream next: 2) asInteger]
>                                                                       
> ifFalse: [
>                                                                               
> year := Integer readFrom: inputStream]]]
>                                       ifFalse: [
>                                               char = $m
>                                                       ifTrue: [
>                                                               (patternStream 
> peekFor: $m)
>                                                                       ifTrue: 
> [
>                                                                               
> month := (inputStream next: 2) asInteger]
>                                                                       
> ifFalse: [
>                                                                               
> month := Integer readFrom: inputStream]]
>                                                       ifFalse: [
>                                                               char = $d
>                                                                       ifTrue: 
> [
>                                                                               
> (patternStream peekFor: $d)
>                                                                               
>         ifTrue: [
>                                                                               
>                 day := (inputStream next: 2) asInteger]
>                                                                               
>         ifFalse: [
>                                                                               
>                 day := Integer readFrom: inputStream]]
>                                                                       
> ifFalse: [
>                                                                               
> inputStream next = char ifFalse: [^nil]]]]]].
>       (year isNil | month isNil | day isNil) ifTrue: [^nil].
>       ^self year: year month: month day: day! !
> <DateReadFromPattern.3.cs.gz>_______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project


_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to