본문으로 건너뛰기

셀 안의 값 구분자 — 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가 얼마나 남았는지를 알 수 있을 때 합니다.