最下行にデータを追加する

Excelで「最後の行の下にデータを追加する」という子供だましのマクロがある。エクセル屋が狂喜乱舞するネタであろう(と思う)。その証拠にExcelの商売人がこういうことを相変わらず「客引き」のネタにしていることでもわかる。

そんな低度(程度)のものには興味はないが、C言語での「追加」モードについて、昔メモしたものを抜本的に書き直さなければならないことを思い出した。ここで書くデータは、どんどん堆積的に追加していくだけのことが多いから(そのためファイル名は原則として連番)、重複があったり、古いものが生き残っていたりするのはどうしようもない。気がついたときに適宜修正するしかない。

その昔、書いたものに「fopen関数の"a"モード(ccp_0053)」というのがある。以下はその部分への追加修正コメントである。当時(正確な日付は不明)はたぶん「"a"モード」しかよく知らなかったのではないかと思う(この点は下記の「はなしのくずかご」参照)。

そしてその時代はまだまだ[EOF]で終わる古いファイルが多かった時代でもあった。それで「代替的"a"モード」などということを書いていたのではないか。すなわち、「"a"モード」では外観上はそういうファイルに追加はできないからである(外観上はtypeコマンドで確認できないということ)。それで、typeコマンドで確認できるようにいろいろやってみたものである。


この当時はまだパソコン草創期の頃で、ましてC言語がパソコンに入ってきたのはずっと後だった。これは当時の「C言語業界」にもその責任の一端はあるだろうと思う。ちなみに、私のC/C++言語入門はQuick C Ver1.0Turbo C++ Ver1.0である。
当時のパソコンのC言語の本などを見ても、たとえば、MS-C Ver7.0AやQuick C Ver2.0のマニュアルには次のようなことしか書いていなかった時代である。
"a"
ファイルの終端への書き込みモードでオープンします(追加)。ファイルがない場合には、まずファイルを作成します。

"a+"
読み出しと追加の両方のモードでオープンします。ファイルがない場合には、まずファイルを作成します。
- マイクロソフト株式会社監修「Microsoft C/C++ ランタイムライブラリリファレンス Version7」(アスキー)294p -
- マイクロソフト「Microsoft Quick C Compiler C for Yourself」(Microsoft)219p -
市販の本は全部基本的にはMicrosoftのマニュアルの引き写しだから書いてあることもほとんど同じである。たとえば、下記の例。
"a"
追加書き出しモードでテキストファイルをオープンする。追加は既にあるファイルの最後に続けてデータを書き出す。ファイルがなければ新しく作る。

"a+"
更新(読み出し書き出し)モードでテキストファイルをオープンする。追加は既にあるファイルの最後に続けてデータを書き出す。ファイルがなければ新しく作る。
- 椋田實「はじめてのC」(技術評論社)224p -
こういうことしか書いていない時代である。これだけでは両者の違いはほとんどないのと同じである、と思い込むのも無理はない。

「代替的"a"モード」とは、個人的に作った用語である。[EOF]を削除して追加書き込みができるようにするものである。そして末尾に[EOF]を付けない。その意味では下記の「"a+"モード」とも違うわけである。いわば「"a"」と「"a+"」の中間のような動作になる。

なお、「EOFの読み込み(ccp_0037)」というトピックはパソコン系ゴミ本の「涌井良幸・涌井貞美 共著「困ったときのC言語活用100選」(誠文堂新光社)184p」の趣旨不明の作文・デタラメに対するコメントである。これはBASIC小僧が書いたC言語の本で、そのほとんど全部が間違いとデタラメばかり、という重要文化財クラスのゴミ本である。パソコン草創期の平和な時代が思い浮かぶ(笑)。パソコン系ゴミ本のカテゴリーに入れるべきだった(pbkエリア)。

さて、上にあげたように不親切な記述が次のような記述に変わったのは、Windows 95が発売された後に出たVisual C++ Ver4.0のマニュアルからである(と思う)。
VC4 Reference

要点
FILE *fopen( const char *filename, const char *mode );

メモ
最初からこう書かれていれば[EOF]で無用の手間をとらずに済んだものである。
さて、今ではファイルの末尾に[EOF]が付いているファイルはほとんどない。したがって、「"a"」で追加してもほとんど問題はない。
しかし、中には[EOF]で終わっているファイルもある。その時は「"a+"」で追加する。


両者の共通点と相違点


データの追加

さて、このトピックを手直ししたついでに、Excelで「最後の行の下にデータを追加する」というものと似たようなことをC言語でやってみよう。
addfile.exeである。
使い方 : addfile [file1] [file2]
file1 の末尾に file2 を追加するだけのものである。
下の実行例はcsv1.txt の末尾に csv2.txt を追加したものである。


- 2019/03/24 -



今ではテキストファイルに「EOF」が付いているものはほとんどない状況では、普通のテキストファイルのことになる。その意味ではほとんど無意味な検索である。
LOG
49.104.7.213 [18/Nov/2021:13:42:46] tpc_0441 eofがないデータ