2010年4月19日月曜日

タブ区切りでファイルを読み込む方法 - AWK

AWKの入出力とコマンド実行機能
AWKプログラムを書く
ファイル読み込み時の単語区切り規則を変更したい時は、変数FSを指定します。
o 空のデータを読み飛ばしたくない場合、FS="[\t]"; のように、正規表現で書きます。
   + 文字列として指定します。正規表現の左右にある/は不要です。
   + 普通に FS="\t"; と書いても同じ動きをしますが、FS=" ";と書いた時に予想と異なる動きをしますので、気を付けます。
o 連続したタブを読み飛ばす場合、FS="[\t]+";

**** 例。空のデータを読み飛ばさない書き方
o テストデータ  in.txt
--------
あいうえお    かきくけこ        さしすせそ
--------

  最初の区切りをタブ1つ。次の区切りをタブ2つに置き換えます。

o プログラム  a.awk
--------
BEGIN {
 FS = "[\t]";
}
{
  print "1行分 = " $0; # 「あいうえお    かきくけこ        さしすせそ」
  print "1番目 = " $1; # 「あいうえお」が入ります。
  print "2番目 = " $2; # かきくけこ
  print "3番目 = " $3; # 何も入りません。(= 空データ)
  print "4番目 = " $4; # さしすせそ
}
--------

    + 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
    + 出てくる単語の意味は、「FS = 読み込んだ行を列に分割する時の区切り文字
    + 「RS = 1行読み込む時の改行文字
    + 「print = ファイルなどに書き出す
    + 「FIELDWIDTHS = 固定長ファイルを読み込む為の設定

o 実行コマンド例
--------
gawk -f a.awk in.txt > out.txt
--------



==
関連ページ:
    ▼AWKの入出力関数とコマンド実行機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > AWKでバイナリ出力する(mawk, Gawk専用)
    AWKでバイナリ入力する(Gawk専用)
    > 文字列を組み立てる
    プログラムの基本パターン
(2010年6月8日訂正。FS="\t"の時、データを読み飛ばさない)

ファイルからデータを読み込む方法 - AWK

AWKの入出力とコマンド実行機能
AWKプログラムを書く
ファイルを 1行読み込むと、$で始まる変数にデータが入ります。

**** 変数について
o $0 = 1行分のデータが入っています。改行コードは入っていません。
o $1 = 行の最初の単語。初期設定では、半角空白やタブ文字で区切ります。
o $2 = 行の2番目の単語。$3以降も同様です。


**** 例
o テストデータ  in.txt
--------
あいうえお かきくけこ   さしすせそ
--------


o プログラム  a.awk
--------
{
  print "1番目 = " $1; # 「あいうえお」が入ります。
  print "2番目 = " $2; # かきくけこ
  print "3番目 = " $3; # さしすせそ
  print "1行分 = " $0; # あいうえお かきくけこ   さしすせそ
}
--------

    + 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
    + 出てくる単語の意味は、「print = ファイルなどに書き出す
    + 「$0 = 最後に入力したデータ、1行分

o 実行コマンド例
--------
gawk -f a.awk in.txt > out.txt
--------



**** メモ
o 単語の区切り方を変更する時は、変数FSに区切り方を書きます。書式例は「タブ区切りでファイルを読み込む
o 初期設定では、半角空白やタブ文字が2つ以上並んでいる時、読み飛ばします。
o この他に、getline関数を使って読み込む方法もあります。


==
関連ページ:
    ▼AWKの入出力関数とコマンド実行機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > タブ区切りでファイルを読み込む
    AWKでバイナリ出力する(mawk, Gawk専用)
    AWKでバイナリ入力する(Gawk専用)
    +
    文字列を組み立てる

AWKプログラムの基本パターン - AWK

AWKのパターンと制御文
AWKプログラムを書く
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
AWKプログラムは、次の4つの基本パターンを並べて作ります。
ですので、AWKプログラムを読む時は、この4つの基本パターンを意識しながら読むと、イメージが掴み易いです。

(1) ファイルを一行読み込む毎に実行します。実行する条件を書く事も出来ます。
(2) BEGIN = ファイルを読み込む前に実行します
(3) END = プログラムの最後に1度だけ呼び出されます
(4) function = 関数です = 呼ばれた時に実行します

o function は、部品を作る時に使います。
    + 用語としてはパターンには入りませんが、書き方はパターンと同じです。
o AWKは、複数の入力ファイルをまとめて読み込む事が出来ます。
o BEGIN パターンと END パターンは、まとめて読み込むにも、AWKプログラムから1回だけ呼ばれます。


**** 基本パターン
** (1) ファイルを一行読み込む毎に実行します
--------
{
  print "こんにちは。" NR "行さん。"; # NRはこれまでの読み込み行数です。
}

# 条件を書いて、読み込む行を選択する事も出来ます。
$1 == "ミク" {
  print "こんにちは。ミクさん。";
}
--------

o 条件の書き方については「パターンの書式と使い方
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


** (2) BEGIN = ファイルを読み込む前に実行します
--------
BEGIN {
  print "ファイルを読まずに終了します。";
  exit;
}
--------

o 出てくる単語の意味は、「BEGIN = 最初に実行する
    + 「print = ファイルなどに書き出す
    + 「exit = 終了する

** (3) END = プログラムの最後に1度だけ呼び出されます。
o ファイルを最後まで読んだ後に実行します。ファイルを複数指定した時は、全部読み込んだ後に実行します。
--------
END {
  print "全部で" NR "行ありました。";
}
--------

o 出てくる単語の意味は、「END = 最後に実行する


** (4) function = 関数です = 呼ばれた時に実行します
--------
function f_get_price(v1) {
  return (v1 * 100);
}
{
  v_apple = $1;
  print "林檎。" v_apple "個の価格は、" f_get_price(v_apple) "円です。";
}
--------

o 出てくる単語の意味は、「function = 関数を作る
    + 「return = 関数の呼び出し元に戻る


**** メモ
o 1行の処理の途中で次の行に進みたい時は next;
o 「END」以外の場所で exit文を書く場合
  + 「END」を書くと、プログラム終了時に必ず通ります。
  + 「END」の処理を行いたくない時は、「END」の最初で判定して、もう一度exitします。


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3
o Mawk for Windows 1.3.3
o original = the one true awk(updated May 1, 2007)


==
関連ページ:
    ▼AWKのパターンと制御文▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > AWKの関数名と変数名を区別する方法
    ローカル変数を使う
    AWKプログラム実行時に変数を設定する
(2011年2月2日変更。冒頭の説明文の見直し)
(2010年9月27日追加。各例について機能説明ページへのリンク)

Hello, world - AWK

AWKのパターンと制御文
AWKプログラムを書く
定番のプログラムです。お好みに応じて感嘆符など。
o AWKの動かし方については、「AWKプログラムを別ファイルに書いて実行する

**** 例1。print文を使う場合
--------
BEGIN {
  print "Hello, world";
}
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。

**** 例2。printf文を使った場合
--------
BEGIN {
  printf("Hello, world\n");
}
--------



**** メモ
o BEGIN は、ファイルを読み込む前に実行します。
    + 本来の用途は初期設定ですが、普通にプログラムを書きたい時にも便利です。
    + 詳しくは、「BEGIN = 最初に実行する
o print文は自動改行してくれます。
    + 詳しくは、「print = ファイルなどに書き出す
o printf文は、変数を使う時に書式を指定する事が出来ます。(4桁かつ前ゼロ、など)
    + 詳しくは、「printf = 文字列を組み立ててファイルなどに書き出す


==
関連ページ:
    ▼AWKのパターンと制御文▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > AWKプログラムを簡単に書く方法
    AWKで最も短いプログラム
    AWKプログラムの基本パターン
    ファイルからデータを読み込む

catch文の警告を減らす方法 - Visual C#

Visual C#
○2010 Express
catch (ArgumentException e) { のような所で、次のような警告が出る場合
警告: 「変数 'e' は宣言されていますが、使用されませんでした。」

catch文の丸括弧内は、型だけ書く事も出来ます。

--------------------------------
catch (ArgumentException) {
...
}
--------------------------------

C# 言語仕様書(= 英語版の、C# 3.0 Language Specification)に書いてありました。catch文に関する仕様は、8.10 The try statement。245ページあたり。

----引用開始--------
specific-catch-clause:
catch ( class-type identifier(opt) ) block
----引用終了--------


**** メモ
自分で回復処理を書く場合は、「いえ、eは使いませんから」と言いたい所です。そう思って調べてみた所、実は、catch文の丸括弧内は、型だけ書く事も出来たのでした。

# 言語仕様書は、MSDNで入手しました。無料です。(▽2010年4月現在の入手先は、こちらのページの上のほう


**** 確認したバージョン
o Microsoft Visual C# 2010 Express


==
関連ページ:
    ▼Visual C#
    ▼コンピューター・プログラムを作る
    ▼制作メモ
    > Visual C# 2010 ExpressをDVDドライブ無しでオフラインインストールする
    Visual C# 2010 Expressを製品登録する
    Visual C# 2010 Expressにアップデータを適用する