In #bleedingEdge: === Name: Neo-CSV-Core-SvenVanCaekenberghe.21 Author: SvenVanCaekenberghe Time: 6 October 2014, 5:49:01.691696 pm UUID: a6faeef3-aaa7-460f-a815-8e77b62f9906 Ancestors: Neo-CSV-Core-SvenVanCaekenberghe.20
Added NeoCSVReader>>#addIgnoredFields: Added NeoCSVReader>>#select:[thenDo:] to skip empty or other records Added NeoCSVReaderTests>>#testSkippingEmptyRecords === Name: Neo-CSV-Tests-SvenVanCaekenberghe.18 Author: SvenVanCaekenberghe Time: 6 October 2014, 5:49:36.206743 pm UUID: 95d87278-4398-41d3-96ed-83705d5488ce Ancestors: Neo-CSV-Tests-SvenVanCaekenberghe.17 Added NeoCSVReader>>#addIgnoredFields: Added NeoCSVReader>>#select:[thenDo:] to skip empty or other records Added NeoCSVReaderTests>>#testSkippingEmptyRecords === Here is the test: testSkippingEmptyRecords | input output | input := '1,2,3\\4,5,6\,,\7,8,9' withCRs. output := (NeoCSVReader on: input readStream) select: [ :each | each notEmpty and: [ (each allSatisfy: #isNil) not ] ]. self assert: output equals: #(#('1' '2' '3') #('4' '5' '6') #('7' '8' '9')). output := (NeoCSVReader on: input readStream) emptyFieldValue: ''; select: [ :each | each notEmpty and: [ (each allSatisfy: #isEmpty) not ] ]. self assert: output equals: #(#('1' '2' '3') #('4' '5' '6') #('7' '8' '9')) Regards, Sven On 05 Oct 2014, at 02:39, Esteban A. Maringolo <emaring...@gmail.com> wrote: > 2014-10-04 10:47 GMT-03:00 Sven Van Caekenberghe <s...@stfx.eu>: >> Esteban, >> >> On 04 Oct 2014, at 02:42, Esteban A. Maringolo <emaring...@gmail.com> wrote: >> >>> Sven, >>> >>> Is it possible to skip blank/empty lines in NeoCSVReader? >>> >>> So if a line is empty or contains ",,,,,,,," it would be skipped from >>> the iteration. >>> >>> Does it already provider such feature? (I couldn't find any setting >>> related with this). >>> >>> Esteban A. Maringolo >> >> Could you elaborate a bit on the use case ? > > Yes, users upload a CSV file with the proper columns (sometimes they > don't, but that's another story), and because they export/copy the CSV > from Excel most of > the times there are *lots* (might be hundreds) of empty lines at the > end, it is, lines > with separators only, or even blank lines. > >> My first reaction would be that you have to deal with these yourself >> afterwards. > > When dealing with "array based" records, it is, with no #recordClass > defined it would be easier. Because you can check whether all the > values of the array are empty or nil. So on each iteration (#next) you > could return the value array if it isn't empty or send #next again > until you get a record with any data. > > When working with a record class I think you can't do this, because it > seems you instantiate the record before iterating through each field > of the record. > >> What would be the definition of an empty record ? What about empty quoted >> fields ? > > An empty record of a four columns CSV file would look like: > ,,, > or (if some columns are quoted) > ,"","", > > I don't see how a record like that could be of any use. > > Best regards! > > Esteban A. Maringolo > > >> PS: I got your other contribution, I think it is OK to add, thanks. > > Great!