2013-05-08 5 views
1

이스케이프 처리되지 않은 전체 정지가 많은 경우 웹 사이트에 업로드 할 파일을 만들어 CSV 파일을 생성합니다.CSV 파일에 큰 따옴표를 사용하지 않는 이유가 있습니까?

내가 탈출해야하는 필드를 찾으려고 시도했을 때 두통이 있었음 재미있는 비트 표현을 배웠지 만이 무의미한 점은 무엇입니까? 모든 필드를 큰 따옴표로 묶고 그 필드를 사용하지 않는 이유가 있습니까?

과도한 것처럼 보이지만 어쩌면 각 문자열을 검색하는 것이 과잉입니다. 여기

내 기능입니다 : (당신이 요청 이후 어떤이있는 경우)

Private Sub WriteToCSVFile(ByVal s As String(,), ByVal sFileName As String) 
    Dim sb As New System.Text.StringBuilder 

    For i As Integer = 0 To s.GetUpperBound(0) 
     For j As Integer = 0 To s.GetUpperBound(1) 
      If Regex.Match(s(i, j), "^[\w ]*$").Success Then 
       sb.Append(s(i, j) & IIf(j = s.GetUpperBound(1), "", ",")) 
      Else 
       sb.Append("""" & s(i, j) & IIf(j = s.GetUpperBound(1), """", """,")) 
      End If 
     Next 
     sb.AppendLine() 
    Next 

    System.IO.File.WriteAllText(Application.StartupPath & "\" & sFileName, sb.ToString) 

End Sub 
+0

여전히 큰 따옴표를 이스케이프 처리해야합니다. – CodesInChaos

+1

모든 '텍스트'입력란을 따옴표로 묶어서는 안됩니다. 일부 프로그램 (구 버전 Excel)은 내용 (예 : 숫자)에 관계없이 따옴표 붙은 필드를 텍스트로 처리하므로 문제가 될 수도 있고 문제가되지 않을 수도 있습니다. –

답변

1

단점 따옴표를 추가하는 것은 무조건 가능성이 CSV 파일의 크기, 파일을 읽을 데 걸리는 시간을 증가 시킨다는이며, 파일을 처리 할 때 메모리 사용 공간. 그러나 메모리와 저장 장치가 특히 제한되지 않는 한 실제적인 영향은 무시할 만합니다.

RFC4180이 CSV 형식을 정의하려고 시도했지만 CSV 형식에 대한 신뢰할 수있는 표준은 없습니다. 수행

각 필드 또는 Microsoft Excel과 같은 큰 따옴표 (그러나 일부 프로그램에 동봉되지 않을 수 있습니다 RFC4180는 일부 시스템이 규칙을 지원하지 않을 수 있다는 경고와 함께, 모든 경우에 따옴표를 할 수 있습니다 큰 따옴표는 사용하지 마십시오. ).

CSV 파일의 소비자가 RFC의이 부분과 호환되면 모든 필드를 큰 따옴표로 묶는 것이 좋습니다.

2

구분 기호로 구분 기호와 쉼표를 사용하여 큰 단점을 보았습니다. 소스 데이터에 가끔씩 데이터가 포함되어 있기 때문에 데이터를 처리 할 때 오류가 발생합니다. 모든 분리 문자를 사용하지 않고 쉼표 대신 파이프를 사용하여 값을 구분하는 것을 선호합니다. 원본 데이터에 파이프가 포함될 수 있지만 CSV 파일의 데이터를 구분하고 구분하는 데 사용되는 공통 문자와 거의 같은 것은 아닙니다.

1

숫자가 아닌 문자열 주위에 큰 따옴표를 사용하는 것이 좋습니다. 내부에 큰 따옴표를 이스케이프 처리하는 코드를 작성해야합니다. 문자열도 마찬가지입니다. 예를 들어

: 당신이 실제로 작동하는 것을 고려할 때

1,"Charles ""Pretty Boy"" Floyd","1 Short St, Smallville" 
2,"Charlie ""Lucky"" Luciano","1 Short St, Smallville" 

추가 오버 헤드가 간단하다.

0

소스 데이터의 모든 인용 부호와 쉼표를 ~~~DoubleQuote~~~, ~~~SingleQuote~~~~~~Comma~~~과 같은 알려진 문자열로 대체하는 것이 더 쉽습니다. 소스에서이 값들이 대체되면 값을 쉼표 형식으로 저장하는 것이 간단합니다. 어느 것이 여전히 읽을 수 있습니다.

인간의 재능이나 저장된 값에 대한 쿼리 작성에 신경 쓰지 않는다면 64 비트 인코더를 사용하여 임의의 사용자 제공 텍스트를 단순한 영숫자 문자열로 변환하면됩니다. 추가 이득은 한 번 암호로 고쳐 쓴 그것 사용자가 당신의 일과를 끊을 수있는 무언가를 창조하는 것은 진짜로 어렵다이다.

관련 문제