@@ -3,11 +3,19 @@ Class {
33 #superclass : #DataFrameWriter ,
44 #instVars : [
55 ' separator' ,
6- ' lineEndConvention'
6+ ' lineEndConvention' ,
7+ ' fieldWriter' ,
8+ ' rowNameEnabled'
79 ],
810 #category : #' DataFrame-IO-Core'
911}
1012
13+ { #category : #' accessing - field writers' }
14+ DataFrameCsvWriter >> defaultFieldWriter [
15+
16+ ^ nil
17+ ]
18+
1119{ #category : #accessing }
1220DataFrameCsvWriter >> defaultLineEndConvention [
1321 ^ {
@@ -17,16 +25,49 @@ DataFrameCsvWriter >> defaultLineEndConvention [
1725 } asDictionary at: Smalltalk os lineEnding
1826]
1927
28+ { #category : #accessing }
29+ DataFrameCsvWriter >> defaultRowIndexEnabled [
30+
31+ ^ true
32+ ]
33+
2034{ #category : #accessing }
2135DataFrameCsvWriter >> defaultSeparator [
2236 ^ $,
2337]
2438
39+ { #category : #' enable/disable' }
40+ DataFrameCsvWriter >> disableRowName [
41+
42+ self rowNameEnabled: false
43+ ]
44+
45+ { #category : #' enable/disable' }
46+ DataFrameCsvWriter >> enableRowName [
47+
48+ self rowNameEnabled: true
49+ ]
50+
51+ { #category : #' accessing - field writers' }
52+ DataFrameCsvWriter >> fieldWriter [
53+
54+ ^ fieldWriter
55+ ]
56+
57+ { #category : #' accessing - field writers' }
58+ DataFrameCsvWriter >> fieldWriter: aSymbol [
59+
60+ fieldWriter := aSymbol
61+ ]
62+
2563{ #category : #initialization }
2664DataFrameCsvWriter >> initialize [
65+
2766 super initialize.
2867 separator := self defaultSeparator.
29- lineEndConvention := self defaultLineEndConvention
68+ lineEndConvention := self defaultLineEndConvention.
69+ fieldWriter := self defaultFieldWriter.
70+ rowNameEnabled := self defaultRowIndexEnabled
3071]
3172
3273{ #category : #accessing }
@@ -43,6 +84,42 @@ DataFrameCsvWriter >> lineEndConvention: aSymbol [
4384 lineEndConvention := aSymbol
4485]
4586
87+ { #category : #' accessing - field writers' }
88+ DataFrameCsvWriter >> objectFieldWriter [
89+
90+ ^ #object
91+ ]
92+
93+ { #category : #' accessing - field writers' }
94+ DataFrameCsvWriter >> optionalQuotedFieldWriter [
95+
96+ ^ #optionalQuoted
97+ ]
98+
99+ { #category : #' accessing - field writers' }
100+ DataFrameCsvWriter >> quotedFieldWriter [
101+
102+ ^ #quoted
103+ ]
104+
105+ { #category : #' accessing - field writers' }
106+ DataFrameCsvWriter >> rawFieldWriter [
107+
108+ ^ #raw
109+ ]
110+
111+ { #category : #accessing }
112+ DataFrameCsvWriter >> rowNameEnabled [
113+
114+ ^ rowNameEnabled
115+ ]
116+
117+ { #category : #accessing }
118+ DataFrameCsvWriter >> rowNameEnabled: aBoolean [
119+
120+ rowNameEnabled := aBoolean = true
121+ ]
122+
46123{ #category : #accessing }
47124DataFrameCsvWriter >> separator [
48125 ^ separator
@@ -53,25 +130,55 @@ DataFrameCsvWriter >> separator: anObject [
53130 separator := anObject
54131]
55132
133+ { #category : #' accessing - field writers' }
134+ DataFrameCsvWriter >> useObjectFieldWriter [
135+
136+ self fieldWriter: self objectFieldWriter
137+ ]
138+
139+ { #category : #' accessing - field writers' }
140+ DataFrameCsvWriter >> useOptionalQuotedFieldWriter [
141+
142+ self fieldWriter: self optionalQuotedFieldWriter
143+ ]
144+
145+ { #category : #' accessing - field writers' }
146+ DataFrameCsvWriter >> useQuotedFieldWriter [
147+
148+ self fieldWriter: self quotedFieldWriter
149+ ]
150+
151+ { #category : #' accessing - field writers' }
152+ DataFrameCsvWriter >> useRawFieldWriter [
153+
154+ self fieldWriter: self rawFieldWriter
155+ ]
156+
56157{ #category : #writing }
57158DataFrameCsvWriter >> write: aDataFrame to: aFileReference [
159+
58160 | stream writer |
59161 stream := aFileReference writeStream.
60162
61163 writer := NeoCSVWriter on: stream.
164+ fieldWriter ifNotNil: [ writer fieldWriter: fieldWriter ].
62165 writer separator: self separator.
63166 writer lineEndConvention: self lineEndConvention.
64167
65- writer
66- writeField: ' ' ;
67- writeSeparator;
68- writeHeader: aDataFrame columnNames.
69-
70- aDataFrame do: [ :row |
168+ self rowNameEnabled ifTrue: [
71169 writer
72- writeField: row name;
73- writeSeparator;
74- nextPut: row ].
170+ writeField: ' ' ;
171+ writeSeparator ].
172+ writer writeHeader: aDataFrame columnNames.
173+
174+ self rowNameEnabled
175+ ifTrue: [
176+ aDataFrame do: [ :row |
177+ writer
178+ writeField: row name;
179+ writeSeparator;
180+ nextPut: row ] ]
181+ ifFalse: [ aDataFrame do: [ :row | writer nextPut: row ] ].
75182
76183 writer close
77184]
0 commit comments