데이터 및 스프레드시트 · CSV 클리너
RFC 4180 설명: CSV이 공식 표준에 가장 가까운 것
· 배경
CSV rfc-4180 데이터 형식
CSV은 누군가가 기록하기 전부터 수십 년 동안 존재했습니다. 이 게시물은 RFC 4180을 통해 구분 기호, 인용, 줄 끝 및 헤더에 대해 실제로 말하는 내용과 실제 파일이 여전히 이를 무시하는 이유를 설명합니다.
단일 파서가 올바르게 읽히지 않는 두 개의 '유효한' CSV 파일 — 표준 없이 수십 년 동안 형식이 성장한 이유
두 파일은 모두 .csv 확장자를 가질 수 있으며 하나는 세미콜론을 사용하고 다른 탭은 각각 따옴표를 다르게 적용합니다. 구문 분석기는 구두점이 구조가 되기 전에 방언을 알아야 합니다. ToolAcre는 4개의 후보로 시작하여 확장을 신뢰하는 대신 구문 분석된 샘플 모양에 점수를 매깁니다.
이러한 유연성은 "유효한 CSV"이 종종 불완전한 설명인 이유를 설명합니다. 클리너는 일반적인 편차를 수용한 다음 일관된 결과를 직렬화할 수 있습니다. 그 동작은 구성과 테스트에 의해 정의되므로 모든 생산자가 하나의 메모를 완벽하게 따른다고 가정하는 것보다 더 유용한 계약을 제공합니다.
RFC 4180은(는) 구속력 있는 표준이 아닌 일반적인 관행을 문서화하는 2005의 정보 메모입니다.
저장소는 RFC 4180를 출력 규칙으로 반복적으로 명명하지만 메모 날짜나 법적 상태에 대한 역사적 주장의 소스는 아닙니다. 따라서 이 기사에서는 레코드 끝, 인용, 헤더 너비 및 구분 기호 처리 등 구현에 의해 구현된 규칙에 중점을 둡니다.
외부 표준 기록이 중요한 경우 기본 출판물을 별도로 인용하세요. ToolAcre를 사용하는 경우 관련 증거는 로컬입니다. 코드는 기본적으로 CRLF로 설정되고, 구조 문자를 인용하고, 내부 인용 부호를 두 배로 늘리고, 너비가 헤더와 다른 행을 보고합니다.
저장소 증거는 RFC 4180를 대상 규칙으로 사용합니다. 출판 내역이 소스 세트 외부에 있습니다.
구성된 대상은 쉼표로 구분된 출력, CRLF 줄 끝, 선택적 헤더 개념 및 직사각형 행을 설명합니다. 배송된 경로에서 첫 번째 행은 실제로 선택 사항이 아닙니다. 항상 헤더로 사용됩니다. 헤더 없는 파일은 해당 역할에 대한 첫 번째 기록을 잃습니다.
비정형 입력은 거부를 유발하지 않습니다. 짧은 행은 빈 셀로 채워집니다. 긴 행은 추가 항목을 유지하며 둘 다 행 번호가 지정된 경고를 받습니다. 직렬 변환기는 보유된 모든 행을 작성하므로 "깨끗한 출력"은 프로그램이 구조적 불일치를 수정하는 방법을 추측했다는 의미는 아닙니다.
메모에 따른 인용 — 필드를 인용해야 하는 경우와 리터럴 큰따옴표를 두 배로 만드는 방법
선택한 구분 기호, 따옴표 또는 레코드 종료 문자가 포함된 경우 필드를 따옴표로 묶어야 합니다. ToolAcre는 선행 또는 후행 공백을 추가로 인용하므로 다른 파서가 자동으로 공백을 자르지 않습니다. 따옴표 붙은 필드 내에서 각 리터럴 큰따옴표는 두 개의 큰따옴표가 됩니다.
모든 견적 필드 스위치는 통일된 스타일을 요청합니다. 그렇지 않으면 출력이 최소한으로 인용됩니다. 구문 분석된 값이 동일하게 유지되는 동안 중복된 소스 인용문은 사라질 수 있습니다. 이러한 정규화가 예상되며 테스트에서 복구된 테이블과 선택한 예에 대한 정확한 출력을 비교하는 이유가 여기에 있습니다.
text/csv 미디어 유형 - 선택적 헤더 및 문자 세트 매개변수와 이들이 디스크의 파일과 함께 이동하는 경우가 거의 없는 이유
디스크의 파일은 미디어 유형 매개변수가 첨부된 상태로 도착하는 경우가 거의 없습니다. ToolAcre는 선택한 파일에서 `header` 또는 `charset` 매개변수를 읽지 않습니다. 이는 경로 계약(UTF-8 텍스트), 첫 번째 행 헤더 및 지원되는 구분 기호 감지 또는 수동 선택에 의존합니다.
선택적 BOM 내보내기 스위치는 첫 번째 헤더 앞에 U+FEFF를 씁니다. 이는 스프레드시트가 UTF-8을 인식하는 데 도움이 될 수 있지만 구성에서는 제거되지 않을 때 마커가 이름과 결합되기 때문에 엄격한 스크립트 또는 데이터베이스 가져오기가 중단될 수 있다고 경고합니다. 소비자가 요구하지 않는 한 그대로 두십시오.
세상이 갈라지는 곳 - 세미콜론, LF 줄 끝, 불규칙한 행 및 레이블 없는 인코딩, 메모가 이를 허용하지 않는 이유
실제 입력에는 세미콜론, 탭 또는 파이프, LF 또는 단독 CR, 고르지 않은 행 및 선행 UTF-8 BOM이 사용될 수 있습니다. 파서는 의도적으로 모든 줄 끝과 구분 기호 후보를 허용합니다. 이는 비정형 행을 자동으로 "허용"하지 않습니다. 데이터를 보관하고 경고를 첨부합니다.
닫히지 않은 견적은 허용되지만 보고되는 또 다른 조건입니다. 명확한 종료 경계가 존재하지 않기 때문에 여는 따옴표 뒤의 모든 내용은 하나의 필드가 됩니다. 내보내기를 신뢰하기 전에 해당 소스를 수정하세요. 허용된 구문 분석은 입력이 준수하고 있다는 인증이 아니라 보존 전략입니다.
ToolAcre는 비정형 행을 거부하는 대신 보고하면서 여러 가지 실제 편차를 허용합니다.
여기에는 셀에 숫자, 부울 또는 null 유형을 제공하는 규칙이 없습니다. 파서는 문자열을 반환하고 JSON 변환기는 이를 문자열로 유지합니다. 빈 텍스트가 누락되었는지 여부, 숫자 시퀀스가 식별자인지 여부를 포함하여 의미론적 규칙은 발신자와 수신자가 합의해야 합니다.
수식 주입 안전은 CSV 구문 위에 계층화된 내보내기 정책입니다. 활성화되면 위험한 선행 문자는 일반 숫자 형식을 제외하고 아포스트로피를 받습니다. 이는 스프레드시트 안전을 위해 의도적으로 값을 변경합니다. 이는 따옴표 이스케이프 또는 일반 유형 시스템의 일부가 아닙니다.
입력이 이를 무시하는 경우에도 RFC 스타일 출력을 목표로 합니다. ToolAcre CSV Cleaner가 일관된 구분 및 인용을 위해 파일을 복구하는 방법
소스 방언이 다양하더라도 예측 가능한 출력을 목표로 하세요. 경고를 구문 분석하고 해결한 후 ToolAcre는 CRLF 레코드와 표준 큰따옴표 이스케이프를 내보냅니다. 감지된 구분 기호가 세미콜론이나 탭으로 남아 있으면 다운로드 시 항상 쉼표를 강제하는 대신 해당 구분 기호를 유지합니다.
수신 계약서에 쉼표로 구분된 출력이 필요한 경우 수동으로 쉼표를 선택하고 실제로 사용된 구분 기호가 표시되므로 컨트롤을 검사하십시오. 일관성은 CSV 확장자에서만 발생하는 것이 아니라 명시적인 선택과 검토된 행 모양에서 비롯됩니다.