엄밀한 원주형

엄밀한 원주형

Unix 파이프의 창시자이자 Unix 전통의 창시자 중 한 명인 Doug McIlroy는 당시 다음과 같이 말했습니다[McIlroy78].

(ii) 각 프로그램의 출력은 알려지지 않은 다른 프로그램의 입력이 될 것으로 예상됩니다. 불필요한 정보로 출력을 복잡하게 만들지 마십시오. 엄격한 열 형식 또는 이진 입력 형식을 피하세요. 대화형 입력을 고집하지 마세요.

엄밀히 말하면 기둥형 데이터는 나에게 좋게 들리므로 그가 의미하는 바를 이해하지 못할 수도 있습니다.

이것이 무엇을 의미하며 왜 나쁜가요?

답변1

내 생각엔 그 사람이 말하는 것 같아조정일반 컬럼 데이터가 아닌 컬럼. 이것이 나의 이해이다엄격하게그래도. 예를 들어:

나쁜:

1    200 3
100  3   400

좋아요:

1 200 3
100 3 400

즉, 사람보다 컴퓨터가 읽기 쉬운 파일을 만듭니다. 항목을 정렬하기 위해 공백을 추가하면 여러분과 제가 이해하기 쉽고 보기 쉬워지지만 구문 분석이 필요한 프로그램에서는 혼란을 줄 수 있습니다.

cut예를 들어, 위 예제 각각의 두 번째 필드를 얻으 려면 첫 번째 필드가 실패합니다.

$ cut -d' ' -f 2 bad


$ cut -d' ' -f 2 good 
200
3

bad파일의 두 번째 필드는 추가 공백으로 인해 공백입니다. 그러나 문서에서 예상한 대로 작동합니다 good.

답변2

엄밀한 원주형

fixed with그리고 ordered columnsVS dynamic width그리고headers

고정폭

이름(7바이트) [공백] 나이(2바이트) [공백] 키(5바이트)

alice   10 150cm 
bob     20 160cm
carol   30 170cm

Alexander지금 나이 40와 키를 추가해야 한다면180cm

alice   10 150cm 
bob     20 160cm
carol   30 170cm
Alexa~1 40 180cm

엄격한 기둥 구조에 맞지 않으며 보다 유연한 기둥 구조를 사용하면 공간이 부족해집니다.

공백으로 구분된 값

공백으로 구분된 값을 사용하면 이러한 문제를 피할 수 있습니다.

alice 10 150cm 
bob 20 160cm
carol 30 170cm
Alexander 40 180cm

공백으로 구분된 값

또는 열을 구분하는 하나 이상의 공백으로 형식을 지정합니다.

alice     10 150cm 
bob       20 160cm
carol     30 170cm
Alexander 40 180cm

공백 수는 중요하지 않기 때문에 필요에 따라 사람이 쉽게 읽을 수 있도록 형식을 지정하거나 파일 밀도를 지정할 수 있습니다. 심지어 Unix 철학의 관점에서도 이 형식은 첫 번째 줄이 공백의 이름인 경우 열 순서나 존재 여부를 강제하지 않습니다. 열 다음에 데이터 공간으로 구분된 파일이 옵니다.

Name      Age Height
alice     10  150cm 
bob       20  160cm
carol     30  170cm
Alexander 40  180cm

그리고

Age Height Name      
10  150cm  alice
20  160cm  bob
30  170cm  carol
40  180cm  Alexander

헤더에 신경 쓰지 않는 추가 열이 있으면 첫 번째 것과 똑같이 작동합니다. 이렇게 하면 더 많은 유연성이 제공됩니다.

Age Height t_shirt_size Name      
10  150cm  S            alice
20  160cm  M            bob
30  170cm  L            carol
40  180cm  XL           Alexander

Name우리는 여전히 , , Age및 을 읽을 수 있으며 , Height우리가 신경 쓰지 않는 헤더가 있는 열을 무시할 수 있습니다. 여전히 객체에 로드됨

[{"Name":"alice",    "Age":10, "Height":"150cm"},
 {"Name":"bob",      "Age":20, "Height":"160cm"},
 {"Name":"carol",    "Age":30, "Height":"170cm"},
 {"Name":"Alexander","Age":40, "Height":"180cm"}]

이러한 규칙으로 인해 CSV와 같은 파일 형식이 생성되었습니다.https://www.rfc-editor.org/rfc/rfc4180

Age,Height,t shirt size,Name      
10,150 cm,S,alice
20,160 cm,M,bob
30,170 cm,L,carol
40,180 cm,XL,Alexander

이를 피함으로써 stringently columnar data알 수 없는 프로그램이 수정되지 않은 프로그램에 입력될 가능성이 높아집니다.

내 프로그램이 데이터를 CSV 형식으로 출력하면 내가 존재하는지조차 모르는 수많은 프로그램이 이를 읽고 플롯할 수 있습니다.

관련 정보