緑の中に

緑の中に
国立天文台

1/02/2020

2020年 おめでとうございます! これが私の今の課題です

2020年 おめでとうございます! 

このブロッグを見て下さりありがとうございます!

今年もよろしくお願い申し上げます。


 

上図の解説

■■マイコンでAD変換を行ったデータをRS232Cを通して、TeraTermで受信したlog(ログ teraterm.log なるテキスト)を[メモ帳],[BinEdit],[Cプログラムでの読み込み実行結果] および[Cプログラムの一部]を示しています。

■なぜこの写真を載せたか?
DecimalBASICでteraterm.log なるテキストを読み込むことが出来ません。
現在、この理由を調べる為です。


・TeratermのlogをCプログラムから読むことは出来る。
DecimalBASICからは読めない。 

・メモ帳で開いた写真の通り最初に1行空白があります。この空白を削除して、このteraterm.logを上書き(Over Write)したlog(ログ)としてならDecimalBASICでも読み込みます。

・Binary Editor(バイナリー エディター)を使用して、teraterm.logを開いて調べると、最初に 0D 0A  があります。

 これは、制御コードです。機能としてはCR  LF です。


キャリッジ〔タイプライターの〕
carriage〔用紙を保持しながら移動する部分。〕

carriage return〔【略】CR〕 キャリッジリターン  carriage:運び台、往復台
LF【 Line Feed 】  ラインフィード


意味につてです。タイプライターやプリンターをイメージします。
CRとはヘッドをそのままの行において行頭へ行く動作です。
LFとは行を1行送る動作です。
ヘッドを動作させず、用紙を動作させるとも理解できます。

なぜ、CR  LF なる制御コードが入るのか?
これは新規にファイルを起こした時に入ります。以降、このファイルにAppend(追記)した場合はそれ以降のタイムスタンプとしてデータが追加されていきます。




対策
・最初に、teraterm.log の最初に制御コード以外のダミーデータを入れておく。
 そして、teratermでApeendMode(追記)に設定してあれば、制御コードが入る心配はありません。とにかくファイルの先頭に制御コードが存在することが妨げとなっている様子です。


・制御コード 0D 0A の2バイトを削除する。削除した新たなlog(ログ)を保存しなおす。それも、自動的に行う必要がある。可能なのだろうか?

・DecimalBASICプログラム側のプログラムに問題があるかも?

 しばらく検討します  解決の希望はあるだろうか?




上図
文字集合について UTF-16 で保存しました


 

上図
漢字が化けて表示されます


■ 符号化文字集合の関連 
EUC-JPや、Shift_JIS、UTF-8、UTF-16などは文字符号化方式である。

 「メモ帳」の文字コードは、 ANSI、Unicode、Unicode big endian、
UTF-8 から保存形式が選択できるようになっています。

 ここで、ANSIで保存し直しCプログラムで読み込ませます。どうなるか?


 



上図 期待通りに再現できました 

 


 メモ帳の欄外 下に ANSI が見えます

アンシ【ANSI】[American National Standards Institute]

《American National Standards Institute》米国国家規格協会。

これなら、再現してくれます。