CSV에 다음과 같은 줄이 있습니다.
"Samsung U600 24"","10000003409","1","10000003427"
옆에 24
있는 인용 부호는 인치를 표시하는 데 사용되며 해당 인용 부호 바로 옆의 인용 부호는 필드를 닫습니다. 나는 줄을 읽고 fgetcsv
있지만 파서는 실수를하고 값을 다음과 같이 읽습니다.
Samsung U600 24",10000003409"
인치 따옴표 앞에 백 슬래시를 넣으려고했지만 이름에 백 슬래시가 나타납니다.
Samsung U600 24\"
CSV에서 올바르게 이스케이프 처리하는 방법이 있습니까? 값이 Samsung U600 24"
이거나 프로세서에서 정규 표현식을 사용해야 합니까?
답변
2 인용 부호를 사용하십시오 :
"Samsung U600 24"""
답변
큰 따옴표뿐만 아니라 작은 따옴표 ( '
), 큰 따옴표 ( "
), 백 슬래시 ( \
) 및 NUL (NULL 바이트)이 필요합니다.
모든 것을 다룰 수 있도록 읽고 fputcsv()
쓰는 데 사용하십시오 fgetcsv()
.
답변
나는 이것이 오래된 게시물이라는 것을 알고 있지만 확장 방법을 사용하여 C #에서 null 값을 빈 문자열로 변환하는 것과 함께 해결하는 방법입니다.
다음과 같은 정적 클래스를 작성하십시오.
/// <summary>
/// Wraps value in quotes if necessary and converts nulls to empty string
/// </summary>
/// <param name="value"></param>
/// <returns>String ready for use in CSV output</returns>
public static string Q(this string value)
{
if (value == null)
{
return string.Empty;
}
if (value.Contains(",") || (value.Contains("\"") || value.Contains("'") || value.Contains("\\"))
{
return "\"" + value + "\"";
}
return value;
}
그런 다음 각 문자열에 대해 CSV 대신 다음을 작성하십시오.
stringBuilder.Append( WhateverVariable );
당신은 단지 :
stringBuilder.Append( WhateverVariable.Q() );
답변
값에 쉼표, 개행 문자 또는 큰 따옴표가 포함 된 경우 문자열은 큰 따옴표로 묶어야합니다. 예 : “이 필드의 개행 문자 \ n”.
아래 온라인 도구를 사용하여 “”및, 연산자를 이스케이프 할 수 있습니다.
https://www.freeformatter.com/csv-escape.html#ad-output