Etoys Inbox: Skeleton-Richo.9.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Etoys Inbox: Skeleton-Richo.9.mcz

commits-2
Ricardo Moran uploaded a new version of Skeleton to project Etoys Inbox:
http://source.squeak.org/etoysinbox/Skeleton-Richo.9.mcz

==================== Summary ====================

Name: Skeleton-Richo.9
Author: Richo
Time: 24 October 2011, 10:44:50 am
UUID: 432931e2-58a1-564e-8603-4f9baa33965f
Ancestors: Skeleton-Richo.8

Added CSVParser. Since I haven't received a response from Avi Bryant regarding the license of his CSV parser (probably because I don't have his current mail), I decided it would be easy to just made my own.

=============== Diff against Skeleton-Richo.8 ===============

Item was added:
+ SystemOrganization addCategory: #'Skeleton-Base'!
+ SystemOrganization addCategory: #'Skeleton-Base-Sheet'!
+ SystemOrganization addCategory: #'Skeleton-CSV'!

Item was removed:
- SystemOrganization addCategory: #'Skeleton-Base'!
- SystemOrganization addCategory: #'Skeleton-Base-Sheet'!

Item was added:
+ Object subclass: #CSVParser
+ instanceVariableNames: 'stream delimiter'
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'Skeleton-CSV'!

Item was added:
+ ----- Method: CSVParser class>>on:delimiter: (in category 'instance creation') -----
+ on: stream delimiter: aCharacter
+ ^ self basicNew initializeWith: stream delimiter: aCharacter!

Item was added:
+ ----- Method: CSVParser class>>parse: (in category 'parsing') -----
+ parse: aStream
+ ^ self parse: aStream delimiter: $,!

Item was added:
+ ----- Method: CSVParser class>>parse:delimiter: (in category 'parsing') -----
+ parse: aStream delimiter: aCharacter
+ ^ (self on: aStream delimiter: aCharacter) parse!

Item was added:
+ ----- Method: CSVParser class>>parseString: (in category 'parsing') -----
+ parseString: aString
+ ^ self parse: aString readStream !

Item was added:
+ ----- Method: CSVParser class>>parseString:delimiter: (in category 'parsing') -----
+ parseString: aString delimiter: aCharacter
+ ^ self parse: aString readStream delimiter: aCharacter!

Item was added:
+ ----- Method: CSVParser>>initializeWith:delimiter: (in category 'initialization') -----
+ initializeWith: aStream delimiter: aCharacter
+ stream := aStream.
+ delimiter := aCharacter.
+ self initialize!

Item was added:
+ ----- Method: CSVParser>>nextCell (in category 'parsing') -----
+ nextCell
+ ^ stream peek = $"
+ ifTrue: [self nextEnclosedCell]
+ ifFalse: [self nextNormalCell]!

Item was added:
+ ----- Method: CSVParser>>nextEnclosedCell (in category 'parsing') -----
+ nextEnclosedCell
+ ^ String streamContents: [:cell |
+ stream skip: 1.
+ [stream atEnd]
+ whileFalse: [| next |
+ next := stream next.
+ next = $"
+ ifTrue: [
+ stream peek ~= $"
+ ifTrue: [^ cell contents]
+ ifFalse: [stream skip: 1]].
+ cell nextPut: next]]!

Item was added:
+ ----- Method: CSVParser>>nextNormalCell (in category 'parsing') -----
+ nextNormalCell
+ ^ String streamContents: [:cell |
+ [stream atEnd]
+ whileFalse: [| next |
+ next := stream next.
+ (next = delimiter
+ or: [Character cr = next
+ or: [Character lf = next]])
+ ifTrue: [stream skip: -1.
+ ^ cell contents].
+ cell nextPut: next]]!

Item was added:
+ ----- Method: CSVParser>>nextRow (in category 'parsing') -----
+ nextRow
+ ^ Array streamContents: [:cells |
+ [stream atEnd or: [String crlf includes: stream peek]]
+ whileFalse: [cells nextPut: self nextCell.
+ stream peek = delimiter ifTrue: [stream skip: 1]]]!

Item was added:
+ ----- Method: CSVParser>>parse (in category 'parsing') -----
+ parse
+ ^ Array streamContents: [:rows |
+ [stream atEnd]
+ whileFalse: [rows nextPut: self nextRow.
+ [String crlf includes: stream peek] whileTrue: [stream skip: 1]]]!

Item was changed:
  ----- Method: Player>>openCSVFile:separator: (in category '*skeleton-data i/o') -----
  openCSVFile: filePath separator: separator
  FileStream
  readOnlyFileNamed: filePath
  do: [:file || values rows columns |
+ values := CSVParser parse: file delimiter: separator.
- values := (CSVParser on: file)
- useDelimiter: separator;
- rows.
  rows := values size.
  columns := values first size.
  self setTotalRows: rows + 1;
  setTotalColumns: columns + 1.
  1 to: rows do: [:r|
  1 to: columns do: [:c |
  ((values at: r) at: c ifAbsent: nil)
  ifNotNil: [:aString || cell |
  cell := self sheet assuredCellAt: c @ r.
  (aString beginsWith: '=')
  ifTrue: [cell formula: aString]
  ifFalse: [cell contents: aString]
  ]]]].!

_______________________________________________
etoys-dev mailing list
[hidden email]
http://lists.squeakland.org/mailman/listinfo/etoys-dev
Reply | Threaded
Open this post in threaded view
|

Re: Etoys Inbox: Skeleton-Richo.9.mcz

Karl Ramberg
Way to go :-)

Karl

On Mon, Oct 24, 2011 at 3:44 PM,  <[hidden email]> wrote:

> Ricardo Moran uploaded a new version of Skeleton to project Etoys Inbox:
> http://source.squeak.org/etoysinbox/Skeleton-Richo.9.mcz
>
> ==================== Summary ====================
>
> Name: Skeleton-Richo.9
> Author: Richo
> Time: 24 October 2011, 10:44:50 am
> UUID: 432931e2-58a1-564e-8603-4f9baa33965f
> Ancestors: Skeleton-Richo.8
>
> Added CSVParser. Since I haven't received a response from Avi Bryant regarding the license of his CSV parser (probably because I don't have his current mail), I decided it would be easy to just made my own.
>
> =============== Diff against Skeleton-Richo.8 ===============
>
> Item was added:
> + SystemOrganization addCategory: #'Skeleton-Base'!
> + SystemOrganization addCategory: #'Skeleton-Base-Sheet'!
> + SystemOrganization addCategory: #'Skeleton-CSV'!
>
> Item was removed:
> - SystemOrganization addCategory: #'Skeleton-Base'!
> - SystemOrganization addCategory: #'Skeleton-Base-Sheet'!
>
> Item was added:
> + Object subclass: #CSVParser
> +       instanceVariableNames: 'stream delimiter'
> +       classVariableNames: ''
> +       poolDictionaries: ''
> +       category: 'Skeleton-CSV'!
>
> Item was added:
> + ----- Method: CSVParser class>>on:delimiter: (in category 'instance creation') -----
> + on: stream delimiter: aCharacter
> +       ^ self basicNew initializeWith: stream delimiter: aCharacter!
>
> Item was added:
> + ----- Method: CSVParser class>>parse: (in category 'parsing') -----
> + parse: aStream
> +       ^ self parse: aStream delimiter: $,!
>
> Item was added:
> + ----- Method: CSVParser class>>parse:delimiter: (in category 'parsing') -----
> + parse: aStream delimiter: aCharacter
> +       ^ (self on: aStream delimiter: aCharacter) parse!
>
> Item was added:
> + ----- Method: CSVParser class>>parseString: (in category 'parsing') -----
> + parseString: aString
> +       ^ self parse: aString readStream !
>
> Item was added:
> + ----- Method: CSVParser class>>parseString:delimiter: (in category 'parsing') -----
> + parseString: aString delimiter: aCharacter
> +       ^ self parse: aString readStream delimiter: aCharacter!
>
> Item was added:
> + ----- Method: CSVParser>>initializeWith:delimiter: (in category 'initialization') -----
> + initializeWith: aStream delimiter: aCharacter
> +       stream := aStream.
> +       delimiter := aCharacter.
> +       self initialize!
>
> Item was added:
> + ----- Method: CSVParser>>nextCell (in category 'parsing') -----
> + nextCell
> +       ^ stream peek = $"
> +               ifTrue: [self nextEnclosedCell]
> +               ifFalse: [self nextNormalCell]!
>
> Item was added:
> + ----- Method: CSVParser>>nextEnclosedCell (in category 'parsing') -----
> + nextEnclosedCell
> +       ^ String streamContents: [:cell |
> +               stream skip: 1.
> +               [stream atEnd]
> +                       whileFalse: [| next |
> +                               next := stream next.
> +                               next = $"
> +                                       ifTrue: [
> +                                               stream peek ~= $"
> +                                                       ifTrue: [^ cell contents]
> +                                                       ifFalse: [stream skip: 1]].
> +                               cell nextPut: next]]!
>
> Item was added:
> + ----- Method: CSVParser>>nextNormalCell (in category 'parsing') -----
> + nextNormalCell
> +       ^ String streamContents: [:cell |
> +               [stream atEnd]
> +                       whileFalse: [| next |
> +                               next := stream next.
> +                               (next = delimiter
> +                               or: [Character cr = next
> +                               or: [Character lf = next]])
> +                                       ifTrue: [stream skip: -1.
> +                                               ^ cell contents].
> +                               cell nextPut: next]]!
>
> Item was added:
> + ----- Method: CSVParser>>nextRow (in category 'parsing') -----
> + nextRow
> +       ^ Array streamContents: [:cells |
> +               [stream atEnd or: [String crlf includes: stream peek]]
> +                       whileFalse: [cells nextPut: self nextCell.
> +                               stream peek = delimiter ifTrue: [stream skip: 1]]]!
>
> Item was added:
> + ----- Method: CSVParser>>parse (in category 'parsing') -----
> + parse
> +       ^ Array streamContents: [:rows |
> +               [stream atEnd]
> +                       whileFalse: [rows nextPut: self nextRow.
> +                               [String crlf includes: stream peek] whileTrue: [stream skip: 1]]]!
>
> Item was changed:
>  ----- Method: Player>>openCSVFile:separator: (in category '*skeleton-data i/o') -----
>  openCSVFile: filePath separator: separator
>        FileStream
>                readOnlyFileNamed: filePath
>                do: [:file || values rows columns |
> +                       values := CSVParser parse: file delimiter: separator.
> -                       values := (CSVParser on: file)
> -                                                       useDelimiter: separator;
> -                                                       rows.
>                        rows := values size.
>                        columns := values first size.
>                        self setTotalRows: rows + 1;
>                                setTotalColumns: columns + 1.
>                        1 to: rows do: [:r|
>                                1 to: columns do: [:c |
>                                        ((values at: r) at: c ifAbsent: nil)
>                                                ifNotNil: [:aString || cell |
>                                                        cell := self sheet assuredCellAt: c @ r.
>                                                        (aString beginsWith: '=')
>                                                                ifTrue: [cell formula: aString]
>                                                                ifFalse: [cell contents: aString]
>                                                        ]]]].!
>
> _______________________________________________
> etoys-dev mailing list
> [hidden email]
> http://lists.squeakland.org/mailman/listinfo/etoys-dev
>
_______________________________________________
etoys-dev mailing list
[hidden email]
http://lists.squeakland.org/mailman/listinfo/etoys-dev