[Newbies] Efficient date parsing
Ramon Leon
ramon.leon at allresnet.com
Wed Apr 2 20:36:59 UTC 2008
cient date parsing
>
>
> I have a large file with dates in the format '2001-11-04'. As
> I couldn't find a method to change to date, I'm doing:
> date := self dateFrom: (dateString subStrings: '-').
>
> dateFrom: anArray
> "anArray should be like #('2005' '09' '06')"
> ^Date year: anArray first asInteger month: anArray
> second asInteger day:
> anArray third asInteger
>
> This works, but profiling shows half the work in loading the
> file is in
> dateFrom:
>
> Is there a more efficient way? Is there a standard method I've missed?
On my Date class, class side, I use the following extention methods for
parsing dates.
fromString: aString format: aFormat
aFormat = #dmy
ifTrue: [^ self readEuro: aString readStream ].
aFormat = #iso8601
ifTrue: [^ self readISO: aString readStream].
^ self fromString: aString
readEuro: aStream
"Read a Date in euro format dd-mm-yyyy"
| day month year |
aStream skipSeparators.
day := Integer readFrom: aStream.
[aStream peek isDigit]
whileFalse: [aStream skip: 1].
month := Integer readFrom: aStream.
[aStream peek isDigit]
whileFalse: [aStream skip: 1].
year := Integer readFrom: aStream.
^ self
newDay: day
month: month
year: year
readISO: aStream
"Read a Date in ISO-8601 format yyyy-mm-dd"
| day month year |
aStream skipSeparators.
year := Integer readFrom: aStream.
[aStream peek isDigit]
whileFalse: [aStream skip: 1].
month := Integer readFrom: aStream.
[aStream peek isDigit]
whileFalse: [aStream skip: 1].
day := Integer readFrom: aStream.
^ self
newDay: day
month: month
year: year
Ramon Leon
http://onsmalltalk.com
More information about the Beginners
mailing list