棚卸しでも、来場者数でも、危ういのは数えている最中ではなく数え終わった直後です。画面には数字が出ているのに、それをどこへどう書き写すかは決まっていない。口で言いながら紙に書く、写真に撮る、あとでまとめて入力する。この受け渡しのところで桁が落ちたり、どの棚の数だったか分からなくなったりします。
数を数える道具は多くありますが、「数えたあとに何が残るか」の作りはそれぞれ違います。ここでは、カウンターの値をCSVとして書き出す実装を一つ読み解きながら、その場の数を後から使える記録に変えるには何が要るのかを整理します。紙のメモや表計算に直接打ち込むやり方との違いも、同じ観点で並べます。
この実装で書き出されるのは、メモリ枠に入っている数だけです。画面の真ん中で動いている今のカウントは、CSVのどこにも現れません。数え終わったら枠に入れる、というひと手間が必ず要る作りです。
不便に見えますが、理由があります。数えている最中の値は一秒ごとに変わります。変わり続けるものに日時を付けても、その日時は何も意味しません。「ここで確定した」という区切りを人が打って初めて、数は記録になります。枠に保存する操作が、その区切りにあたります。
例外がひとつあります。枠の名前か数量をダブルタップすると、その枠とカウントが連携します。連携できるのは同時に1枠だけで、連携している間はカウントが動くたびに枠の数量と保存日時が上書きされます。これは区切りを毎回自動で打つやり方で、確定の手間は消えますが、そのぶん途中の値も全部そこへ書き込まれます。連携解除のボタンで外れます。
ただし連携を付けた瞬間だけは、向きが逆になります。値の入った枠を選べばカウントのほうがその枠の値に置き換わり、空の枠を選べばカウントは0に落ちます。47まで数えている途中で枠をダブルタップすると、その47は画面から消えるということです。直前の値は取り消しで戻せますが、連携中は取り消しも枠に書き戻ります。連携は数え始める前に付けておくのが安全です。
枠は最初に3つあり、最大100まで増やせます。先頭3つには枠削除のボタンが出ず、4つめ以降だけ消せます。つまりCSVのデータ行が0行になることはありません。
1行目が見出し行で、そのあとに枠の数だけ行が続きます。列は4つ、順番は固定です。
| 列 | 見出し | 中身 | 空欄になるとき |
|---|---|---|---|
| 1 | 番号 | 画面の並び順の通し番号(1から) | 空欄なし |
| 2 | 名称 | 付けた名前。未入力なら「メモリ1」などの既定名 | 空欄なし |
| 3 | カウント | その枠に入っている数 | 数量が未設定のとき |
| 4 | 保存日時 | yyyy/MM/dd HH:mm:ss 形式の時刻 | 日時が記録されていないとき |
名称の欄だけは必ず二重引用符で囲まれ、名前の中に二重引用符があれば2つに置き換えられます。そのため名前にカンマを入れても列がずれません。「A棚,缶詰」のような書き方が通ります。カウントと保存日時は囲まれませんが、数字と固定書式なのでカンマが混ざる余地がありません。
日時が年・月・日・時の順に並ぶ形式なのも効きます。この順序なら、文字として並べ替えるだけで時系列順になります。日や月を先に置く形式では、これができません。
ファイル名は「メモリカウント_(数字).csv」で、数字は書き出した瞬間の通し秒数です。固定名にすると、同じ場所へ2回送ったときに上書きされるか、どちらが新しいか分からなくなります。秒ごとに変わる数を付けておけば、同じ秒に2回押さないかぎり重なりません。
ファイルの先頭には3バイトの目印(BOM)が付きます。表計算ソフトはCSVを開くとき文字コードを推測するため、UTF-8だと伝わらないと日本語が化けます。この目印があると迷いません。書き出されたファイルは一時領域に置かれて共有画面に渡されるだけなので、送った先に届いて初めて記録として残ります。
「いつ数えたか」は後から思い出せません。日時の入っていない行は、ただの数の行と変わらなくなります。どの操作で時刻が更新されるかを押さえておきます。
| 操作 | 枠の数量 | 保存日時 |
|---|---|---|
| 「保存」を押す | 今のカウントで上書き | その時刻に更新 |
| 数量を長押しして手入力 | 入力した値になる | その時刻に更新 |
| 値の入った枠に連携を付ける | 変わらない(カウントがその値に置き換わる) | カウントが動けば更新 |
| 空の枠に連携を付ける | 0が入る(カウントも0になる) | その時刻に更新 |
| 連携中にカウントが動く | 動いた値で上書き | 動くたびに更新 |
| 「呼出」を押す | 変わらない | 変わらない |
| 名前を変える | 変わらない | 変わらない |
| 数量を削除する | 未設定に戻る | 消える |
呼出は枠からカウントへ値を戻す向きの操作なので、枠のほうは動きません。名前の変更で時刻が動かないのも筋が通っています。この列は「この数がいつのものか」を答えるためのもので、行を触った時刻ではありません。名前を直しただけで時刻が新しくなれば、その列は嘘をつくことになります。
ただし表の後半は、連携していない枠の話です。連携中は、ボタンでも音量キーでも取り消しでも、カウントが変わる経路すべてで連携枠が上書きされます。連携を付けたまま別のものを数え始めると、前の数は残りません。
1列目の番号は、枠に割り振られた固有の番号ではなく、そのときの並び順から作られます。名前を付けていない枠の既定名も同じで、4番目の枠は「メモリ4」と表示されます。
ここから困ったことが起きます。4番目の枠を消すと、5番目だった枠が4番になり、既定名も「メモリ4」に変わります。先週のCSVの「4, メモリ4」と今日のCSVの「4, メモリ4」が、別のものを指しうるということです。番号は識別子として使えません。
後で突き合わせるつもりがあるなら、数える前に名前を入れておくのが唯一の対策になります。名前は片方の初期化では消えず、CSVでは引用符で守られているので、場所や単位まで含めた書き方ができます。枠は100まで増やせますが、名前のない枠が増えるほど、書き出した表は読めなくなっていきます。
初期化は2種類あり、どちらも長押しで実行します。戻る範囲が違います。
| 項目 | 枠・名称を残して数量のみ初期化 | すべてを初期化 |
|---|---|---|
| カウント | 0 | 0 |
| 増減の4つの値 | 既定に戻る(1/10/−1/−10) | 同じ |
| 音量キー・振動 | すべて有効に戻る | 同じ |
| 枠の数量 | すべて未設定になる(連携枠を除く) | すべて未設定になる |
| 枠の名称 | そのまま残る | 消える |
| 枠の数 | そのまま | 3枠に戻る |
| 保存日時 | 残る(連携枠は更新される) | 消える |
| 連携 | 残る | 外れる |
| 実行前の確認 | なし | あり |
名前まで消えるほうにだけ確認画面があるのは、取り返しがつく範囲の違いです。数量だけの初期化は、名前と枠の並びという「作り直しに時間のかかるもの」を残します。
数量のみの初期化で気をつけること
保存日時は消えません。そのためカウント欄が空で保存日時だけ残る行ができます。読むときは「空欄=まだ一度も数えていない」ではなく「空欄=今は数量が入っていない」と読む必要があります。
連携も外れません。しかもこの初期化はカウントを0に戻すので、その動きを連携が拾います。連携している枠だけは未設定にならず、0と初期化した時刻が書き込まれます(初期化する前からカウントが0だったときは、動きがないので未設定になります)。次に別のものを数えるなら、先に連携解除を押しておきます。
取り消しの操作はカウントの値を1つ前に戻すだけで、枠の中身は戻しません。初期化してしまった名前や数量は、取り消しでは復旧しません。取り消せるのは直近50回分までで、この履歴はアプリを開き直すと消えます。カウントの値そのものは開き直しても残ります。なお画面のテーマ、言語、画面を消さない設定は、どちらの初期化でも戻りません。
やり方ごとに、得意なところと落ちるところがはっきり分かれます。
| 観点 | 紙にメモ | 表計算に直接入力 | カウンターからCSV |
|---|---|---|---|
| 数えながら手が使えるか | 書く間は止まる | 打つ間は止まる | 音量キーで数えられる |
| 時刻 | 自分で書かないと残らない | 自分で入れないと残らない | 保存した操作の時刻が入る |
| 集計への持ち込み | 入力し直しが必要 | そのまま使える | そのまま開ける |
| 列の自由度 | 自由 | 自由 | 4列に固定 |
紙の弱点は、時刻と書き写しです。あとで清書するとき、書いた数を読み違える余地が一段増えます。表計算を直接叩くやり方は列を好きに作れますが、片手で数えながら打つのは無理があります。
CSVの4列は少なく見えますが、少ないことが利点でもあります。列が固定で、日時の書式も一つに決まっているので、機械がそのまま読めます。場所や単位を残したいなら名称の欄に書き込むことになり、カンマを含めても壊れないため、実用上はここで足ります。
結局、その場の数を後から使える記録に変えるのに要るのは、三つだけです。数えた区切りを打つ操作、その区切りに自動で入る時刻、そして番号ではなく名前で引ける見出し。どの道具を使うにしても、この三つが揃っているかを先に確かめておくと、数え終わったあとで困りません。