以下のように行頭に記号を入れるだけです。
2.変数の指定
変数の考え方はPHPと一緒で、宣言をしてもしなくても結構です(文の途中でいきなり書いても変数として認識します)。
また、なでしこの変数は属性(文字列、数値等)が動的で、入る値によって属性が変動します。
以下は、変数の宣言をした場合の例です。"(変数名)とは(属性)"という形で指定します。もちろん、宣言をしなくても構いません。
3.インデント
なでしこは、Python等と同じで区切りをインデントで表します。タブやスペースで書いて行く訳ですが全角、半角は問いません。
以下は、インデント例です。"(スペース)コード"、"(タブ)コード"という形で指定します。例文は条件分岐ですが、もしインデントを忘れると一切条件分岐をしなくなります。
文字列の検索
今回は、なでしこを利用して文字列の検索、置換を行います。対象のファイルは何でもいいのですが、青空文庫から芥川龍之介の「愛読書の印象」から抜粋したものを使ってみます。
ワイルドカードを利用する
まずは、なでしこを使った文字列の操作を覚えましょう。以下のプログラムをコピーして、なでしこエディタに貼りつけてください。
また、ここではパスと言う変数に入力データを放り込みます。その入力データを一行ずつ反復して取り出し、西遊記の文字列が存在する行を抜き出し、検索文字という配列変数に積み重ねていくことにします。
ワイルドカードを使う場合の、なでしこの書式は以下の通りです。
この場合、Bに検索したい文字列をあいまい検索のようにワイルドカードを入れて使うと、その条件にマッチしたデータが抽出されます。
このプログラムを実行すると、「西遊記」が含まれる行が抽出されます。「言う」命令を使って画面に表示させてますので、一目瞭然ですね!
複数のキーワードで検索する
次は、「西遊記」と「天路歴程」が含まれている行だけを表示してみましょう。ワイルドカードマッチ命令は、単純に検索したい文字列にアスタリスク(*)を付けるだけなので初心者でも簡単に利用できます。
このプログラムを実行すると、以下のように、天路歴程と西遊記が2つとも入っている行が表示されます。
正規表現を利用する
もうひとつ、「なでしこ」はPerl互換の正規表現もサポートしてます。そのため、他の言語で正規表現を利用したことがあれば、そのままその知識が利用できます。
今回は、先頭に「愛読書」が入っている行だけを正規表現で抜き出してみましょう。他の言語で正規表現を利用したことのある人は、正規表現の便利さがわかるはずです[1]。
正規表現を使う場合の、なでしこの書式は以下の通りです。
この場合、Bに正規表現の書式を入れてあげると、その条件にマッチしたデータが抽出されます。
このプログラムを実行してみましょう。きちんと検索対象の行だけが表示されたはずです。
ファイルの入出力と連動
ここまではデータを直接プログラム内に書きましたが、既存のファイルを読み込んでその中を検索してみましょう。また、表示するだけだと忘れてしまうので、今度はテキストファイルに保存してみることにします。
ファイルを読み込む場合の、なでしこの書式は以下の通りです。
この命令は対象のファイルを一行ずつメモリに読み込みます。ほとんどの場合、反復命令とコンビで使います。そうする事により、読み込んだ後の処理を記述する事ができます。
では、以下の『』内の文章をコピーしてメモ帳に貼り付けてください。そして、Cドライブに「aozora.txt」と言う名前で保存してください。
テキストファイルが保存ができたら、以下のプログラムを作成してください。
プログラムを実行してみましょう。デスクトップ画面に「load.txt」が保存されてますので、マウスでクリックしてみてください。メモ帳が起動して、中が表示されるはずです。
文字列の置換
次は、検索した結果を自分の希望に合わせて置換をしてみましょう。例えば、以下のような書き換えをしてみることにします。
- 「西遊記」を「孫悟空」に書き換えます。
- 「1982/10/08」を「10月8日」に書き換えます。
文字列を置換する場合の、なでしこの書式は以下の通りです。
- 以下の命令は読んで字の如く、対象の文字列をそのまま置換します。
- 以下の命令は正規表現を利用した置換ですので、正規表現の書式にマッチした文字列を置換します。
プログラムは以下のようになります。
後は、このプログラムを実行ファイルにすればOKです。
内容は、「aozora.txt」を読み込んで2つの項目を書き換えて「load2.txt」に上書き保存です。日本語なので処理内容は一目でわかりますし、面倒な宣言も最小限に抑えられてます。もうちょっとコンパクトにまとめたかったのですが、9行程度で収まりました。
今回は、文字列の検索と置換を説明しました。とても簡単であることがわかっていただけたと思います。いかがですか、日本語バッチ?