v0.239.0
kanpic v0.239.0
v0.239.0
세미콜론으로 가른 CSV 를 IMPORTDATA 도 표로 읽습니다
소수점을 쉼표로 적는 로케일에서 엑셀은 CSV 를 세미콜론 으로 가릅니다.
쉼표 자리는 이미 소수점이 가져갔기 때문입니다. 독일어·프랑스어 환경에서
"CSV(쉼표로 분리)" 로 내보낸 파일이 정작 이름;금액;메모 인 까닭입니다.
kanpic 에 그런 파일이 들어오는 문은 둘입니다.
- 올리기 — 파일을 끌어다 놓는 가져오기
- 부르기 —
=IMPORTDATA("https://…/price.csv")
같은 파일인데 두 문이 서로 다른 표를 내주었습니다.
올리기는 첫 줄에서 ,·;·\t 를 세어 가장 많은 것으로 갈랐으므로 제대로
읽었습니다. 부르기는 쉼표를 기본으로 두고, 첫 줄에 탭이 있고 쉼표가 없을
때만 탭으로 보았습니다. 세미콜론은 아예 후보가 아니었습니다. 그래서
품목;단가;비고
연필;1200;
는 한 열짜리 글자 덩어리 로 들어앉았습니다. 연필;1200; 이 통째로 A 열의
한 칸입니다. 수가 하나도 없으니 =SUM(A:A) 은 0 을 내놓고, 열을 가리키는
수식은 모두 빈손으로 돌아옵니다. 화면에 오류는 뜨지 않습니다 — 표가 들어왔고,
다만 열이 하나일 뿐이니까요. 파일을 내려받아 올려 보면 멀쩡하니, 무엇이
다른지 알아내기도 어렵습니다.
이제 열을 가르는 규칙은 internal/delimited 한 곳에 있고 두 문이 함께
씁니다. 어느 문으로 들어오든 같은 파일은 같은 표가 됩니다.
따옴표 안의 세미콜론은 글자입니다
규칙을 한데 모으면서 올리기 쪽에 있던 흠도 함께 고쳤습니다. 세는 자가
따옴표 안까지 셌습니다.
id,"가;나;다;라"
1,42
첫 줄의 세미콜론은 셋, 쉼표는 하나입니다. 그래서 쉼표로 가른 파일 전체가
세미콜론으로 갈렸습니다. 헤더의 한 칸이 세미콜론을 여럿 담았다는 것이
까닭의 전부입니다. 이제 따옴표 안은 세지 않으므로 이 파일은 두 열입니다.
- 짝이 맞지 않는 따옴표가 있으면 나머지 줄이 따옴표 안으로 보여 아무것도
세지 않게 되고, 그때는 쉼표로 돌아옵니다. - 수가 같으면 쉼표가 이깁니다(
a,b;c는 쉼표). - 첫 줄만 봅니다. 둘째 줄의 내용이 파일을 가르는 방식을 바꾸지 않습니다.
큰 파일을 올릴 때 첫 줄을 보려고 이십 메가바이트를 통째로 글자로 옮기던
자리도 함께 줄였습니다. 줄 하나만 잘라 넘깁니다.
확인
internal/delimited/delimiter_test.goTestDelimiterFollowsTheFirstLine— 쉼표·세미콜론·탭, 가르는 것이 없는
줄, 따옴표 안의 세미콜론과 쉼표, 짝이 맞지 않는 따옴표, 줄 끝의 CR 까지
열한 가지를 갈라 봅니다
internal/external/fetcher_test.goTestImportDataReadsWhicheverSeparatorCutsTheFile— 증상 그대로,
세미콜론으로 가른 표가 3열로 들어오고1200이 수인지, 따옴표 안의
쉼표가 칸을 가르지 않는지 봅니다. 고치기 전에는 깨지는 시험입니다
internal/importexport/service_test.goTestQuotedSeparatorsDoNotDecideHowTheFileIsCut— 헤더의 따옴표 안
세미콜론이 파일 전체를 가르지 못한다는 것을 못 박습니다
서버 안쪽에서 파일을 읽는 규칙만 바뀌었습니다. 화면과 저장한 문서는 그대로이고
따로 하실 일은 없습니다.
오프라인 설치
이 릴리즈는 웹 자산과 서버 바이너리를 포함한 Docker 이미지 아카이브로 제공됩니다.
sha256sum -c kanpic-v0.239.0.tar.gz.sha256
gzip -dc kanpic-v0.239.0.tar.gz | docker load
docker run --rm -p 8080:8080 \
-e POSTGRES_DSN='postgres://kanpic:password@postgres.internal:5432/kanpic?sslmode=require' \
kanpic:v0.239.0- 필수 런타임 환경 변수:
POSTGRES_DSN - Redis 및 외부 인터넷 연결: 불필요
- 관리자 초기 로그인을 보호하려면
BOOTSTRAP_ADMIN_ID와BOOTSTRAP_ADMIN_PASSWORD를 함께 지정합니다. - 무결성 검증 파일:
kanpic-v0.239.0.tar.gz.sha256