셀 안의 값 구분자 — DefaultDelimiter
한 셀에 값을 여러 개 적을 때 무엇으로 끊는지, 그것을 정하는 자리가 왜 셋인지, 그리고 이 설정의
이름이 ArrayDelimiter에서 바뀐 경위입니다.
1. 문제 — 이름이 쓰임보다 좁아진 것
이 설정의 이름은 ArrayDelimiter였고, 처음에는 정확한 이름이었습니다. 한 셀 안을 나누는 것이
배열 하나뿐이었기 때문입니다.
지금은 그렇지 않습니다.
| 한 셀 안을 나누는 것 | 무엇이 나뉘는지 | 이 설정이 정하는지 |
|---|---|---|
| 배열 컬럼 | 원소 | 예 |
set 셀 | 항목 | 예 |
map 셀(한 셀 형태) | 항목 — 키와 값 사이는 : | 예 |
:sep을 선언한 구조체 | 멤버 | 아니오 — 그 선언이 정합니다 |
| 합성 값 타입 | 성분 | 아니오 — 언제나 쉼표입니다 |
이름이 좁으면 두 가지가 생깁니다. map 셀의 구분자를 찾는 사람이 Array라고 적힌 설정을
지나치고, 그것을 고치는 사람은 배열에만 영향 이 갈 것이라고 읽습니다. 둘 다 이름 하나가 만든
것입니다.
2. 결정 — DefaultDelimiter
결정. recipe 전체 설정과 소스 항목의 설정 모두 DefaultDelimiter입니다.
이름의 두 낱말이 각각 하나씩 정합니다.
| 낱말 | 정하는 것 |
|---|---|
Delimiter | 배열이 아니라 한 셀 안을 나누는 것입니다. 무엇이 나뉘는지는 컬럼의 타입이 정합니다 |
Default | 이것이 유일한 자리가 아닙니다. 타입에 자기 구분자를 적을 수 있습니다 |
Default가 이름에 있어야 하는 이유가 3절입니다.
3. 정하는 자리 셋
구분자를 정할 수 있는 자리가 셋이고, 좁은 쪽이 우선합니다.
| 자리 | 적용 범위 | 적는 곳 |
|---|---|---|
| 합성 값 타입의 쉼표 | 그 타입의 성분 사이 | 고정. 적을 자리가 없습니다 |
구조체 선언의 :sep | 그 타입의 셀 | 스키마 선언 |
소스 항목의 DefaultDelimiter | 그 항목이 읽는 시트 전부 | recipe의 Sources |
recipe의 DefaultDelimiter | 타입에도 항목에도 적히지 않은 나머지 전부 | recipe 최상위 |
세 자리가 각각 다른 것을 정합니다.
:sep과 합성 값의 쉼표는 값의 표기입니다. 좌표를1,2,3으로 적기로 한 타입은 어느 워크북에 있든 쉼표로 적힙니다. 그 사실은 타입에 속하지 시트에 속하지 않습니다.- 소스 항목의 설정은 시트가 어떻게 적혔는지입니다. 한 실행이 읽는 두 벌의 워크북은 다른
사람이 다른 규약으로 채운 것이고, 한쪽이
|를 쓴다고 다른 쪽까지 바꿀 이유가 없습니다. - recipe의 설정은 나머지 전부의 기본값입니다. 대부분의 배열 셀이 여기에 해당합니다.
4. 옛 이름을 읽는 것
이름을 바꾸면 그 이름을 적어 둔 recipe가 있습니다. 이 도구가 쓰는 JSON 라이브러리는 바인딩되지 않는 키를 조용히 무시합니다. 아무 처리도 하지 않으면 이렇게 됩니다.
| recipe에 적힌 것 | 일어나는 일 |
|---|---|
"ArrayDelimiter": "|" | 무시되고 DefaultDelimiter의 기본값 ;로 읽힙니다 |
| 결과 | 1|2|3이 원소 하나인 배열이 됩니다. 실행은 성공하고 아무 보고도 나오지 않습니다 |
이것이 이 도구가 막으려고 존재하는 실패입니다. 그래서 옛 이름을 무시하지 않습니다.
| 경우 | 하는 일 |
|---|---|
| 옛 이름만 적혀 있음 | 읽습니다. 지금 이름으로 고치라는 경고를 함께 냅니다 |
| 지금 이름만 적혀 있음 | 읽습니다 |
| 둘 다 적혀 있음 | 오류입니다. 어느 쪽을 남기려던 것인지는 읽는 쪽이 정할 수 없고, 두 값이 다를 수도 있습니다 |
바꿔치기는 문서에 바인딩되기 전에 일어납니다. 빌드 캐시가 이 문서를 키로 쓰므로, 그 순서 덕분에 나중에 손으로 이름을 고쳐도 캐시 키가 같고 다시 빌드하지 않습니다.
소스 항목의 키도 같이 바뀝니다. 문서의 최상위만이 아니라 전 깊이를 훑습니다 — 두 자리는 고쳐야 하는 사람에게 하나의 개명이기 때문입니다.
5. 남는 것
옛 이름을 언제 지울지는 정하지 않았습니다. 읽어 주는 비용이 표 한 줄이므로 급하지 않고, 지우는 판단은 경고를 보고도 고치지 않은 recipe가 얼마나 남았는지를 알 수 있을 때 합니다.