서식을 손상시키지 않고 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.
'IT story' 카테고리의 다른 글
ViewBag, ViewData 및 TempData (0) | 2020.05.05 |
---|---|
왜 Func인가 (0) | 2020.05.05 |
MySQL 데이터베이스에 통화 값을 저장하기위한 최상의 데이터 유형 (0) | 2020.05.05 |
mysql 삽입 쿼리에서 새 레코드 기본 키 ID를 가져 오시겠습니까? (0) | 2020.05.05 |
파이썬에서 정규식 문자열 이스케이프 (0) | 2020.05.05 |