@@ -20,6 +20,16 @@ All code snippets on this page assume that the following has been executed:
20
20
- {Converting Fields}[#label-Converting+Fields]
21
21
- {Recipe: Filter Generated Field Strings}[#label-Recipe-3A+Filter+Generated+Field+Strings]
22
22
- {Recipe: Specify Multiple Write Converters}[#label-Recipe-3A+Specify+Multiple+Write+Converters]
23
+ - {RFC 4180 Compliance}[#label-RFC+4180+Compliance]
24
+ - {Row Separator}[#label-Row+Separator]
25
+ - {Recipe: Generate Compliant Row Separator}[#label-Recipe-3A+Generate+Compliant+Row+Separator]
26
+ - {Recipe: Generate Non-Compliant Row Separator}[#label-Recipe-3A+Generate+Non-Compliant+Row+Separator]
27
+ - {Column Separator}[#label-Column+Separator]
28
+ - {Recipe: Generate Compliant Column Separator}[#label-Recipe-3A+Generate+Compliant+Column+Separator]
29
+ - {Recipe: Generate Non-Compliant Column Separator}[#label-Recipe-3A+Generate+Non-Compliant+Column+Separator]
30
+ - {Quote Character}[#label-Quote+Character]
31
+ - {Recipe: Generate Compliant Quote Character}[#label-Recipe-3A+Generate+Compliant+Quote+Character]
32
+ - {Recipe: Generate Non-Compliant Quote Character}[#label-Recipe-3A+Generate+Non-Compliant+Quote+Character]
23
33
24
34
=== Output Formats
25
35
@@ -147,3 +157,88 @@ This example defines and uses two custom write converters to strip and upcase ge
147
157
csv << [' baz ', 2]
148
158
end
149
159
output_string # => "FOO,0\nBAR,1\nBAZ,2\n"
160
+
161
+ === RFC 4180 Compliance
162
+
163
+ By default, \CSV generates data that is compliant with
164
+ {RFC 4180}[https://tools.ietf.org/html/rfc4180]
165
+ with respect to:
166
+ - Column separator.
167
+ - Quote character.
168
+
169
+ ==== Row Separator
170
+
171
+ RFC 4180 specifies the row separator CRLF (Ruby <tt>"\r\n"</tt>).
172
+
173
+ ===== Recipe: Generate Compliant Row Separator
174
+
175
+ For strict compliance, use option +:row_sep+ to specify row separator <tt>"\r\n"</tt>:
176
+ output_string = CSV.generate('', row_sep: "\r\n") do |csv|
177
+ csv << ['Foo', 0]
178
+ csv << ['Bar', 1]
179
+ csv << ['Baz', 2]
180
+ end
181
+ output_string # => "Foo,0\r\nBar,1\r\nBaz,2\r\n"
182
+
183
+ ===== Recipe: Generate Non-Compliant Row Separator
184
+
185
+ For data with non-compliant row separators, use option +:row_sep+ with a different value:
186
+ This example source uses semicolon (<tt>";'</tt>) as its row separator:
187
+ output_string = CSV.generate('', row_sep: ";") do |csv|
188
+ csv << ['Foo', 0]
189
+ csv << ['Bar', 1]
190
+ csv << ['Baz', 2]
191
+ end
192
+ output_string # => "Foo,0;Bar,1;Baz,2;"
193
+
194
+ ==== Column Separator
195
+
196
+ RFC 4180 specifies column separator COMMA (Ruby <tt>","</tt>).
197
+
198
+ ===== Recipe: Generate Compliant Column Separator
199
+
200
+ Because the \CSV default comma separator is <tt>","</tt>,
201
+ you need not specify option +:col_sep+ for compliant data:
202
+ output_string = CSV.generate('') do |csv|
203
+ csv << ['Foo', 0]
204
+ csv << ['Bar', 1]
205
+ csv << ['Baz', 2]
206
+ end
207
+ output_string # => "Foo,0\nBar,1\nBaz,2\n"
208
+
209
+ ===== Recipe: Generate Non-Compliant Column Separator
210
+
211
+ For data with non-compliant column separators, use option +:col_sep+.
212
+ This example source uses TAB (<tt>"\t"</tt>) as its column separator:
213
+ output_string = CSV.generate('', col_sep: "\t") do |csv|
214
+ csv << ['Foo', 0]
215
+ csv << ['Bar', 1]
216
+ csv << ['Baz', 2]
217
+ end
218
+ output_string # => "Foo\t0\nBar\t1\nBaz\t2\n"
219
+
220
+ ==== Quote Character
221
+
222
+ RFC 4180 specifies quote character DQUOTE (Ruby <tt>"\""</tt>).
223
+
224
+ ===== Recipe: Generate Compliant Quote Character
225
+
226
+ Because the \CSV default quote character is <tt>"\""</tt>,
227
+ you need not specify option +:quote_char+ for compliant data:
228
+ output_string = CSV.generate('', force_quotes: true) do |csv|
229
+ csv << ['Foo', 0]
230
+ csv << ['Bar', 1]
231
+ csv << ['Baz', 2]
232
+ end
233
+ output_string # => "\"Foo\",\"0\"\n\"Bar\",\"1\"\n\"Baz\",\"2\"\n"
234
+
235
+ ===== Recipe: Generate Non-Compliant Quote Character
236
+
237
+ For data with non-compliant quote characters, use option +:quote_char+.
238
+ This example source uses SQUOTE (<tt>"'"</tt>) as its quote character:
239
+ output_string = CSV.generate('', quote_char: "'", force_quotes: true) do |csv|
240
+ csv << ['Foo', 0]
241
+ csv << ['Bar', 1]
242
+ csv << ['Baz', 2]
243
+ end
244
+ output_string # => "'Foo','0'\n'Bar','1'\n'Baz','2'\n"
0 commit comments