IT story

서식을 손상시키지 않고 CSV 열에 쉼표를 포함시키는 방법이 있습니까?

hot-time 2020. 5. 5. 19:36
반응형

서식을 손상시키지 않고 CSV 열에 쉼표를 포함시키는 방법이 있습니까?


이름과 숫자가있는 두 개의 열 CSV가 있습니다. 예를 들어 일부 사람들의 이름은 쉼표를 사용합니다. Joe Blow, CFA.이 쉼표는 새 열로 해석되므로 CSV 형식을 구분합니다.

읽었으며 가장 일반적인 처방전은 해당 문자를 바꾸거나 구분 기호를 새로운 값으로 바꾸는 것 같습니다 (예 :) this|that|the, other.

쉼표 구분 기호를 유지하고 싶습니다 (excel은 다른 구분 기호를 지원하지만 다른 인터프리터는 지원하지 않을 수 있음을 알고 있습니다). 나는 또한 Joe Blow| CFA어리석은 것처럼 쉼표를 이름으로 유지하고 싶습니다 .

이스케이프 처리 등의 형식을 손상시키지 않고 CSV 열에 쉼표를 포함시키는 방법이 있습니까?


필드를 따옴표로 묶습니다 (예 :

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

Wikipedia를 참조하십시오 .

업데이트 :

따옴표를 인코딩하려면을 사용하십시오 ". 필드에 하나의 큰 따옴표가로 인코딩되고 ""전체 필드가됩니다 """". 예를 들어 Excel에서 다음을 볼 경우 :

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

CSV 파일에는 다음이 포함됩니다.

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

쉼표는 따옴표를 사용하여 간단히 캡슐화되므로 ,됩니다 ",".

쉼표와 인용의 요구가 캡슐화하고 인용하는, 그래서 ","된다 """,""".


CSV 형식의 문제점은 사양이 하나도없고 몇 가지 허용되는 방법이 있으며 어떤 방법을 사용해야하는지 구별 할 수있는 방법이 없습니다 (생성 / 해석에 사용). 다른 게시물 에서 문자 (이 경우 줄 바꿈이지만 동일한 기본 전제)를 이스케이프 처리하는 모든 방법에 대해 논의 했습니다 . 기본적으로 의도 된 사용자를 위해 CSV 생성 / 탈출 프로세스를 사용하고 나머지는 신경 쓰지 않기를 바랍니다.

참조 사양 문서 .


당신이 말한 것을 원한다면, 따옴표를 사용할 수 있습니다. 이 같은

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

이제 이름 변수에 쉼표를 사용할 수 있습니다.


그 값을 인용해야합니다. 더 자세한 사양은
다음과 같습니다 .


다른 답변의 요점 외에도 Excel에서 따옴표를 사용하는 경우 유의해야 할 것은 공백 배치입니다. 다음과 같은 코드 줄이 있다면 :

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

Excel은 쉼표를 이스케이프 처리하는 대신 초기 따옴표를 리터럴 따옴표로 취급합니다. 코드를로 변경해야합니다

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

나를 여기로 데려 간 것은이 미묘한 일이었습니다.


나는 똑같은 문제에 직면했고 인용 ,해도 도움이되지 않았다. 결국, I는를 대체 ,하여 +, 처리를 완료 OUTFILE로 출력을 저장하고 교체 +,. 이것은 추한 것처럼 보이지만 그것은 나를 위해 일했습니다.


언어에 따라 사용 가능한 to_json 메소드가있을 수 있습니다. 그것은 CSV를 깨뜨리는 많은 것들을 피할 것입니다.


예를 들어 PHP base64_encode ($ str) / base64_decode ($ str)에서 값을 인코딩 할 수 있습니다.

IMO는 따옴표 등을 두 배로 늘리는 것보다 간단합니다.

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

인코딩 된 값에는 쉼표가 포함되지 않으므로 CSV의 모든 쉼표는 구분 기호가됩니다.


Text_Qualifier플랫 파일 연결 관리자 필드를로 사용할 수 있습니다 ". 이것은 데이터를 따옴표로 묶어야 하며 따옴표 밖에있는 쉼표로만 분리해야합니다.


먼저 항목 값에 큰 따옴표 ( ")가 있으면 2 개의 큰 따옴표 (" ")로 바꾸십시오.

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

마지막으로, 항목 값 랩 :

왼쪽 : 큰 따옴표 문자 ( ")

오른쪽에 : 큰 따옴표 문자 ( ") 및 쉼표 문자 (,)

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

큰 따옴표는 나를 위해 일하지 않았다, 그것은 나를 위해 일했다 \". 예를 들어 큰 따옴표를 배치하려면을 설정할 수 있습니다 \"\".

예를 들어 수식을 작성할 수 있습니다.

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

will write in csv:

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


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.

참고URL : https://stackoverflow.com/questions/4617935/is-there-a-way-to-include-commas-in-csv-columns-without-breaking-the-formatting

반응형