한국어

데이터 및 스프레드시트 · CSV 클리너

CSV 방언 이스케이프: 큰따옴표, 백슬래시 및 데이터베이스 내보내기

· 배경

CSV 구문 분석 중 상호 운용성

백슬래시 이스케이프가 리터럴 텍스트로 유지되는 동안 성공하는 큰따옴표 CSV 경로
원본 ToolAcre 벡터 일러스트레이션

RFC 4180는 큰따옴표를 사용하라고 말합니다. 대신 여러 데이터베이스 도구는 백슬래시를 사용하여 내보냅니다. 이 게시물에서는 유통되는 이스케이프 규칙, 각각의 출처, 그리고 한 방언에서 유효한 파일이 다른 방언에서 중단되는 이유를 설명합니다.

스프레드시트가 백슬래시를 흩뜨려 읽는 데이터베이스 내보내기 - 두 개의 이스케이프 전통이 하나의 파일에서 충돌합니다.

내보내기에는 생산자가 프로그래밍 언어 스타일 규칙을 따르는 반면 스프레드시트 지향 파서는 큰따옴표가 필요하기 때문에 백슬래시와 따옴표가 포함될 수 있습니다. 한 방언을 다른 방언에 적용한다고 해서 중립적인 타협이 이루어지지는 않습니다. 인용된 상태가 데이터에서 열리고 닫히거나 이스케이프 문자를 남기는 위치가 변경됩니다.

ToolAcre는 하나의 명확한 규칙을 지원합니다. 즉, 필드는 큰따옴표로 묶을 수 있고 내부 따옴표는 두 개의 따옴표로 표시됩니다. 백슬래시는 이스케이프 역할이 없습니다. 적재하기 전에 해당 계약을 확인하는 것이 생산자가 의도한 구두점을 추측하도록 청소업체에 요청하는 것보다 더 안전합니다.

RFC 규칙 — 이스케이프 문자 없이 큰따옴표로 묶고 내부 따옴표를 두 배로 늘립니다.

`She said "hello", then left`과 같은 값의 경우 RFC 스타일 CSV이 필드를 둘러싸고 내부 표시를 두 번 씁니다. 구분 기호는 인용된 상태 내에 유지되며 각 이중 쌍은 하나의 리터럴 인용문을 반환합니다. 직렬화는 동일한 변환을 역으로 적용합니다.

필드에 현재 구분 기호, 따옴표, LF, CR 또는 주변 공백이 포함되어 있거나 모든 필드에 인용을 선택할 때마다 필드가 인용됩니다. 별도의 이스케이프 문자가 없습니다. 이 작은 문법은 구분 기호, 포함된 레코드 끝 및 인용 쌍에 대해 테스트됩니다.

C 전통 — 프로그래밍 언어 및 일부 데이터베이스 로더에서 상속된 백슬래시 이스케이프 따옴표, 개행 및 구분 기호

일부 소스 시스템은 백슬래시 규칙을 정의할 수 있지만 ToolAcre에는 이에 대한 스위치가 없습니다. 백슬래시는 일반 문자처럼 현재 필드에 추가됩니다. 그런 다음 파서가 인용된 상태인지, 쌍으로 된 인용문이 있는지 여부에 따라 다음 인용문이 해석됩니다.

결과적으로 백슬래시 내보내기는 큰따옴표 CSV로 변환하기 전에 해당 방언에 대해 구성된 도구로 구문 분석되어야 합니다. 검색 및 바꾸기는 리터럴 백슬래시와 이스케이프된 시퀀스가 ​​비슷해 보일 수 있으므로 위험합니다. 소스 문법은 어떤 것이 구문인지 결정해야 합니다.

백슬래시 이스케이프는 지원되지 않는 대체 방언이며 ToolAcre가 읽을 수 있는 모드가 아닙니다.

통합 문서에는 데이터베이스 제품 및 데이터 프레임 라이브러리 이름이 지정되어 있지만 기본 및 구성 가능한 모드는 이 저장소에 문서화되어 있지 않습니다. 이 기사에서는 특정 공급업체의 방언을 언급하지 않습니다. 워크플로에서 사용되는 정확한 내보내기 또는 로더 문서를 참조하세요.

파일을 생성한 명령과 옵션을 캡처합니다. 제품은 여러 모드를 지원할 수 있으므로 이름만으로는 방언이 아닙니다. 재현성은 구성과 구분 기호, 인용문, 개행 및 백슬래시 엣지 케이스를 포함하는 샘플에서 비롯됩니다.

특정 데이터베이스 및 라이브러리 기본값에는 자체 문서가 필요하며 여기서는 주장하지 않습니다.

이 파서에서 `"a \"quote\"",b`는 C 스타일 판독기가 기대할 수 있는 것을 의미하지 않습니다. 왜냐하면 슬래시가 텍스트에 남아 있고 따옴표가 CSV 상태를 제어하기 때문입니다. 반대로, 인용된 필드 내의 이중 쌍은 두 개의 리터럴 문자가 아닌 하나의 인용문이 됩니다.

불일치로 인해 이동된 열 또는 닫히지 않은 따옴표 경고가 트리거되거나 구조적 오류 없이 잘못 보이는 문자열로 구문 분석될 수 있습니다. 대표 행을 미리 보고 생산자와 비교합니다. 구문적 성공만으로는 이스케이프 의미 체계가 일치하는지 확인할 수 없습니다.

ToolAcre 규칙에서 백슬래시는 리터럴로 유지되며 큰따옴표는 유일한 따옴표 이스케이프입니다.

쉼표와 따옴표를 모두 포함하는 셀 하나를 RFC CSV: `"She said ""hi"", then left"`로 작성합니다. ToolAcre는 정확한 값 `She said "hi", then left`을 반환합니다. 대신 백슬래시를 사용하여 내부 인용문을 작성하고 슬래시에는 특별한 보호 기능이 없음을 확인하십시오.

비교에서는 데이터베이스 브랜드에 의존하지 않고 파서 규칙을 보여줍니다. 올바른 구문 분석 후 다운로드하면 큰따옴표가 일관되게 생성됩니다. 일치하지 않는 구문 분석 후 내보내기는 잘못된 셀을 표준화할 뿐이므로 결과를 신뢰하기 전에 소스 방언을 해결하십시오.

여기에 포함되지 않는 내용 — 바이너리 내보내기, 고정 너비 파일 및 완전 사용자 정의 이스케이프 문자

바이너리 내보내기, 고정 너비 레코드 및 사용자 정의 이스케이프 문자가 경로 외부에 있습니다. 닫히지 않은 견적이 보고되고 나머지 입력을 하나의 필드로 사용합니다. 클리너는 누락된 마감이 어디에 속하는지 추론하지 않습니다. 이러한 모호함은 일반적으로 복구될 수 없습니다.

인터페이스는 백슬래시 방언을 자동으로 변환하지 않습니다. 이스케이프 문자의 이름을 명시적으로 지정하는 파서를 사용하고 확인된 문자열 테이블을 얻은 다음 대상 규칙으로 직렬화합니다. 각 문법은 알려진 경계에서 한 번만 적용되어야 합니다.

양쪽 끝의 방언을 파악합니다. ToolAcre CSV Cleaner의 인용 복구가 표준 파서가 읽는 일관된 인용에 대해 필드를 정규화하는 방법

두 끝점을 모두 알고 있습니다. ToolAcre는 소스가 큰따옴표 CSV를 따르거나 다른 파서가 이미 다른 방언을 검증된 셀로 정규화한 경우에 적합합니다. 출력은 일관된 최소 또는 전체 필드 인용을 제공하고 포함된 모든 인용을 두 배로 늘립니다.

방언 감지를 위해 정리된 다운로드를 착각하지 마십시오. 자동 감지기는 이스케이프 문법이 아닌 구분 기호를 선택합니다. 신뢰할 수 있는 전송 기록 구분 기호, 인용 규칙, 개행 정책 및 인코딩을 함께 기록한 다음 프로덕션 데이터가 이동하기 전에 적대적인 샘플을 테스트합니다.