From 9671eee2f0696986bc027e9314f51b6328fb4235 Mon Sep 17 00:00:00 2001 From: Joshua-Dias-Barreto Date: Tue, 23 Apr 2024 16:18:10 +0530 Subject: [PATCH] Added writeToCsv: withColumnNames: withRowNames: --- .../DataFrameCsvWriterTest.class.st | 27 +++++++++ .../TestCsvStrings.class.st | 34 ++++++++++++ src/DataFrame-IO/DataFrame.extension.st | 36 +++++++++++- src/DataFrame-IO/DataFrameCsvWriter.class.st | 55 ++++++++++++++++--- 4 files changed, 142 insertions(+), 10 deletions(-) diff --git a/src/DataFrame-IO-Tests/DataFrameCsvWriterTest.class.st b/src/DataFrame-IO-Tests/DataFrameCsvWriterTest.class.st index 19bb8b95..02da9468 100644 --- a/src/DataFrame-IO-Tests/DataFrameCsvWriterTest.class.st +++ b/src/DataFrame-IO-Tests/DataFrameCsvWriterTest.class.st @@ -93,3 +93,30 @@ DataFrameCsvWriterTest >> testWriteToCsvWithSeparatorTab [ expected := TestCsvStrings tabQuoteCsvString. self assertCollection: actual lines equals: expected lines ] + +{ #category : #tests } +DataFrameCsvWriterTest >> testWriteToCsvWithoutColumnNames [ + | actual expected | + dataFrame writeToCsv: commaQuoteCsvFile withColumnNames: false. + actual := self readFile: commaQuoteCsvFile. + expected := TestCsvStrings commaQuoteCsvStringWithoutColumnNames. + self assert: actual lines equals: expected lines +] + +{ #category : #tests } +DataFrameCsvWriterTest >> testWriteToCsvWithoutRowNames [ + | actual expected | + dataFrame writeToCsv: commaQuoteCsvFile withRowNames: false. + actual := self readFile: commaQuoteCsvFile. + expected := TestCsvStrings commaQuoteCsvStringWithoutRowNames. + self assert: actual lines equals: expected lines +] + +{ #category : #tests } +DataFrameCsvWriterTest >> testWriteToCsvWithoutRowNamesWithoutColumnNames [ + | actual expected | + dataFrame writeToCsv: commaQuoteCsvFile withColumnNames: false withRowNames: false. + actual := self readFile: commaQuoteCsvFile. + expected := TestCsvStrings commaQuoteCsvStringWithoutRowNamesWithoutColumnNames. + self assert: actual lines equals: expected lines +] diff --git a/src/DataFrame-IO-Tests/TestCsvStrings.class.st b/src/DataFrame-IO-Tests/TestCsvStrings.class.st index 23c57e7c..f5a72739 100644 --- a/src/DataFrame-IO-Tests/TestCsvStrings.class.st +++ b/src/DataFrame-IO-Tests/TestCsvStrings.class.st @@ -37,6 +37,40 @@ TestCsvStrings class >> commaQuoteCsvString [ ' ] +{ #category : #running } +TestCsvStrings class >> commaQuoteCsvStringWithoutColumnNames [ + + ^ '"1:10 am","2.4","true","rain" +"1:30 am","0.5","true","rain" +"1:50 am","-1.2","true","snow" +"2:10 am","-2.3","false","-" +"2:30 am","3.2","true","rain" +' +] + +{ #category : #running } +TestCsvStrings class >> commaQuoteCsvStringWithoutRowNames [ + + ^ '"temperature","precipitation","type" +"2.4","true","rain" +"0.5","true","rain" +"-1.2","true","snow" +"-2.3","false","-" +"3.2","true","rain" +' +] + +{ #category : #running } +TestCsvStrings class >> commaQuoteCsvStringWithoutRowNamesWithoutColumnNames [ + + ^ '"2.4","true","rain" +"0.5","true","rain" +"-1.2","true","snow" +"-2.3","false","-" +"3.2","true","rain" +' +] + { #category : #running } TestCsvStrings class >> dollarSignCsvString [ diff --git a/src/DataFrame-IO/DataFrame.extension.st b/src/DataFrame-IO/DataFrame.extension.st index 28b0b967..a7408bff 100644 --- a/src/DataFrame-IO/DataFrame.extension.st +++ b/src/DataFrame-IO/DataFrame.extension.st @@ -110,9 +110,39 @@ DataFrame >> writeTo: aLocation using: aDataFrameWriter [ { #category : #'*DataFrame-IO' } DataFrame >> writeToCsv: aFileReference [ - | writer | - writer := DataFrameCsvWriter new. - self writeTo: aFileReference using: writer + + self + writeToCsv: aFileReference + withColumnNames: true + withRowNames: true +] + +{ #category : #'*DataFrame-IO' } +DataFrame >> writeToCsv: aFileReference withColumnNames: enableColumnNames [ + + self + writeToCsv: aFileReference + withColumnNames: enableColumnNames + withRowNames: true +] + +{ #category : #'*DataFrame-IO' } +DataFrame >> writeToCsv: aFileReference withColumnNames: enableColumnNames withRowNames: enableRowNames [ + | writer | + writer := DataFrameCsvWriter new. + enableColumnNames ifFalse: [ writer disableColumnName ]. + enableRowNames ifFalse: [ writer disableRowName ]. + self writeTo: aFileReference using: writer. + +] + +{ #category : #'*DataFrame-IO' } +DataFrame >> writeToCsv: aFileReference withRowNames: enableRowNames [ + + self + writeToCsv: aFileReference + withColumnNames: true + withRowNames: enableRowNames ] { #category : #'*DataFrame-IO' } diff --git a/src/DataFrame-IO/DataFrameCsvWriter.class.st b/src/DataFrame-IO/DataFrameCsvWriter.class.st index cbc1d9e4..a1c2fb21 100644 --- a/src/DataFrame-IO/DataFrameCsvWriter.class.st +++ b/src/DataFrame-IO/DataFrameCsvWriter.class.st @@ -5,11 +5,30 @@ Class { 'separator', 'lineEndConvention', 'fieldWriter', - 'rowNameEnabled' + 'rowNameEnabled', + 'columnNameEnabled' ], #category : #'DataFrame-IO-Core' } +{ #category : #accessing } +DataFrameCsvWriter >> columnNameEnabled [ + + ^ columnNameEnabled +] + +{ #category : #accessing } +DataFrameCsvWriter >> columnNameEnabled: aBoolean [ + + columnNameEnabled := aBoolean = true +] + +{ #category : #accessing } +DataFrameCsvWriter >> defaultColumnIndexEnabled [ + + ^ true +] + { #category : #'accessing - field writers' } DataFrameCsvWriter >> defaultFieldWriter [ @@ -36,12 +55,24 @@ DataFrameCsvWriter >> defaultSeparator [ ^ $, ] +{ #category : #'enable/disable' } +DataFrameCsvWriter >> disableColumnName [ + + self columnNameEnabled: false +] + { #category : #'enable/disable' } DataFrameCsvWriter >> disableRowName [ self rowNameEnabled: false ] +{ #category : #'enable/disable' } +DataFrameCsvWriter >> enableColumnName [ + + self columnNameEnabled: true +] + { #category : #'enable/disable' } DataFrameCsvWriter >> enableRowName [ @@ -67,7 +98,8 @@ DataFrameCsvWriter >> initialize [ separator := self defaultSeparator. lineEndConvention := self defaultLineEndConvention. fieldWriter := self defaultFieldWriter. - rowNameEnabled := self defaultRowIndexEnabled + rowNameEnabled := self defaultRowIndexEnabled. + columnNameEnabled := self defaultColumnIndexEnabled ] { #category : #accessing } @@ -156,16 +188,15 @@ DataFrameCsvWriter >> useRawFieldWriter [ { #category : #writing } DataFrameCsvWriter >> write: aDataFrame to: aFileReference [ - | stream writer | stream := aFileReference writeStream. - writer := NeoCSVWriter on: stream. fieldWriter ifNotNil: [ writer fieldWriter: fieldWriter ]. writer separator: self separator. writer lineEndConvention: self lineEndConvention. - self rowNameEnabled ifTrue: [ + self columnNameEnabled ifTrue: [ + self rowNameEnabled ifTrue: [ writer writeField: ''; writeSeparator ]. @@ -178,7 +209,17 @@ DataFrameCsvWriter >> write: aDataFrame to: aFileReference [ writeField: row name; writeSeparator; nextPut: row ] ] - ifFalse: [ aDataFrame do: [ :row | writer nextPut: row ] ]. + ifFalse: [ aDataFrame do: [ :row | writer nextPut: row ] ]] + + ifFalse: [ + self rowNameEnabled ifTrue: [ + aDataFrame do: [ :row | + writer + writeField: row name; + writeSeparator; + nextPut: row ] ] + ifFalse: [ aDataFrame do: [ :row | writer nextPut: row ] ] ]. + + writer close. - writer close ]