[etoys-dev] Etoys Inbox: Skeleton-Richo.9.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Oct 24 09:45:03 EDT 2011


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]
  							]]]].!



More information about the etoys-dev mailing list