fs.open

fs.openで、ファイルを開く。

File System | Node.js v11.10.1 Documentation

fs.openは非同期処理になっていて、開いた結果に対する処理はコールバックやラムダ式で書く。
前回は、開くことに成功したが、失敗した場合はどうなるか。

errがtrueなら、"fs.open error!"を出力してみる。

$ vi fs.js
$ ls
fs.js
$ node fs.js
fs.open error!
/home/bg1/project/cloud/github.com/Sample/nodejs/fs/open/src/fs/fs.js:14
    throw err;    // throwでerrを投げる.
    ^

Error: ENOENT: no such file or directory, open 'test.txt'
$

test.txtを作らずに実行したら、fs.openに失敗して、"fs.open error!"を出力して、このようになった。
まあ、これであってるのかわからないが。

Sample/nodejs/fs/open/src/fs at master · bg1bgst333/Sample · GitHub

SetBkColor

SetBkColorは、TextOutなどでテキストを描画するときの背景となる部分の色を設定する。

SetBkColor function | Microsoft Docs

WindowProcのWM_PAINTで、

背景色は青をセットする。
テキストの描画色はこれまで通り赤をセット。

背景は青
背景は青

このように背景は青になった。

Sample/winapi/SetBkColor/SetBkColor/src/SetBkColor at master · bg1bgst333/Sample · GitHub

fs

fsは、ファイルシステム関連モジュール。

File System | Node.js v11.10.1 Documentation

fsモジュールでファイル'test.txt'を開く。

fs.openで'test.txt'を読み込み専用の'r'で開く。
非同期処理になっていて、結果の処理はラムダ式に書く。
エラーが発生したら、errに詳細が格納されるのでerrがtrueなら、例外としてerrを投げる。
そうでない場合は、console.logで"fs.open success!"を出力。
そのあと、fs.closeでファイルディスクリプタfdを閉じる。
これも非同期処理になっていて、結果の処理はラムダ式に書く。
ここもエラーが発生したら、例外としてerrを投げる。

$ vi fs.js
$ vi test.txt
$ ls
fs.js  test.txt
$ cat test.txt
ABCDE
$ node fs.js
fs.open success!
$

test.txtがあれば、このようにファイルを開くことに成功する。

Sample/nodejs/fs/fs/src/fs at master · bg1bgst333/Sample · GitHub

toupper

toupperは、指定された文字がアルファベットの小文字の時、大文字に変換する。

Man page of TOUPPER
C言語関数辞典 - toupper

入力された文字列に小文字があったらすべて大文字に変換してみる。

textのi番目、text[i]をtoupperに渡して、戻り値をtext[i]に代入し直す。

$ vi toupper.c
$ gcc toupper.c -o toupper
$ ./toupper
abc
ABC
$ ./toupper
aBcDe
ABCDE
$ ./toupper
Ab123cD
AB123CD
$ ./toupper
aB1+C2-d3e4
AB1+C2-D3E4
$

このようにすべて大文字になっている。

Sample/c/toupper/toupper/src/toupper at master · bg1bgst333/Sample · GitHub

Console.log

logメソッドで、標準出力、または、ファイルにログを出力する。

Console | Node.js v11.10.1 Documentation

logメソッドの特徴としては、出力書式を指定できることと、複数の変数の内容を並べて出力できることであり、それらを同時に行うこともできる。

普通に文字列1つを出力というこのパターン。

数値10を変数aに入れて1つ出力。

"a = %d"という書式でaを出力。

bに20を代入して、aとbを並べて出力。

aは書式出力で、その後にbが並ぶ。

cに30を代入して、aとbとcを並べて出力。

"a = %d, b = %d"という形式で、aとbを出力し、cもその横に並べる。

$ node console.js
ABCDE
10
a = 10
10 20
a = 10 20
10 20 30
a = 10, b = 20 30
$

複数並べた場合は、スペースが区切り文字となる。

Sample/nodejs/Console/log/src/Console at master · bg1bgst333/Sample · GitHub

OneLang32/OneLang32Console(0, 0, 0, 5/Nishi-Funabashi #5) -スペースもトークンすることにした.

当初は、スペースは読み飛ばすことも考えていたが、ダブルクォートなどの中のスペースは消失させてはいけないし、今後の機能の充実を考えると、スペースをトークンとすることが必要になったので、そのように修正した。

LexicalAnalyzer.cppで、

スペースの時は、それまでの文字列があるならトークンリストに追加して、さらにトークンリストに"<Space>"を追加する。そして、トークンは空の状態にリセットする。

これで、test.1の字句解析をすると、

C:\Project\Cloud\github.com\OneLang32\debug console>OneLang32Console.exe test.1
argv[1] = test.1
CLexicalAnalyzer::Analyze!
----- start -----
ho + ge
foo b/ar
ABC /  XYZ
----- end -----
ho
<Space>
+
<Space>
ge
<CR>
<LF>
foo
<Space>
b
/
ar
<CR>
<LF>
ABC
<Space>
/
<Space>
<Space>
XYZ

C:\Project\Cloud\github.com\OneLang32\debug console>

スペースもトークンのひとつとなる。

-スペースもトークンすることにした. · bg1bgst333/OneLang32@0e4a619 · GitHub

RGB

色の指定に、RGBマクロを使うと、どの色かわかりやすい。

RGB macro | Microsoft Docs

WindowProcのWM_PAINTで、

RGBマクロは、R, G, B, の順に指定する。Rが0xffなのでこれも赤。

赤

赤になっている。

Sample/winapi/RGB/RGB/src/RGB at master · bg1bgst333/Sample · GitHub