Login  Register

Re: NeoCSV and special handling for some columns

Posted by Mariano Martinez Peck on Sep 28, 2015; 12:56pm
URL: https://forum.world.st/NeoCSV-and-special-handling-for-some-columns-tp4852282p4852294.html

Imagine something like this:

neoCSVReader := (NeoCSVReader on: stream).
neoCSVReader 
separator: $,;
recordClass: PriceRecord;
addIgnoredField; "<name>"
addField:  #securityUniqueId: ; "<ticker>"
addField: #date: converter: [ :string | Date readFrom: string readStream pattern: 'yyyymmdd' ]; "<date>"
addFloatField: #open: ; "<open>"
addFloatField: #high: ; "<high>"
addFloatField: #low: ; "<low>"
addFloatField: #close: ; "<close>"
addIntegerField: #volume: . "<vol>"
neoCSVReader skipHeader.
priceRecords := neoCSVReader upToEnd.


The #recordClass: is optional. If not, you can get an array of arrays instead. 
You can add #addIgnoredField for all the ones you want to ignore, then add the #addNumber: etc for the number ones, etc. To write a default empty value, I would use my own converter. Something like:

addField: #stringcolumn: converter: [ :string | string isEmptyOrNil ifTrue: [ '' ]  ]; 
addField: #numbercolumn: converter: [ :string | string isEmptyOrNil ifTrue: [ 0 ] ifFalse: [ NeoNumberParser parse: string ]  ];

Hope this helps.

Cheers, 



On Mon, Sep 28, 2015 at 9:06 AM, Nicolai Hess <[hidden email]> wrote:
Hi,

I have two problems I could not solve:

1. I would like to read only some columns: I have a large file with
    ~30 colums, but I am only interested on ~5 columns
    (not that important, I could pre-process the file) but anyway it would be
    nice to do it in smalltalk.

2. some columns will contain only strings (quoted values) and some only numbers,
    but the field may be empty, is it possible to define the default "emptyValue" as an
    - empty string for empty fields in the "string column"
    - 0 for empty fields in the "number column"?


thanks
 in advance

nicolai



--