스테이지 CSV 60행 중 4행이 비어 있었다. 채우려다 멈췄다.
Table of contents
Open Table of contents
연속으로 비어 있었다
17번부터 20번까지가 비어 있었다. 흩어져 빠진 것이 아니라 연속이었다.
무작위로 빠졌으면 실수지만 연속으로 빠졌으면 이유가 있을 가능성이 높다. 그것이 걸려서 채우기 전에 물어봤다.
왜 비었는지 물어봤다
그 구간은 아직 안 만들었다는 답이었다. 만들 예정이지만 정해진 것이 없었다.
채워 넣었으면 만들어진 것처럼 보였을 것이다. 빈 것과 안 만든 것은 다르고 채우는 순간 그 구분이 사라진다.
안 만든 것으로 표시했다
길이 셋이었다. 적당한 값으로 채우면 만들어진 것처럼 보이고 행을 지우면 번호가 끊기며 안 만든 것으로 표시하면 지금 상태가 그대로 드러난다.
세 번째로 했다. 상태를 StageState 로 두고 화면에서 준비 중으로 표시하며 눌러도 안 들어가게 했다.
행을 지우지 않은 것은 번호 때문이었다. 지우면 16 다음이 21이 되고 나중에 그 구간을 만들 때 번호를 다시 매기게 되는데 저장된 진행 상황이 번호를 쓰고 있어 어긋난다. 비워 두는 것과 없애는 것을 갈라야 했다.
읽는 쪽이 빈 값을 어떻게 다루는지도 봤다. atoi 에 빈 문자열을 주면 0을 돌려주고 실패했다는 말은 없다. 적이 0마리인 스테이지가 그렇게 만들어진다. strtol 은 어디까지 읽었는지를 같이 주므로 그것으로 바꿨다. 준비 중인 것과 데이터가 깨진 것을 나눠서 둘 다 못 들어가되 원인이 구분되게 했다.
다른 파일과 세는 것
스테이지만 그런 것이 아닐 수 있어 다른 CSV 도 awk 로 훑었다.
$ for f in *.csv; do
echo -n "$f "; awk -F',' 'NF<3 || $2=="" {c++} END {print c+0}' "$f"
done
몬스터 쪽에 12개가 비어 있었는데 물어보니 이건 만들었다가 뺀 것이었다. 같은 증상인데 이유가 달랐다. 뺀 것은 아직 아무 데서도 안 쓰고 있어 행을 지우기로 했다.
CSV 를 읽을 때 전체와 준비 중과 깨진 것을 세어 CCLOG 로 찍게도 했다. 숫자가 보이니 준비 중인 것이 줄어드는지가 드러나고 깨진 것이 0이 아니면 봐야 할 일이라는 것이 갈린다. 섞여 있으면 못 알아챈다.
정리
- 빠진 것을 채우기 전에 왜 빠졌는지 본다
- 연속으로 빠져 있으면 무작위로 빠진 것이 아니다
- 적당한 값으로 채우면 만들어진 것처럼 보인다
- 빈 것과 안 만든 것은 다르고 채우면 그 구분이 사라진다
- 안 만든 것을
StageState로 표시해서 지금 상태가 드러나게 한다 - 번호를 쓰는 곳이 있으면 행을 지우지 않는다
atoi는 빈 값을 조용히 0으로 만든다.strtol로 바꿔 구분한다- 준비 중인 것과 깨진 것을 나눠서 세고
CCLOG로 찍는다