Is there a way to include commas in CSV columns without breaking the formatting?

Csv

Csv Problem Overview


I've got a two column CSV with a name and a number. Some people's name use commas, for example Joe Blow, CFA. This comma breaks the CSV format, since it's interpreted as a new column.

I've read up and the most common prescription seems to be replacing that character, or replacing the delimiter, with a new value (e.g. this|that|the, other).

I'd really like to keep the comma separator (I know excel supports other delimiters but other interpreters may not). I'd also like to keep the comma in the name, as Joe Blow| CFA looks pretty silly.

Is there a way to include commas in CSV columns without breaking the formatting, for example by escaping them?

Csv Solutions


Solution 1 - Csv

Enclose the field in quotes, e.g.

field1_value,field2_value,"field 3,value",field4, etc...

See wikipedia.

Updated:

To encode a quote, use ", one double quote symbol in a field will be encoded as "", and the whole field will become """". So if you see the following in e.g. Excel:

---------------------------------------
| regular_value |,,,"|	,"", |"""	|"|
---------------------------------------

the CSV file will contain:

regular_value,",,,""",","""",","""""""",""""

A comma is simply encapsulated using quotes, so , becomes ",".

A comma and quote needs to be encapsulated and quoted, so "," becomes """,""".

Solution 2 - Csv

I found that some applications like Numbers in Mac ignore the double quote if there is space before it.

a, "b,c" doesn't work while a,"b,c" works.

Solution 3 - Csv

The problem with the CSV format, is there's not one spec, there are several accepted methods, with no way of distinguishing which should be used (for generate/interpret). I discussed all the methods to escape characters (newlines in that case, but same basic premise) in another post. Basically it comes down to using a CSV generation/escaping process for the intended users, and hoping the rest don't mind.

Reference spec document.

Solution 4 - Csv

If you want to make that you said, you can use quotes. Something like this

$name = "Joe Blow, CFA.";
$arr[] = "\"".$name."\"";

so now, you can use comma in your name variable.

Solution 5 - Csv

You need to quote that values.
Here is a more detailed spec.

Solution 6 - Csv

In addition to the points in other answers: one thing to note if you are using quotes in Excel is the placement of your spaces. If you have a line of code like this:

print '%s, "%s", "%s", "%s"' % (value_1, value_2, value_3, value_4)

Excel will treat the initial quote as a literal quote instead of using it to escape commas. Your code will need to change to

print '%s,"%s","%s","%s"' % (value_1, value_2, value_3, value_4)

It was this subtlety that brought me here.

Solution 7 - Csv

You can use Template literals (Template strings)

e.g -

`"${item}"`

Solution 8 - Csv

I faced the same problem and quoting the , did not help. Eventually, I replaced the , with +, finished the processing, saved the output into an outfile and replaced the + with ,. This may seem ugly but it worked for me.

Solution 9 - Csv

Depending on your language, there may be a to_json method available. That will escape many things that break CSVs.

Solution 10 - Csv

CSV files can actually be formatted using different delimiters, comma is just the default.

You can use the sep flag to specify the delimiter you want for your CSV file.

Just add the line sep=; as the very first line in your CSV file, that is if you want your delimiter to be semi-colon. You can change it to any other character.

Example

Solution 11 - Csv

May not be what is needed here but it's a very old question and the answer may help others. A tip I find useful with importing into Excel with a different separator is to open the file in a text editor and add a first line like:

sep=|

where | is the separator you wish Excel to use. Alternatively you can change the default separator in Windows but a bit long-winded:

Control Panel>Clock & region>Region>Formats>Additional>Numbers>List separator [change from comma to your preferred alternative]. That means Excel will also default to exporting CSVs using the chosen separator.

Solution 12 - Csv

You could encode your values, for example in PHP base64_encode($str) / base64_decode($str)

IMO this is simpler than doubling up quotes, etc.

https://www.php.net/manual/en/function.base64-encode.php

The encoded values will never contain a comma so every comma in your CSV will be a separator.

Solution 13 - Csv

You can use the Text_Qualifier field in your Flat file connection manager to as ". This should wrap your data in quotes and only separate by commas which are outside the quotes.

Solution 14 - Csv

First, if item value has double quote character ("), replace with 2 double quote character ("")

item = item.ToString().Replace("""", """""")

Finally, wrap item value:

ON LEFT: With double quote character (")

ON RIGHT: With double quote character (") and comma character (,)

csv += """" & item.ToString() & ""","

Solution 15 - Csv

Double quotes not worked for me, it worked for me \". If you want to place a double quotes as example you can set \"\".

You can build formulas, as example:

fprintf(strout, "\"=if(C3=1,\"\"\"\",B3)\"\n");

will write in csv:

> =IF(C3=1,"",B3)

Solution 16 - Csv

This isn't a perfect solution, but you can just replace all uses of commas with or a lower quote. It looks very very similar to a comma and will visually serve the same purpose. No quotes are required

in JS this would be

stringVal.replaceAll(',', '‚')

You will need to be super careful of cases where you need to directly compare that data though

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionbuleyView Question on Stackoverflow
Solution 1 - CsvRyanView Answer on Stackoverflow
Solution 2 - CsvmudinView Answer on Stackoverflow
Solution 3 - CsvRuduView Answer on Stackoverflow
Solution 4 - CsvCloudView Answer on Stackoverflow
Solution 5 - CsvSLaksView Answer on Stackoverflow
Solution 6 - CsvhlongmoreView Answer on Stackoverflow
Solution 7 - CsvKrishnaView Answer on Stackoverflow
Solution 8 - CsvMohammedView Answer on Stackoverflow
Solution 9 - CsvamikschView Answer on Stackoverflow
Solution 10 - CsvMohammed AhmedView Answer on Stackoverflow
Solution 11 - Csvuser25307View Answer on Stackoverflow
Solution 12 - CsvKevinView Answer on Stackoverflow
Solution 13 - Csvsakshi jainView Answer on Stackoverflow
Solution 14 - CsvLifeiSHotView Answer on Stackoverflow
Solution 15 - CsvmathengineerView Answer on Stackoverflow
Solution 16 - CsvRasTheDestroyerView Answer on Stackoverflow