[csv] CSV에서 큰 따옴표를 올바르게 이스케이프 처리

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


답변