忍者ブログ

copyコマンドとascコード26について

2022年11月30日
ログファイルの集計をやっていると、csvやtxtファイルの結合をやることがある。

そんなときに便利なのがWindowsのcopyコマンド。
コマンド1行で、フォルダ内のファイルを結合してくれる。

今回は、copyコマンドでハマった話。



フォルダ内に複数のcsvファイルがあるとき、
コマンドプロンプトに「copy *.csv xx.csv」と入力すれば
フォルダ内のcsvファイルを結合して、xx.csvというファイル名で保存する。
(事前にcd で該当のフォルダへ移動しておくこと)

通常はこれで問題ないけど、
ファイルによってはsjis以外の文字コードのファイルもあって、
中には、sjisに変換するとchr(26):ascコード26 EndOfFileが紛れ込んでる場合がある。

chr(26)を含むファイルをコピーすると、、
chr(26)以降のファイルをスキップされるのでマジで注意。


対策としては、copy *.csvではなく、copy /b *.csvのようにバイナリ指定すればOK


WinSCPを触るときに、口を酸っぱくして
「バイナリとなっていること」と書いてあるのは
こういう理由だったんだな。。。


実はこの内容知らなくて、
時系列データの一部がなぜか欠損すると思って調べてたどり着いた結果がこれだった。
原因となる文字コードもわからず、手探りで制御文字を置換しては、copyコマンドを試して
chr(26)が原因と分かった次第。

コード表見ても、「SUB」としか書いてないけど、これはマジで要注意!!!


なお、試行錯誤では、以下の記事をベースに文字コード置換スクリプトを作った。
指定したテキストファイルの文字列を置換して、別名保存(上書き)するVBScript


PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字