2011-03-30 7 views

답변

10

에게 그것을 쉬 이처럼 간단 할 울드 :

csvCell = "\"" + cell.Replace("\"", "\"\"") + "\""; 

이는 "따옴표"의 셀 텍스트를 감싸는 두 번 "따옴표"로 세포 내부 "따옴표"이스케이프합니다.

+0

내가 익숙하지 않다 처리 할 수있는 문자열 확장의 'c'와 함께하지만 당신이 틀렸다는 것을 확신합니다. 왜냐하면 큰 따옴표 만 이스케이프하기 때문입니다. csv spec을 사용하면 라인 피드와 캐리지 리턴을 벗어나야합니다. http://www.ietf.org/rfc/rfc4180.txt를 참조하십시오. – degr

2

랩 각 셀/값을? . 구분 \의 t으로 탭을 사용

을 당신은 세포/값 doube 따옴표를 위해 우리를 볼 필요, 당신은 작은 따옴표 또는 사용 이스케이프 문자로 대체 할 수

Eaxmple을 :.

"Test", "test,123", "test 123", "test 
123", "test 345" 
"Test", "test,123", "test 123", "test 
123", "test 345" 
"Test", "test,123", "test 123", "test 
123", "test 345" 
0

캐리지 리턴을 공백으로 바꾸고 각 텍스트 값을 큰 따옴표로 묶습니다.

필자는 탭으로 구분 된 파일을 사용해 보았지만이를 사용하여 문자로 모호성을 제거 할 수 있습니까?

2

내가이 오래 알고 있지만, 여기 객체 클래스의 확장 방법으로 내 솔루션입니다 : 여기

public static class ObjectUtil { 

    public static string ToCsvString(this object obj) { 
     string result = obj.ToString(); 
     if (result.Contains("\"")) { 
      result = result.Replace("\"", "\"\""); 
     } 
     if (result.Contains(",")) { 
      result = string.Format("\"{0}\"", result); 
     } 
     if (result.Contains(Environment.NewLine)) { 
      result = string.Format("\"{0}\"", result); 
     } 
     return result; 
    } 
} 
+2

contains ","& "\ n"은 "result.Contains (',')와 병합되어야합니다. result.Contains ('\ n') || result.Contains ('\ r')''현재 줄 바꿈과 쉼표가 모두 포함되어 있으면 값을 따옴표로 묶습니다. –

0

하면이 단순히

public static string Escape(this string value) 
{ 
    return string.Format("\"{0}\"", (value ?? string.Empty).Replace("\"", "\"\"")); 
} 
관련 문제