2010年8月30日月曜日

PROCINFO = AWKのプロセスに関する情報。プロセスIDなど(Gawk専用) - AWK

AWKのパターンと制御文
△(部分対応)Gawk on Windows △(部分対応)Gawk ×mawk32 ×Mawk ×awk
AWKのプロセスに関する情報です。
o Windows版のGawkでは、部分的に対応していました。プロセスIDを取得する事が出来ます。

**** 書式
--------
PROCINFO[ "要素名" ]
--------

o この変数は、Gawkの拡張機能です。
o PROCINFOは配列です。 = 変数です。
o 要素名 -- pid などを指定出来ます。指定出来る値は、機能欄の通りです。


**** 機能
o PROCINFO["pid"] で、実行しているAWKのプロセスIDを取得出来ます。
o Windows版の場合、その他の値は、正しく設定されていない事があります。
o この機能をサポートしていない処理系があります。

o Gawk on Windows 3.1.7の場合
--------
PROCINFO["ppid"] = [0]
PROCINFO["pgrpid"] = [0]
PROCINFO["gid"] = [0]
PROCINFO["egid"] = [0]
PROCINFO["version"] = [3.1.5a]
PROCINFO["FS"] = [FS]
PROCINFO["uid"] = [0]
PROCINFO["euid"] = [0]
PROCINFO["pid"] = [2396]
--------


o Gawk for Windows 3.1.6の場合
--------
PROCINFO["ppid"] = [0]
PROCINFO["pgrpid"] = [0]
PROCINFO["gid"] = [0]
PROCINFO["egid"] = [0]
PROCINFO["version"] = [3.1.6]
PROCINFO["FS"] = [FS]
PROCINFO["uid"] = [0]
PROCINFO["euid"] = [0]
PROCINFO["pid"] = [2332]
--------


** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6


**** メモ
o Gawk以外では、外部プログラムを作って呼び出す方法が、きっと一番お手軽です。
   + 親プロセスのプロセスIDを表示するプログラムを作って、getline関数で取得します。
   + もしくは、「親プロセスのプロセスIDを終了コードに設定するプログラムを作って、system関数」でも取得出来そうです。この時は、最大値の時に正しく渡るかどうか、確認する必要がありそうです。

** その他
o 確認に使ったプログラムです。
--------
BEGIN {
  for (i in PROCINFO) {
    print "PROCINFO[\"" i "\"] = [" PROCINFO[i] "]";
  }
}
--------



**** 確認した処理系
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
    ▼制作メモ
    > AWKPATH = コマンドでAWKファイル名を指定する時、ファイルの場所を省略する(Gawk, mawk32専用)
    +
    ENVIRON = 環境変数。読み取り専用
(2010年9月1日変更。メモにあるソースコードを訂正)

2010年8月29日日曜日

RT = 最後に読み込んだ行の改行文字(Gawk専用) - AWK

AWKの入出力関数とコマンド実行機能
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
1行読み込んだ時に実際に行を区切った文字、もしくは文字列が入っています。

**** 書式
--------
RT
--------

o この変数は、Gawkの拡張機能です。
o RTは変数です。


**** 使用例
--------
BEGIN {
  RS = "(ミク)|(ネギ)"; # RSを使って、読み込む時の改行文字を指定します。
}
{
  ORS = RT "さん"; # ORSは、書き出す時の改行文字です。「ミクさん」「ネギさん」
  print ;
}
--------

o このサンプルは、大きな文書の変換は苦手です。
   + 「ミク」「ネギ」という単語が出てこないと、文書全部を1行として読み込むからです。
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


**** 機能
o 1行読み込んだ時に、実際に行を区切った文字もしくは文字列が入っています。
o Gawk以外の処理系では、今の所対応していませんでした。
o この機能をサポートしていない処理系があります。

** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6


**** 確認した処理系
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
    ▼制作メモ
    > FNR = 現在読み込み中のファイルから読み込んだ行数
    NR = これまでに読み込んだ行数
    ERRNO = 入出力系の最新エラーメッセージ(Gawk専用)
    +
    RS = 1行読み込む時の改行文字
    ORS = printを使って出力する時の改行文字
    ▼AWKの文字列操作関数と関連機能

2010年8月26日木曜日

AWKプログラムを速く動かす方法 - AWK

AWKプログラムを動かす
お気に入りのAWKプログラムを毎日実行していて、「もう少し速く動かしたいなあ」と思った事はありませんか。
その時には、次のような方法を使う事が出来そうです。


**** 手順
** 書き方を工夫する方法
o AWKにとって無駄な処理が少なくなるように書くと、概ね速くなります。
o 処理系によっては、得意な処理や不得意な処理があります。ですので、特定の処理系に特化して高速化する事も出来ます。
   + 例えば、文字列の連結について、Gawk on Windows 3.1.7では sprintfよりも値を並べる方が速かったです
   + 特定の処理系に特化する方法は、将来のバージョンでも有効とは限りません。

** 時間のかかる部分だけ、他のプログラムを呼び出す方法
o 遅い部分を、その処理が得意なプログラムや言語に任せてしまう方法です。
o 大きく分けて、2種類の方法があります。
o バッチファイル(Windows)やスクリプトから、AWKと他のプログラムを別々に呼び出す方法
   + お手軽なのは、AWKの実行結果をファイルに保存してから、別プログラムにファイルを渡す方法です。
      + 途中でファイルが出来ますので、一部分だけ実行する事も簡単に出来ます。
   + AWKで、他のプログラムを呼び出すバッチファイルを作る事も出来ます。
   + パイプを使って、AWKの処理結果を他のプログラムに渡す事も出来ます。
o AWKの内部から、他のプログラムを実行する方法
   + getline関数を使う方法と、system関数を使う方法があります。

** 速いAWK処理系を使う
o おそらく、mawk系が最速です。日本語を扱う場合は、mawk32が有名です。
   + mawk32の入手方法は「Windows版gawk, mawkを入手する方法
o Gawkから移行する場合、3点に注意します。
   + 文字列操作関数は、1バイトを1文字として数えます。日本語を使う場合は要注意です。
   + 数値計算関数に「有効範囲の限界に近い値」や「想定外の値」を渡すと、強制終了する事があります。
        + 詳しくは「数値計算関数使用時の注意点まとめ
   + Gawkの便利機能や各種文字コード対応機能は、使えなくなります。

** AWKから他言語に、ソースコードを移植する
o 自分で書き換える他、変換補助ツールも出ていました。
o AWK to Perl (a2p) / C (awkaなど) / C++ (An AWK to C++ Translator) を見かけました。
o 詳しくは、「AWKプログラムを他の言語に変換する方法。AWK to Perl, C, C++


**** メモ
o 高速化する事で、処理が分かり難くなる事があります。そのような時は、高速化する利点と欠点を考えて、良くなる方法を検討します。


==
関連ページ:
    ▼AWKプログラムを動かす
    ▼AWKプログラムを書く
    ▼AWK
    ▼制作メモ
    > ▼AWKプログラムを書く
(2010年9月11日追加。参考リンク2点)

AWKプログラムを他の言語に変換する方法。AWK to Perl, C, C++ - AWK

AWKを入手する
「AWKプログラムを、もう少し速くしたいなあ」と思った時、プログラムを他言語に変換してしまう荒業もあります。
to_dkでは試していませんが、AWKについてWeb検索した時に見かけた、他言語への変換ツールや、変換補助ツールについて纏めました。

o 他にもあるかもしれません。見かけた時に追加します。
o 興味のある方はWeb検索。


**** AWKプログラムを他言語に変換するツール
o 配布ページは、全て英語ページでした。
o でも、Web検索すると、日本語で説明しているページが見つかると思います。

** AWK to Perl
o a2p
   + Perlの一部として配布されています。
   + CGIが利用可能なレンタルサーバーには、既に入っているかもしれません。

** AWK to C++
o An AWK to C++ Translator (POSTSCRIPT)
   + (2011年7月現在、リンクが切れているみたいです。)
   + ▽Brian Kernighanのホームページからのダウンロードは、リンクが切れているみたいです。
   + Brian Kernighanさんは、AWKの開発者の1人です。
   + 目的のリンクは、ページの下の方にあります。An AWK to C++ Translator (POSTSCRIPT)

** AWK to C
o ▽Awka for Windows
   + Windows版Awkaの実行ファイルを入手出来ます。
o ▽Awka
   + Awka本家です。ソースコードの提供ですので、自分でビルドして使います。
o その他、活動停止中で、FTPや他の方の改造版を入手する事が出来るものもありました。
   + awkcc -- 現在は、保守されていないみたいです。
   + awk2c -- 現在は、保守されていないみたいです。

o 情報源は ▽comp.lang.awk FAQです。(英語です)
   + ツール使用時の注意事項も、ちらっと書いてありました。
   + 短い文章ですので、英語が苦手な方も、何となく分かると思います。


**** メモ
o 各ツールが変換する時、特定のAWK処理系を想定しているみたいです。
   + ツール想定外の処理系用に作ったAWKプログラムを変換する場合、変換前後に手作業が入る事になると予想します。
o C言語や C++ が使える方は、ソースコードを自分で変換した方が速くなりそうな雰囲気です。
   + 変換ツールは、型を置き換える部分の変換が弱いみたいです。


==
関連ページ:
    ▼AWKを入手する
    ▼AWK
    ▼制作メモ
    > Windows版AWKの配布元一覧(awk, mawk, Gawk)
    AWK本家のホームページの場所
    ▼AWKプログラムを動かす
(2011年7月27日追加。Awka for Windows)

2010年8月25日水曜日

?: = 条件演算子 - AWK

AWKの数値計算関数と関連機能
AWKの文字列操作関数と関連機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
条件によって、2つの内どちらか1つの値を取ります。

o AWKで「三項演算子」と言えば、これの事を指します。3つの値を使う特徴があります。


**** 書式
--------
条件 ? 真の時に取る値 : 偽の時に取る値
--------

o 条件 -- 真偽を判定する式です。
   + 条件式の他に、数値や文字列を使う事も出来ます。
   + 1 や "a"など、何かが入っている時は、真になります。
   + 0 や "" の時は、偽になります。
o 真の時に取る値 -- 数値や文字列を指定します。配列を指定する事は出来ません。
o 偽の時に取る値 -- 数値や文字列を指定します。配列を指定する事は出来ません。


**** 使用例
--------
{
  v = ($0 ~ "ミク") ? "ミクさん" : "青いマフラー"; # 丸括弧は無くても動きます。
  print NR "行目に登場するのは、" v "。";
}
--------

o 2行目の丸括弧は、本来不要です。でも、条件を分かり易くする為に付けました。
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


**** 機能
o 条件によって、2つの内どちらか1つの値を取ります。
o 返す値は、数値や文字列を指定します。配列を指定する事は出来ません。

** 処理系に依存する動作
o 配列を指定した時、処理系によって動作が異なります。
o 配列を返す時だけエラーメッセージを出力する処理系
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6
   + original = the one true awk(updated May 1, 2007)
o 配列を指定した時にエラーメッセージを出力する処理系
   + mawk32 1.3.3
   + Mawk for Windows 1.3.3


**** メモ
o この演算子は、制御文の if に置き換える事も出来ます。
   + どちらを使うかは、お好みで。


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk32 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プログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > ▼AWKの時刻取得機能
    +
    if = 条件に一致したら実行する
    switch = 選択肢を選んで実行する(Gawk専用)
(2010年8月27日追加。ifに置き換える事が出来る)

2010年8月24日火曜日

MAGIX Music Maker 17ドイツ語版登場 - 雑談


ご参考。MAGIX Music Maker 17の宣伝動画(MAGIX公式 on YouTube)
2010年の雑談
MAGIX本家にて、MAGIX Music Maker 17が登場しました。

2011年12月3日追加:
日本語版で登場するのは、次のバージョン(Music Maker MX)です。

新機能の注目点は、Vitaで追加された、特定楽器の専用インターフェイス。(1:12あたりから)
例えば、ピアノの場合、VIta Century Keysを使うと、蓋の開閉を簡単調節出来るようになります。
他にも、Vita Space Padや VIta Jazz Drumsなど、全部で4種追加されているみたいです。

詳しくは、▽Music Makerの米国版ページへ


**** メモ
o 動作環境を見ると、64ビットに正式対応
o 対応OSは、Windows XP / Vista / 7。32ビット / 64ビット両対応との事です。


==
関連ページ:
    ▼2010年の雑談
    ▼お知らせなど
    ▼目次
    > コンピューター・プログラミングを扱ったアニメ
    YouTube。投稿出来る動画の長さを15分に延長
    クレオフーガ。天気に関する楽曲募集。2010年8月8日まで
    +
    ▼制作メモ - Music Maker
(2011年12月3日変更。日本語版は、Music Maker MXを採用決定)
(2011年8月19日変更。次期バージョン登場に伴うコンテンツ変更対応)
(2011年1月10日追加。64ビット正式対応)

AWKの関数、変数、制御文(ABC順) - AWK

AWKプログラムを書く
▼数値計算(ABC順)
▼文字列操作(ABC順)
▼時刻取得(ABC順)
▼入出力とコマンド実行(ABC順)
▼パターンと制御文(ABC順)
▼配列操作(ABC順)
▼正規表現

--------
o 先頭の文字で行を分けました。
o 大文字の機能は変数です。小文字の機能は関数です。

o リンクが無い所は、未調査の機能です。
    + 未調査の機能は全て、Gawkの国際化対応機能 i18nです。
    + Windows版のAWKでは、おそらく未サポートの機能です。


==
関連ページ:
    ▼AWKプログラムを書く
    ▼AWKプログラムを動かす
    ▼AWK
    ▼制作メモ
    > Gawkに付属しているサンプルプログラムの場所
    ▼AWKの関数、変数、制御文(目的別)

2010年8月21日土曜日

IGNORECASE = 文字列比較で大文字小文字を区別させない(Gawk専用) - AWK

AWKの文字列操作関数と関連機能
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
文字列比較で大文字小文字を区別したくない時に、設定します。


**** 書式
--------
IGNORECASE
もしくは
IGNORECASE= 区別しない時は1
--------

o この変数は、Gawkの拡張機能です。
o IGNORECASEは変数です。
o 区別しない時は1 -- 0や空文字("")の時 = 大文字小文字を区別します / 1など、それ以外の時 = 大文字小文字を区別しません。
   + 全角文字の「A」と「a」も区別しません。詳しくは、機能の説明の通りです。


**** 使用例
--------
BEGIN {
  IGNORECASE = 1;
  if ("MIKUさん" == "mikuさん") {
    print "今実行している処理系は、Gawkです。";
  }
}
--------

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


**** 機能
o 文字列比較で大文字小文字を区別させたくない時に使います。
   + 文字列の単純比較の他に、正規表現や文字列関数の動作も変わります。

o IGNORECASE = 0や空文字("")の時、大文字小文字を区別します。
   + Gawkの初期値です。
o 上記以外の時 = 次の文字について、大文字小文字を区別しません。
   + 半角のアルファベット。「A」と「a」は同じだと判定します。
   + 全角のアルファベット。「A」と「a」は同じだと判定します。

o IGNORECASEの設定で判定が変わるのは、全角文字同士、半角文字同士の場合だけです。
   + 全角の「A」と半角の「A」は常に区別します。
   + 全角の「a」と半角の「a」も常に区別します。


**** 確認した処理系
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の入出力関数とコマンド実行機能
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼目次
    > ?: = 条件演算子
    +
    index = 文字列の登場位置を調べる
    match = 正規表現の登場位置を調べる
    split = 文字列を分割する
    gsub = 文字列を置き換える
    sub = 文字列を、最初の1つだけ置き換える
    gensub = n番目に見つかった文字列を置き換える(Gawk専用)
    FS = 分割する時の区切り文字

2010年8月20日金曜日

BloggerのHTMLカスタマイズに関する公式情報の在り処

Bloggerブログの見栄えを変更する
Bloggerの HTMLカスタマイズは強力です。
「特定のページだけ何かを表示する」といった事も出来ます。

そこで、HTMLカスタマイズしたくなった時に、お世話になった公式ページを纏めました。


**** BloggerのHTMLカスタマイズ関連公式ページ
o ▽Bloggerヘルプの、レイアウト
   + このページの右上に、Blogger専用タグに関する情報があります。
      + レイアウト用ページ要素タグ
      + レイアウト用ウィジット タグ
      + レイアウト データ タグ
   + この他に、変数(というよりも、定数)を宣言する機能もありました。何か応用出来るかもしれません。
      + レイアウト用フォント タグとカラー タグ

o ▽Bloggerのヘルプフォーラム
   + 初めてHTMLカスタマイズに挑戦する方は、最初にこちらを眺めてみる事をおすすめします。
   + 見つけたキーワードでWeb検索してみると、目的の情報が早く見つかる事があります。
   + 間違った情報も混じっていますので、内容は自分で判断します。

o 目的の情報が見つからない時は、見つけたキーワードで Web検索してみる事をおすすめします。
   + 他の方が情報公開しているかもしれません。
   + 英語のページが苦手でない方は、対応する英語のキーワードでも検索してみると、情報を多く入手出来ます。

o なお、HTMLやCSSについては、Web検索すると簡単に見つかります。
   + HTMLの場合、[(タグ名) html]
   + CSSの場合、[(キーワード) css]
   + 例。「div html」「background-color css」
   + 解説ページ以外が上位にヒットする場合は、「リファレンス」などの単語を追加して再検索します。


**** 専門用語の調べ方
o 最初の頃は、ページを1度読んだだけでは、良く分かりませんでした。
o 私の場合は、興味のあるページで分からない語句を見つけたら、Web検索して勉強しました。
   + Web検索結果の見出しを眺めて、おおよその意味を掴みます。
   + 興味があったら、解説ページをクリックする感じです。


==
関連ページ:
    ▼Bloggerブログの見栄えを変更する
    ▼Blogger
    ▼制作メモ
    > Blogger in Draft = Bloggerの最新機能を試用する
    リンク。Bloggerの公式情報
    HTMLの編集やHTMLモードで入力する時に、変換が必要になる記号
    Blogger のスキン(デザイン)を変更する
(2010年8月28日変更。CSSのキーワードはタグ名では無いので訂正)

2010年8月19日木曜日

数値から文字列にする時に、実数を7桁以上表示させる方法 - AWK

AWKの数値計算関数と関連機能
AWKにおける実数の表示は、有効数字6桁までに制限されています。
数値と文字列を並べて書く時や、数値から文字列に自動変換する時も、同様です。
でも、「今時の電卓は12桁です。6桁は少な過ぎます」と思った事はありませんか。

このような時、AWKでは、3つの方法を使う事が出来ます。


**** 手順
o 方法1. printfや sprintf関数を使って、変数を1つずつ変換する方法
o 方法2. 数値から文字列への自動変換規則を変更する方法
o 方法3. 計算方法を工夫する方法(= AWKの限界を超える方法)

** 方法1 printfや sprintf関数を使って、変数を1つずつ変換する方法
o 部分的に表示桁数を変更したい時に、便利です。
--------
printf("今日のラッキーナンバーは %.12g\n", 393393.393393);
または
v = sprintf("了解です。%.12g", 393393.393393);
--------


** 方法2. 数値から文字列への自動変換規則を変更する方法
o AWKは、文字列と並べて出力するだけでも、数値の表示桁数を6桁にしようとします。
o そこで、プログラムの先頭で、数値から文字列への自動変換に関する変数2つ(CONVFMTOFMT)の値を変更しておくと、変換の手間が少なくて済みます。

o 例えば、数値の最大表示桁数(及び、文字列に自動変換する時の最大桁数)を12桁に変更する場合
o 方法2-1。プログラムの最初で設定する方法
--------
BEGIN {
  CONVFMT = "%.12g";
  OFMT = "%.12g";
  #(以下、必要な処理)

  v1 = 123456.789012;
  v1 = v1 ""; # 文字列化。この時使う書式は、変数 CONVFMT
  print v1;

  v2 = 123456.789012;
  print v2; # 数値の出力。この時使う書式は、変数 OFMT
}
--------


o方法2-2。AWKプログラムを実行する時に設定する方法
   + 「 -v」オプションを使います。gawk以外も、書き方は同じです。
   + (Windowsのコマンドプロンプト画面では、「%」をAWKに渡したい時に「%%」と書きます。)
--------
gawk -v CONVFMT=%%.12g -v OFMT=%%.12g -f a.awk in.txt > out.txt
--------

o なお、AWKの数値計算時の有効数字は、最大15桁程度です(= 32ビットOS用にコンパイルした場合)。それよりも長く表示させても、あまり意味がありません。

o 一方、CONVFMTを使った方法が使えない場面もあります。それは、$0$1などの、「$ + 数字」の形になっている変数に入れる時、"%.6g"固定になる場面です。
   + mawkの場合は、$0に実数を直接入れる時だけ起こります。
   + Gawkやオリジナルは、$1、$2などに実数を入れる時も起こります。
   + 問題が起こる時は、一旦、他の変数に入れて文字列化し、その後で $1などに入れると、問題を回避出来ます。
--------
BEGIN {
  CONVFMT = "%.12g";
  OFMT = "%.12g";
}
{
  v = 123456.789012 ""; # 事前に、普通の変数に入れて文字列化します
  $1 = v; # $付きの変数に代入
}
--------



** 方法3.計算方法を工夫する方法(= AWKの限界を超える方法)
o 円周率を100桁以上表示したい時など、AWKの数値計算性能を超えている時は、計算方法を工夫する事で対応出来ます。
   + 整数演算を複数組み合わせて計算する手法があります。
   + 文字列のまま計算するという手法もあります。
   + 計算が遅い部分はC言語などに任せて、計算結果をAWKに(文字列の形で)読み込む、という方法もあります。
o このような用途の場合は、誰かが公開している部品を探してきて使う方が、早く出来そうな気がします。
   + 必要に応じて、部品を修正します。


==
関連ページ:
    ▼AWKの数値計算関数と関連機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > AWKプログラムの中で、8進数や16進数を使う方法
    int = 実数や文字列を整数化する
    strtonum = 10進数、8進数、16進数の文字列を数値に変換する(Gawk専用)
    +
    数値計算関数使用時の注意点まとめ
    文字列操作関数使用時の注意点まとめ
(2010年9月22日追加。$1代入時の注意点で使用例)
(2010年9月8日追加。方法2が使えない場面と回避方法)
(2010年8月27日追加。方法2-1に出力例)

2010年8月18日水曜日

gensub = n番目に見つかった文字列を置き換える(Gawk専用) - AWK

AWKの文字列操作関数と関連機能
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
文字列を置き換えます。n番目に見つかった文字列を置き換える、といった事も出来ます。

o gsubsubとは違って、対象文字列を上書きしない特徴があります。


**** 書式
--------
gensub( 置換する条件, 置換後の文字列, 置換方法 [, 対象文字列] )
--------

o この関数は、Gawkの拡張機能です。
o 置換する条件 -- 正規表現で指定します。左右に/を付けます。例: /ミク/
o 置換後の文字列 -- こちらは、普通の文字列を指定します。例: "Miku"
   + 「\」を使う特殊な指定があります。詳しくは、この説明の少し下
o 置換方法 -- 数字、もしくは「g」や「G」を指定します。
   + 数字を指定した時、n番目に見つかった文字列だけを置き換えます。
   + 「g」や「G」を指定した時、見つかった文字列を全部置き換えます。
o 対象文字列 -- 文字列や数値です。省略すると、変数 $0を使います。
   + この関数は、対象文字列を上書きしません。(= gsubsub とは異なります)
o 戻り値 -- 置換結果の文字列

** 数値の使用について
o 文字列を指定する所は、数値も指定出来ます。
   + 6桁を超える数値を指定する時は、数値から文字列に自動変換する時の最大桁数を増やします。
   + (変数CONVFMTを使用)

** 「置換後の文字列」の特殊な指定について
o 置換する条件の一部を丸括弧で括ると、「\\」+番号で使用出来ます。
   + (\\0はいつでも使用できます。)
--------
v = gensub(/(ルカ)(.+)(ミク)(.+)/, "\\3\\4\\1\\2", "g", "ルカ様ミクさん");
print v; # 結果は、ミクさんルカ様
--------

   + \\0 = 置換する条件に一致した文字列
   + \\1 = 置換する条件に一致した文字列の内、最初の丸括弧で括った部分
   + \\2 = 置換する条件に一致した文字列の内、2番目の丸括弧で括った部分
   + \\9 = 置換する条件に一致した文字列の内、9番目の丸括弧で括った部分
   + (10番目以降は非サポートです。)


**** 使用例
--------
BEGIN {
  print gensub(/ミク/, "Miku", 2, "ミクさん、ミクさん。"); # ミクさん、Mikuさん
  print gensub(/ミク/, "Miku", "g", "ミクさん、ミクさん。"); # Mikuさん、Mikuさん
  print gensub(/ミク/, "Miku", "GMiku", "ミクさん、ミクさん。"); # g と同じです。
  print gensub(/39/, "ミク", 2, 39.39); # 39.ミク
}
{
  print gensub(/ミク/, "Miku", "g"); # 対象文字列の指定が無い時は、$0を置換します。
  print gensub(/(ミク)さん/, "\\0\\1みく", "g"); # ミクさんミクみく
}
--------

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


**** 機能
o 指定した条件で、文字列や数値を置き換えます。
o gsubsubと異なり、対象文字列を直接変更する事はしません。
o 対象文字列を省略すると、変数 $0を使います。
o 見つかった所を置き換えて、置き換えた結果を返します。

o 文字列の代わりに数値を指定すると、数値を文字列に変換してから使用します。
   + 長い整数を指定すると、最後の方の桁が0になったり、浮動小数点形式になります。
   + 実数を指定すると、6桁までに丸めたり、浮動小数点形式になります。
   + この動作は変える事も出来ます。詳しくは、「数値から文字列にする時に、実数を7桁以上表示させる方法

o この他、置換方法に「1以上の整数、g、G」以外の文字(例えばM)を指定すると、最初に見つかった文字列だけを置換します。
o この機能をサポートしていない処理系があります。


** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6


**** メモ
o \\10を指定した時、Gawkは \\1 + "0" と解釈して実行します。

o AWKプログラム
--------
BEGIN {
  print gensub(/(1)(2)(3)(4)(5)(6)(7)(8)(9)(0)/, "\\10", "g", "z1234567890z");
  print gensub(/(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)/, "\\10", "g", "z12345678910z");
  print gensub(/(1)(2)(3)(4)(5)(6)(7)(8)(9)(210)/, "\\10", "g", "z123456789210z");
  print gensub(/(A)(B)(C)(D)(E)(F)(G)(H)(I)(a)/, "\\10", "g", "zABCDEFGHIaz");
}
--------

o 実行結果
--------
z10z
z10z
z10z
zA0z
--------



**** 確認した処理系
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
    ▼制作メモ
    > toupper = アルファベットを大文字にする
    tolower = アルファベットを小文字にする
    $0 = 最後に入力したデータ、1行分
    +
    gsub = 文字列を置き換える
    sub = 文字列を、最初の1つだけ置き換える
    CONVFMT = 数値を文字列に自動変換する時の書式
    IGNORECASE = 文字列比較の時に、大文字小文字を区別させない(Gawk専用)
(2010年9月28日訂正。\\数字で使用出来るのは\\9まで)

2010年8月17日火曜日

文字列操作関数使用時の注意点まとめ - AWK

AWKの文字列操作関数と関連機能

**** 処理系共通の注意点
o 「\」は、特殊文字を書く為のキーワードです。(例。「\n」は改行コード)
   + 文字列の中に「\」を含めたい時は、「\\」と書きます。
   + 但し、Gawkの gensub 関数を使う時は、「\\数字」が意味を持つ場所もありますので、注意します。
o 特定の関数で、「&」が特別な意味を持つ場所があります。(gsub / sub
   + 「&」が特別な意味を持つ場所で「&」を含めたい時は、「\\&」と書きます。

o gsub 関数は、対象文字列の途中に改行コードが含まれていると、改行コード以降は置き換えないみたいです。
   + 少なくとも、正規表現の「^」(= チルダ)は文字列の先頭のみを置き換えます。
o split 関数の区切り文字で「\」自身を指定する時、"[\\]" と書く事は出来ません。
   + "[\\\\]" もしくは "\\" や "\\\\" を使います。

o 実数を文字列操作関数に渡すと、本処理の前に、7桁目を丸める傾向がありました。
   + 変換する桁数を簡単に増やしたい時は、変数CONVFMTを使います。
   + もしくは、sprintfを使って、特定の変数だけ有効桁数を変える事も出来ます。
   + 詳しくは、「数値から文字列にする時に、実数を7桁以上表示させる方法
o 文字列比較などの場面で、値を数値だと認識されてしまった時は、文字列化する必要があります。
   + 「v = v ""」のように、空文字を並べて書く方法
   + sprintf関数を使う方法
   + 7桁以上の実数を表示したい時は、「数値から文字列にする時に、実数を7桁以上表示させる方法

o 漢字などの全角文字で原因不明のエラーになる場合
   + 最初に、文法誤りの可能性を疑います。
   + 多くの場合、AWKプログラムと入力ファイルの文字コードを適切にすると、解決します。
      + Windows版のmawkとオリジナルは、Shift-JIS以外は対応していません。
   + Gawkの場合、システムの言語設定を一時的に合わせる方法もあります。
      + Gawk on Windowsの場合は、オプションで設定する事が出来ます。
      + Windowsとは関係がありませんが、UNIXの言語設定について
         + 現在の言語設定を確認する方法は「locale = UNIXで地域設定(ロケール)について確認する方法
         + UNIXの場合、ウィンドウ1つに対して言語設定を変更する事が出来ます。
   + 16進数などの特殊文字を使って表現すると、回避出来る事があります。
   + 文字コードを自動判定するような処理系の場合は、コメントで回避出来るかもしれません。
      + 例えば、Shift-JISの場合は、# あいうえお を最初の方に入れるなど
      + これは、古いブラウザーに対する文字化け回避の手法です。文字コード特有の文字を入れる事で、誤判定を防ぐ効果があります。
--------
# あいうえお
BEGIN {
  print "テストです。";
}
--------



**** 特定の処理系に関する注意点
** Gawk系特有の動作
o Gawk on Windows (3.1.7)で測定した所、sprintfの動作が、mawkや下の方法の9倍程度遅かったです。測定結果は「速度比較。文字列の組み立て
   + 動作が遅いと思ったら、文字列(と数値)の連結を、文字列などを並べる方法に変えてみると、改善するかもしれません。間に半角空白を入れます。
--------
BEGIN {
  n = 39;
  name = "ミク";
  v = n "番の" name "さん。";
  # Gawkの場合、次の文よりもn倍速いです。v = sprintf("%d番の%sさん", n, name);

  print v;
}
--------


o この他、UTF-8ファイルの読み込み1行目で、文字列操作関数の返す値が変な時は、UNICODE特有の見えない文字(BOM)が悪さをしているかもしれません。詳しくは「GawkでUTF-8のファイルを読み込む時の注意点

** mawk系特有の動作
o 全角文字の場合、文字数をバイト数で数えます。
o Mawk for Windowsについては、全角文字に対応していない関数があります。(sub / gsub / toupperなど)
   + 例えば、「表」を「\\」(= \の事です)で検索すると、「表」の後半部分で一致します。

** オリジナルAWK特有の動作
o 全角文字の場合、文字数をバイト数で数えます。
o 処理系自体が、日本語に対応していないみたいです。
   + 例えば、v = "表ミクさん表表"; print v; で文字化けします。


==
関連ページ:
    ▼AWKの文字列操作関数と関連機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > 文字列を組み立てる
    文字列から文字を1つずつ取り出す
    文字列中で使用出来る特殊文字
    +
    配列を使う時の注意点まとめ
(2011年8月22日追加。split関数の区切り文字に「\」を指定する方法)
(2010年10月28日追加。文字コードを自動判定する処理系が誤判定する時の回避案)
(2010年10月22日追加。特殊文字へのリンクと、全角文字でエラーになった時)
(2010年8月23日追加。「\」と「&」)

Gawkで、UTF-8のファイルからBOMを除去する方法 - AWK

AWKの入出力関数とコマンド実行機能
Gawkでは、文字コードがUTF-8のファイルを扱う時は、BOM(UNICODE特有の、見えない文字)が入っていてはいけません。
でも、Windows XPのメモ帳で、UTF-8のファイルをお手軽に作成すると、BOMが必ず入ります。
そこで、BOMを除去する方法について、調べてみました。


**** BOMが入る例
o Windows XP (SP3)のメモ帳で作成し、文字コード UTF-8で保存した時、1行目の先頭にBOM(16進数表記で、EF BB BF)が入ります。


**** 対策方法
o 漢字のような全角文字を一切使っていない場合は、UTF-8ではなく、普通に(ANSIで)保存すると、正しく動きました。
o 他のテキストエディターを使って、BOMを入れないようにする方法もあります。
   + さくらエディタなど、BOMの有無を選択出来るものを選びます。
o 下のようなプログラムを使って、事前にBOMを取り除いてからAWKプログラムを実行するようにする方法もあります。


**** Gawkを使ってBOMを除去する方法(の例)
o 大量のファイルを変換したい時に、便利です。
o 変換用プログラムを作る時のポイントは、2つあります。
   + AWKプログラムを書く時は、日本語を使わず、半角文字だけで書く事
   + メモ帳でのファイルの保存は、UTF-8ではなく、普通に(ANSIで)保存する事

** NoBom.awk -- BOMを除去するAWKプログラムを作ります。
   + エクスプローラーで.awkが表示されない時は、「ファイルの拡張子を変更可能にする方法
--------
{
  if (FNR == 1) {
    sub(/\xef\xbb\xbf/,"");
  }
  print;
}
--------

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

** NoBom.bat -- 実行するバッチファイルを用意します。(例は、Windows用です)
o Gawk on Windows 3.1.7の場合。オプション「 -W ctype=UTF8」を追加します。
   + gawk.exeの部分は、実行したいAWKに置き換えて下さい。
   + このオプションは無くても問題ないみたいですが、念の為追加しました。
--------
if not exist in mkdir in
if not exist out mkdir out
cd in
for %%F in (*.*) do gawk.exe -W ctype=UTF8 -f ..\NoBom.awk "%%F" > ..\out\"%%F"
cd ..
pause
--------


o Gawk for Windows 3.1.6の場合
   + gawk.exeの部分は、実行したいAWKに置き換えて下さい。
--------
if not exist in mkdir in
if not exist out mkdir out
cd in
for %%F in (*.*) do gawk.exe -f ..\NoBom.awk "%%F" > ..\out\"%%F"
cd ..
pause
--------


** 上のバッチファイルを動かします。
   + NoBom.awkと、NoBom.batを、同じ場所に置きます。
   + 最初に一度、NoBom.batを実行します。inフォルダーとoutフォルダーが出来ます。
   + inフォルダーに、UTF-8で作ったAWKプログラムと入力ファイルを入れます。
   + NoBom.batを実行します。黒い画面が出て、最後に止まります。
   + エラーメッセージが出ていない事を確認して、何かキーを押します。
   + 繰り返し使う時は、inフォルダーや outフォルダーの中を、適当に掃除して下さい。


==
関連ページ:
    ▼AWKの入出力関数とコマンド実行機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > getline = ファイル(やパイプ)から1行読み込む
    print = ファイルなどに書き出す
    printf = 文字列を組み立ててファイルなどに書き出す
    +
    GawkでUTF-8のファイルを読み込む時の注意点

2010年8月16日月曜日

GawkでUTF-8のファイルを読み込む時の注意点 - AWK

AWKの入出力とコマンド実行機能
Gawkでは、文字コード UTF-8 のファイルを簡単に扱う事が出来ます。
でも、少し癖がありますので、使う時には気を付けます。


**** Gawkで UTF-8を扱う時の注意点
o Gawk on Windows 3.1.7の場合、Gawkの実行時に、「 -W ctype=UTF8」オプションを追加する必要があります。
o AWKプログラムと入力ファイルの両方の文字コードを、(UTF-8に)合わせる必要があります。
   + 例外は、漢字のような全角文字を一切使っていない場合。この場合は、UTF-8ではなく、普通に(= メモ帳の場合は、ANSIで)保存しても、正しく動きました。
o AWKプログラムと入力ファイルの両方で、UNICODE特有の見えない文字(BOM)を入れてはいけません。
   + 今の所、BOM付きのUTF-8は、Gawkがサポートしていません。
   + AWKプログラムの文字コードがBOM付きのUTF-8の場合、文法エラーになります。
   + 入力ファイルの文字コードがBOM付きのUTF-8の場合、1行目の $0と $1の先頭に、BOMが混入します。
   + 対策方法は「Gawkで、UTF-8のファイルからBOMを除去する方法
o 出力結果をコマンドプロンプト画面(黒い画面)に表示させると、漢字などの全角文字が文字化けしました。
   + Windows XPで確認しました。最新のOSでは、異なるかもしれません。
   + なるべく、半角の英数字や記号を使う事をおすすめします。


**** 確認した処理系
o Gawk on Windows 3.1.7 -- 「 -W ctype=UTF8」オプションが必要
o Gawk for Windows 3.1.6


==
関連ページ:
    ▼AWKの入出力関数とコマンド実行機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > Gawkで、UTF-8のファイルからBOMを除去する
    getline = ファイル(やパイプ)から1行読み込む
    print = ファイルなどに書き出す

2010年8月15日日曜日

Google ドキュメントのドキュメントを完全に削除する方法

Googleドキュメント
ドキュメントを完全に消したい時は、ドキュメントを削除した後、ごみ箱を空にします。


**** ドキュメントを完全に消したい時の手順
** 最初に、ドキュメントを削除します。(= ゴミ箱に入ります)
o Google ドキュメントの最初のページ(= アイテムを管理するページ)を開きます。
o 削除したいドキュメントの左にあるチェックボックスに、チェックを付けます。
o 上に並んでいるメニューから、「削除」をクリックします。
   + 1つだけ消したい時は、ドキュメント名を右クリックして、「削除」を選択する方法もあります。

** ごみ箱も空にします。
o 左にあるメニューから、「ゴミ箱」をクリックします。
o 削除したくないドキュメントを見つけたら、念の為、ゴミ箱から移動させます。
   + そのドキュメントだけにチェックを付けて、「ゴミ箱から戻す」
o 完全に削除したいドキュメントだけにチェックを付けて、「ゴミ箱を空にする」をクリックします。

o チェックを全く付けずに「ゴミ箱を空にする」をクリックすると、次のような質問が現れます。
   + 「ゴミ箱を空にするとゴミ箱内のすべてのアイテムが永久に削除されます。続行しますか?」
   + 「OK」ボタンを押すと、全ファイルを削除します。


==
関連ページ:
    ▼Google ドキュメント
    ▼ホームページを作る
    ▼制作メモ
    Google ドキュメントにログインする
    Google ドキュメントでExcelファイル(xls)を開く
    Googleドキュメントに、ファイルをそのままの形でアップロードする

Google ドキュメントの使い方メモ

ホームページを作る(新着順)
Google ドキュメントにログインする
Google ドキュメントでExcelファイル(xls)を開く
Googleドキュメントに、ファイルをそのままの形でアップロードする
Google ドキュメントのドキュメントを完全に削除する
----
o Google ドキュメントを使っていて、気付いた事をメモします。
o 新機能などの情報は、他の方の記事をご覧下さい。

o Google ドキュメントは、ブラウザーから操作する、ワープロや表計算ソフトなどの無料サービスです。
o ホームページやブログに貼り付ける事も出来るみたいです。


**** 新着
o 2010年9月30日木曜日 Googleドキュメントに、ファイルをそのままの形でアップロードする方法


==
関連ページ:
    ▼ホームページを作る
    ▼制作メモ
    ▼目次
    > ▼ブラウザーを初音ミク
    ▼Bloggerブログ

Google ドキュメントでExcelファイル(xls)を開く方法

Googleドキュメント
少なくとも、3つの方法があります。

o どの方法も大差ありませんが、ファイルの置き場所を変更する時は、方法1が便利だと思います。
o Google ドキュメントにログインする方法は、「Google ドキュメントにログインする方法


**** 手順
** 方法1。直接アップロードする方法
o 左側上方にある「アップロード」ボタンを押します。
o 「ファイルのアップロード」画面に移動しますので、画面中央辺りにある、「アップロードするファイルを選択」リンクを押します。
o アップロードしたいファイルを選択して、右下の「開く」ボタンを押します。
o その下にある見出し「変換オプションを選択」で、次の項目にチェックが入っている事を確認します。
   + 「文書、プレゼンテーション、スプレッドシートを対応する Google ドキュメントの形式に変換する」
o 一番下の左側。アップロード先と、「限定公開」になっている事を確認して、「アップロードを開始」ボタンを押します。
o アップロードしたファイルへのリンクを押すと、アップロードした内容が表示されます。

** 方法2。スプレッドシートにインポートする方法
o 左側上方にある「新規作成」ボタンを押して、「スプレッドシート」を選択します。
o 上のメニューから「ファイル」-「インポート」を選択します。
o 「参照」ボタンを押します。
o 「ファイルのアップロード」画面に移動しますので、アップロードしたいファイルを選択して、右下の「開く」ボタンを押します。
o 「インポート」ボタンを押すと、取り込みが始まります。

** 方法3。スプレッドシートの「開く」を使う方法
o 左側上方にある「新規作成」ボタンを押して、「スプレッドシート」を選択します。
o 上のメニューから「ファイル」-「開く」を選択します。
o 「スプレッドシートを開く」画面が出てきますので、「参照」ボタンを押します。
o 「ファイルのアップロード」画面が出てきますので、アップロードしたいファイルを選択して、右下の「開く」ボタンを押します。
o ドキュメントの取り込みが始まります。
o 取り込みが終わった時に、「ファイルをインポートしました。」と表示されますので、その隣の「開く」リンクを押して、取り込んだ内容を確認します。


**** メモ
o 値だけを並べたスプレッドシートで確認しました。
o マクロなど、高度な機能に対する対応状況は、未確認です。


==
関連ページ:
    ▼Google ドキュメント
    ▼ホームページを作る
    ▼制作メモ
    > Googleドキュメントに、ファイルをそのままの形でアップロードする
    Google ドキュメントのドキュメントを完全に削除する
    Google ドキュメントにログインする

Google ドキュメントにログインする方法

Google ドキュメント
普通にログインする手順です。
o この他に、Google Data APIを使って、プログラムで操作する方法もあります。


**** Google ドキュメントへのログイン手順(2010年8月現在)
** 通常の手順
o ▽Google ドキュメントのホームページを開きます。
o Googleアカウントを持っている方は、右上のボタンの下にあるリンク「ここからログイン」を押します。
   + Googleアカウントを持っていない方は、右上のボタンを押して、Googleアカウントを作ります。
o ログインします。初ログインの時には、姓名の入力も要求されたような気がします。

** BloggerからGoogle ドキュメントに移動する方法
o Bloggerにログインしている時は、複数の方法があります。
   + 上の手順に従う方法
   + アカウント情報を経由する方法
      + Google アカウント情報を経由する方法
      + 右上の「デザイン」を押して、次の画面で右上の「アカウント情報」、更に次の画面で中央辺りにある「ドキュメント」と進みます。
   + その他、▽Googleのサービス一覧などから進む方法もあります。


==
関連ページ:
    ▼Google ドキュメント
    ▼ホームページを作る
    ▼制作メモ
    > Google ドキュメントでExcelファイル(xls)を開く
    Googleドキュメントに、ファイルをそのままの形でアップロードする
    Google ドキュメントのドキュメントを完全に削除する

Microsoft Excelの入っていない所で、Excelファイルの内容を確認する方法 - Windows

Windows
一度困った事があり、調べましたので、メモします。

**** メモ
o Excelの開発元(マイクロソフト社)が公開している、Excel Viewerを使う方法
    + 表示と印刷のみです。編集は出来ないみたいです。
    + 複数のバージョンがあります。私は試していませんが、新しいものが良さそうです。
    + インストールして使います。
    + セキュリティ更新プログラムが出ていますので、一緒に適用します。

    + Excel Viewerは、最新版が出る度にリンク先が変わりますので、リンクを外しました。
    + 最新情報は、検索して確認して下さい。

o Google ドキュメントで、Excelファイル(xls)を開く方法
    + ブラウザーで操作します。
    + Googleアカウントを持っている方なら、こちらの方が簡単です。
    + Google ドキュメントの場合、インターネット公開が簡単に出来てしまいます。確認が終わったら、ドキュメントを削除して、ゴミ箱も空にしておくと安心です。
    + 値だけのファイルは開く事が出来ました。マクロのサポート状況は未確認です。

o 互換機能を持つ製品やフリーウェアを使う方法
    + インストールして使います。
    + 無料の製品もあります。例えば
        + ▽Open Office
        + ▽Gnumeric(= 英語ページです)
    + どちらも、値だけのファイルは開く事が出来ました。マクロのサポート状況は未確認です。


==
関連ページ:
    ▼Windows
    ▼ホームページを作る
    ▼制作メモ
    > 仮想Blu-ray/DVD/CDドライブ = isoファイルなどをドライブ無しで使う
    仮想フロッピーディスクドライブ。Virtual Floppy Driveの使い方
    「ブラウザ」と 「ブラウザー」
    +
    ▼Google ドキュメント

2010年8月14日土曜日

Windowsで使用されている用語の表記方法を確認する方法 - Windows

Windows
「フォルダ」と「フォルダー」、どちらを使って表記するか、悩んだ事はありませんか。
Windowsなど、マイクロソフト社の製品で使われている用語の表記を調べたい時は、マイクロソフト社の専用サイトで調べる方法が簡単です。


**** 手順
o Webページ ▽マイクロソフト | ランゲージ ポータルを開きます。
o 上の方にタブが並んでいますので、「用語検索」や「ダウンロード」を押して使います。
   + 下の方にも項目が並んでいますが、こちらは開発者や企業向けです。

** 用語検索タブの使い方
o 「用語検索」では、単語の翻訳と、使用製品の調査が出来ます。
o 検索対象言語を日本語にすると、実際にその用語が使用されている製品を調べる事が出来ます。
o 例えば「バッファー」で検索すると、Windows Vista以前は「バッファ」と呼ばれていた事が分かります。

** 「ダウンロード」タブの使い方
o 「ダウンロード」では、用語に関する最新の規則集と、長音「ー」の有無に関する用語一覧を入手出来ます。
   + 入手出来るのは、最新版だけです。
o 言語を指定してダウンロードします。英語など、他の言語版をダウンロードする事も出来ます。
o ダウンロードしたzipファイルを展開(= 解凍)します。
o 2つファイルがあります。
   + chmファイルは、用語に関する規則集です。
   + xlsファイルは、長音「ー」の有無に関する用語一覧です。
o xlsファイルには、タブが3つあります。
   + 「変更対象」タブ = Windows Vista以降の製品で、国の推奨表記に合わせようとしている用語です。
   + 「慣例に基づき長音無しのまま」タブ = 国の推奨表記、最後の「ー」を使わない用語です。
   + 「元々長音が付いているもの」タブ = 国の推奨表記に、元から従っている用語です。


==
関連ページ:
    ▼Windows
    ▼ホームページを作る
    ▼制作メモ
    > インターネットで時計を合わせる
    NHKラジオ基礎英語を、ラジオ無しで勉強する
    ラジオ番組を、ラジオ無しで聴く

2010年8月11日水曜日

CONVFMT = 数値を文字列に自動変換する時の書式 - AWK

AWKの数値計算関数と関連機能
AWKの文字列操作関数と関連機能
AWKの入出力関数とコマンド実行機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
数値と文字列を並べて書く時の、数値から文字列への自動変換に使う書式です。

o 但し、printを使って数値1つだけを書き出す時は、変数OFMTで指定した書式を使います。


**** 書式
--------
CONVFMT
もしくは
CONVFMT = "表示用書式"
--------

o CONVFMTは変数です。初期値は"%.6g"、パーセント記号の後ろにピリオドが入っています。
o 表示用書式 -- printfで指定出来る書式の中から、実数を変換出来るものを選びます。例。"%.10g"


**** 使用例
--------
BEGIN {
  CONVFMT = "%.10g";
  print "名前と、食べたケーキの量";
  print "ミクさんは、" 1/3 "個";
  print "リンちゃんは、" 1/3 "個";
  print "レン君は、" "作る時に味見。";
  print "ルカ様は、" 1/3 "個";
}
--------

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


**** 機能
o 数値と文字列を並べて書くと、AWKは、数値から文字列に自動変換します。その時に使う書式です。
   + 数値と数値を並べた時も、CONVFMTを使います。
   + printを使って数値1つだけを書き出す時は、変数OFMTを使います。
o 関数の文字列引数に数値を指定した時も、CONVERTを使って自動変換します。
o 初期値は"%.6g"、パーセント記号の後ろにピリオドが入っています。
o カンマで区切った時は、カンマの間に数値と他の値が並んで入っている所に対して、この書式を使います。
o CONVFMTに従って変換するのは、他の値と連結するように書いた時などです。
   + カンマで区切る場合は、カンマ間に複数の値がある場合、CONVFMTを使って変換します。
   + 関数に渡す時の変換も、CONVFMTを使っていました。
--------
   print "ミクさん" 1/3
   print "ミクさん" 1/3, 1/3 1/3
   v = "ミクさん" 1/3
   v = 1/3 1/3
   v = length(1/3)
--------

o 一方、printで数値を1つだけ指定する時は、CONVFMTの効き目はありません。変数OFMTを使います。


**** メモ
o CONVFMTが正しく動かない時の原因
   + CONVFMTの設定が効いていない様に見える場合 = 変数OFMTにも、CONVFMTと同じ値を入れてみます。
   + 整数の値が変になる = 実数にも対応出来る値を指定します。例外はGawk。変数CONVFMTににおける書式"%d"(整数値で出力)をサポートしている模様です。
   + プログラム実行途中で強制終了する = 変数CONVFMTに、誤った書式"%s"(文字列を出力)を渡すと、処理系によっては起こる事があります。この現象が発生した処理系は、mawk32 1.3.3 / Mawk for Windows 1.3.3 / original = the one true awk(updated May 1, 2007)です。(Gawkでは起こりませんでした。)


**** 確認した処理系
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の入出力関数とコマンド実行機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > ?: = 条件演算子
    > IGNORECASE = 文字列比較の時に、大文字小文字を区別させない(Gawk専用)
    > FIELDWIDTHS = 固定長ファイルを読み込む為の設定
    +
    print = ファイルなどに書き出す
    OFMT = printを使って数値1つだけを書き出す時の書式

OFMT = printを使って数値1つだけを書き出す時の書式 - AWK

AWKの数値計算関数と関連機能
AWKの文字列操作関数と関連機能
AWKの入出力関数とコマンド実行機能
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
printを使って数値1つだけを書き出す時の書式です。

o それ以外の自動変換でも同じ書式を使いたい時は、変数CONVFMTにも同じ値を設定します。


**** 書式
--------
OFMT
もしくは
OFMT = "表示用書式"
--------

o OFMTは変数です。初期値は"%.6g"、パーセント記号の後ろにピリオドが入っています。
o 表示用書式 -- printfで指定出来る書式の中から、実数を変換出来るものを選びます。例。"%.10g"


**** 使用例
--------
BEGIN {
  OFMT = "%.10g";
  print "名前", "食べたケーキの量";
  print "ミクさん", 1/3;
  print "リンちゃん", 1/3;
  print "レン君", "作る時に味見。";
  print "ルカ様", 1/3;
}
--------

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


**** 機能
printを使って数値1つだけを書き出す時の書式です。
   + それ以外の自動変換では、変数CONVFMTを使います。
o 初期値は"%.6g"、パーセント記号の後ろにピリオドが入っています。
o カンマで区切った時は、カンマの間に数値1つだけが入っている所に対して、この書式を使います。
o OFMTに従って変換するのは、printを使って次のように書いた時です。
   + print 1/3;
   + print "ミクさん", 1/3; # カンマで区切る場合は、カンマ間に数値1つだけを指定した所だけ、OFMTを使って変換します。
o 上記以外の書き方では、OFMTの効き目はありません。変数CONVFMTを使います。


**** メモ
o OFMTが正しく動かない時の原因
   + OFMTの設定が効いていない様に見える場合 = 変数CONVFMTにも、OFMTと同じ値を入れてみます。
   + 整数の値が変になる = 実数にも対応出来る値を指定します。例外はGawk。変数CONVFMTににおける書式"%d"(整数値で出力)をサポートしている模様です。


**** 確認した処理系
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の入出力関数とコマンド実行機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > CONVFMT = 数値を文字列に自動変換する時の書式
    ?: = 条件演算子
    IGNORECASE = 文字列比較の時に、大文字小文字を区別させない
    > FIELDWIDTHS = 固定長ファイルを読み込む為の設定(Gawk専用)
    BINMODE = バイナリモードで読み書きする(mawk,Gawk専用)
    +
    print = ファイルなどに書き出す

2010年8月10日火曜日

FIELDWIDTHS = 固定長ファイルを読み込む為の設定(Gawk専用) - AWK

AWKの入出力関数とコマンド実行機能
○(文字数)Gawk on Windows ○(バイト数)Gawk ×mawk32 ×Mawk ×awk
固定長ファイルを読み込む為の設定です。
o Gawk on Windows 3.1.7で使用する時は、少しコツが必要です。

**** 書式
--------
FIELDWIDTHS
もしくは
FIELDWIDTHS = "空白区切りの数字"
--------

o この変数は、Gawkの拡張機能です。
o FIELDWIDTHSは変数です。
o 空白区切りの数字 -- 各列の長さを指定します。例 = "3 9 3"
   + 長さの単位は、処理系によって異なります。


**** 使用例
o 固定長のファイルをタブ区切りに変更する例
    + Gawk on Windows 3.1.7の場合は、「 -Wctype=ASCII」オプションを付けて実行します。
--------
BEGIN {
  FIELDWIDTHS = "3 9 3"; # 読み込みは固定長
  OFS = "\t"; # 書き出しはタブ区切り(printのカンマを変換)
}
{
  for (i = 1; i <= NF; ++i) {
    sub(/^([ \t]| )+/, "", $i); # 先頭の空白文字除去は、お好みで。
    sub(/([ \t]| )+$/, "", $i); # 最後の空白文字を除去します。
    gsub(/\t/, " ", $i); # データの途中にあるタブ文字は、とりあえず半角空白化。
  }
  print $1, $2, $3;
}
--------

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


**** 機能
o この変数を設定すると、次回以降の読み込みを固定長ファイル形式に切り替えます。
   + 関数を使わずに 1行読み込んだ時(= $1などの値を入れる時に使います)
   + getline関数で、読み込んだデータを入れる変数を指定しなかった時(= $1などの値を入れる時に使います)
o 長さの単位は、処理系によって異なります。文字数で数える処理系と、バイト数で数える処理系があります。
o 変数FSと競合します。Gawkが行を読み込む時、最後に設定した方の値を使います。
o 設定を途中で変える事が出来ます。設定した値は、次の行の読み込み時に反映されます。
o この機能をサポートしていない処理系があります。

** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6

o 読み込むファイルに漢字などの全角文字が混じっている場合、処理系によって動きが異なります。
o 文字数で数える処理系
   + Gawk on Windows 3.1.7
   + 但し、バイト数で数えさせるオプションもあります。「 -Wctype=ASCII」を付けて実行します。
   + この時、文字列操作関数が全角文字を2文字と数えますので、mawkと同じように書きます。
o バイト数で数える処理系
   + Gawk for Windows 3.1.6
   + バイト数で数える場合、全角文字の途中で区切らないように注意します。
   + 理由は、全角文字の途中で区切ると、文字が分割されて文字化けするからです。


**** メモ
o 文字化けが起こる場合の原因は、おそらく、バイト単位で数える処理系を使っていて、全角文字の途中で区切ったからです。
o 企業が公開している固定長データの数え方は、おそらくバイト数です。
   + 趣味で作っているような場合は、文字数になっているかもしれません。
o データには半角カタカナが混じっている事もあります。必要に応じて全角カタカナに変換します。
   + 濁点などは要注意。「が」や「ぱ」を半角文字で表現すると、2文字になります。
o この変数は、文字列操作関数のsplit(文字列の分割)には影響を与えません。変数FSとは異なります。


**** 確認した処理系
o Gawk on Windows 3.1.7 -- 数える単位は文字数。「 -Wctype=ASCII」オプションでバイト数
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
    ▼制作メモ
    > BINMODE = バイナリモードで読み書きする
    /inet = AWKからインターネットにアクセスする(Gawk専用)
    /dev/stdout = 標準出力を示すファイル名
    +
    getline = ファイル(やパイプ)から1行読み込む
    FS = 読み込んだ行を列に分割する時の区切り文字
    RS = 1行読み込む時の改行文字
(2010年10月4日変更。Gawk on WindowsのACSIIオプションは、-Wとctypeの間を詰める)
(2010年9月6日変更。Gawk on Windowsの判定を△から○に変更)
(2010年8月10日追加。Gawk on Windowsにバイト数で数えさせる方法)

2010年8月9日月曜日

RLENGTH = match関数で見つけた文字列の長さ - AWK

AWKの文字列操作関数と関連機能
○Gawk on Windows ○Gawk ○(バイト数)mawk32 ○(バイト数)Mawk ○(バイト数)awk
matchで見つけた文字列の長さです。


**** 書式
--------
RLENGTH
--------

o RLENGTHは変数です。


**** 使用例
o 使用例は、「match - 正規表現の登場位置を調べる


**** 機能
o matchで見つけた文字列の長さです。数える単位は実装依存です。
o 見つからなかった時は、-1です。

** 処理系に依存する動作
o 漢字などの全角文字が混じっている場合、処理系によって動きが異なります。
o 文字数で数える処理系
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6
o バイト数で数える処理系
   + mawk MBCS (32bit版) 1.3.3
   + Mawk for Windows 1.3.3
   + original = the one true awk(updated May 1, 2007)

詳しくは「match - 正規表現の登場位置を調べる


**** 確認した処理系
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
    ▼制作メモ
    > FS = 分割する時の区切り文字
    OFMT = printを使って数値1つだけを書き出す時の書式
    CONVFMT = 数値を文字列に自動変換する時の書式
    +
    match = 正規表現の登場位置を調べる
    RSTART = match関数で見つけた文字列の先頭位置

RSTART = match関数で見つけた文字列の先頭位置 - AWK

AWKの文字列操作関数と関連機能
○Gawk on Windows ○Gawk ○(バイト数)mawk32 ○(バイト数)Mawk ○(バイト数)awk
matchで見つけた文字列の先頭位置です。


**** 書式
--------
RSTART
--------

o RSTARTは変数です。

**** 使用例
o 使用例は、「match - 正規表現の登場位置を調べる


**** 機能
o matchで見つけた文字列の先頭位置です。数える単位は実装依存です。
o 見つけた時は、1以上の値が入ります。先頭が1です。
o 見つからなかった時、0 が入ります。

** 処理系に依存する動作
o 漢字などの全角文字が混じっている場合、処理系によって動きが異なります。
o 文字数で数える処理系
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6
o バイト数で数える処理系
   + mawk MBCS (32bit版) 1.3.3
   + Mawk for Windows 1.3.3
   + original = the one true awk(updated May 1, 2007)

詳しくは「match - 正規表現の登場位置を調べる


**** 確認した処理系
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
    ▼制作メモ
    > RLENGTH = match関数で見つけた文字列の長さ
    FS = 分割する時の区切り文字
    OFMT = printを使って数値1つだけを書き出す時の書式
    +
    match = 正規表現の登場位置を調べる

コンピューター・プログラミングを扱ったアニメ - 雑談

2010年の雑談
特に探していませんが、見かけた時に追加します。


**** コンピューター・プログラミングを扱ったアニメ
o ▽よくわかる現代魔法
   + コンピューター・プログラミングで魔法を作る世界の話です。原作は小説です。
   + 原作を知らない方は、2話からご覧になった方が分かり易いかもしれません。
o ▽バトルプログラマーシラセ
   + 青年向け。主人公は、オタクなプログラマーです。

o この他に、ハッキング等、話の展開手段として登場する事があります。


**** メモ
o コンピューター・プログラミングそのものを扱った作品は、今の所、無いみたいです。


==
関連ページ:
    ▼2010年の雑談
    ▼お知らせなど
    ▼目次
    > YouTube。投稿出来る動画の長さを15分に延長
    クレオフーガ。天気に関する楽曲募集。2010年8月8日まで
    zoomeの動画投稿、8月から原則有料化
    +
    ▼コンピューター・プログラムを作る

ARGIND = ARGVにおける現在入力中ファイルの位置(Gawk専用) - AWK

AWKのパターンと制御文
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
変数です。ARGVにおける現在入力中ファイルの位置が入っています。

**** 書式
--------
ARGIND
--------

o この変数は、Gawkの拡張機能です。
o ARGINDは変数です。


**** 使用例
--------
{
  if (FNR == 1) {
    print "現在の入力ファイルは[ " FILENAME " ]です。";
    for (i = 1; i < ARGC - ARGIND; ++i) {
      print "その後の入力予定ファイルその" i " = [" ARGV[ARGIND + i] "]";
    }
    if (ARGC - ARGIND < 2) {
      print "その後の入力予定ファイルは、ありません。";
    }
  }
}
--------

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


**** 機能
o ARGVにおける現在入力中ファイルの位置が入っています。
   + ARGV[ARGIND]は、FILENAMEに相当します。
o BEGINパターンの中では、ARGINDの値は 0 です。
o この値が更新されるのは、次の入力ファイルを読み込む時です。
o この値を変更しても、入力処理は変わりません。
o この機能をサポートしていない処理系があります。

** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6


**** メモ
o ARGINDの動作原理
--------
BEGIN {
  ARGIND = 0; # 最初は、0という値が入っています。
}
FNR == 1 {
  ++ARGIND; # 最初の行を読み込む時に更新されます。
}
--------


o Gawk用に作ったプログラムを他で動かす時の例。関数への置き換えです。
    + ARGCの値が間違っていても、それなりの値を返すようにしました。
--------
function GetARGIND(    tmpi) {
  for (tmpi = ARGC - 1; tmpi > 0; --tmpi) if (ARGV[tmpi] != FILENAME) return tmpi;
  for (tmpi = (ARGC < 1)?0:(ARGC - 1); (tmpi > 0 && ARGV[tmpi] != FILENAME); --tmpi);
  return tmpi;
}
{
  print GetARGIND(); # ARGINDを使っている所を、関数呼び出しに置き換えます。
}
--------



**** 確認した処理系
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
    ▼制作メモ
    > ENVIRON = 環境変数。読み取り専用
    PROCINFO = AWKのプロセスに関する情報。プロセスIDなど(Gawk専用)
    AWKPATH = コマンドでAWKファイル名を指定する時、ファイルの場所を省略する(Gawk, mawk32専用)
    +
    ARGC = ARGVに入っている要素の個数
    ARGV = AWK起動時に指定した入力ファイル名とコマンド名
    FILENAME = 現在入力ファイルの名前
(2010年8月17日変更。使用例が文法エラーになっていたので訂正)

2010年8月8日日曜日

ARGV = AWK起動時に指定した入力ファイル名とコマンド名 - AWK

AWKの入出力関数とコマンド実行機能
AWKのパターンと制御文
△Gawk on Windows △Gawk △mawk32 ○Mawk ○awk
配列です。AWK起動時に指定した、入力ファイル名とコマンド名が入っています。

o 読み込み予定のファイル名を変更する事が出来ます。
o 読み込み予定のファイル増減については、「ARGC = ARGVに入っている要素の個数」の操作が必要です。


**** 書式
--------
ARGV[ 数字 ]
もしくは
ARGV[ 数字 ] = "読み込ませたいファイル名"
--------

o ARGVは変数です。
   + 配列ですので、数字を入れる時「[」や「]」は省略出来ません。
o 数字 = 0の時、コマンド名(注記あり)。1以上かつARGC未満の時、AWK起動時に指定した入力ファイル名
   + 但し、次の処理系では、コマンド名を正しく渡さない事があります。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6
   + mawk32 1.3.3
o 読み込ませたいファイル名 -- まだ読み込んでいないファイルについては、読み込むファイルを変更する事が出来ます。


**** 使用例
--------
BEGIN {
  print "実行コマンド名(多分) = [" ARGV[0] "]";
  for (i = 1; i < ARGC; ++i) {
    print "入力ファイルその" i " = [" ARGV[i] "]";
  }
}
--------

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


**** 機能
o ARGV[0]には、コマンド名相当の値が入っています。内容は、処理系によって異なります。
o ARGV[1] から ARGV[ARGC - 1]までは、AWK実行時に指定した、入力ファイル名が入っています。
o 要素の個数は、変数ARGC に入っています。
o 変数ARGC と一緒に使う事で、入力ファイルを動的に追加、削除する事が出来ます。
   + ARGCを使うと、入力ファイルの読み込み個数を変更できます。+1して指定します。
   + ARGVを使うと、入力ファイル名を変更出来ます。但し、入力ファイル名変更で、現在読み込み中のファイルを切り替える事は出来ません。

** 処理系に依存する動作
o ARGV[0]に設定するコマンド名は、処理系によって、渡し方が異なります。
o 指定された通りコマンド名を設定する処理系
   + Mawk for Windows 1.3.3
   + original = the one true awk(updated May 1, 2007)
o コマンド名として、拡張子を除いたファイル名のみ渡そうとする処理系(最後の「\」の直後から「.」の手前まで)
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6
   + これらの処理系は、ファイル名に2つ以上「.」が含まれていると、正しく切り出しません。
o 設定するコマンド名が、固定の処理系
   + mawk32 1.3.3 -- 「mawk」固定みたいです。
o もしかすると、UNIX版Gawkや、Gawkの古いバージョンでは、動きが異なるかもしれません。
   + The GNU Awk User's Guide の「6.5.3 Using ARGC and ARGV」によると、「ARGVには、一部のコマンドラインオプションも入っています。」との事でした。


**** メモ
o C言語の argvと違って、指定したオプション全てを取得する事は出来ません。


**** 確認した処理系
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プログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > OFS = printを使って書き出す時の列区切り文字
    ORS = printを使って書き出す時の改行文字
    > ARGIND = ARGVにおける現在入力中ファイルの位置(Gawk専用)
    ENVIRON = 環境変数。読み取り専用
    +
    ARGC = ARGVに入っている要素の個数

2010年8月7日土曜日

ARGC = ARGVに入っている要素の個数 - AWK

AWKのパターンと制御文
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○(注記あり)awk
配列 ARGVに入っている要素の個数です。
o この値を減らす事で、読み込み予定のファイルを読み込まない事も出来ます。
o 入力ファイルを増やす時は、この値を増やすと共に、配列ARGVにファイル名を登録します。

**** 書式
--------
ARGC
もしくは
ARGC = 読み込ませたいファイルの数+1
--------

o ARGCは変数です。
o 読み込ませたいファイルの数+1 -- 入力ファイルの数を調節する事が出来ます。
   + これまでに読み込んだファイルの数も数えます。


**** 使用例
--------
BEGIN {
  print "AWK実行時に指定した、入力ファイルの一覧";
  for (i = 1; i < ARGC; ++i) {
    print "入力ファイルその" i " = [" ARGV[i] "]";
  }

  print "入力ファイルを削減する時";
  if (ARGC > 1) {
    --ARGC;
  }
  print "入力ファイルを追加する時";
  ARGV[ARGC++] = "ミクさん語録.txt";

  # 上の文は、ARGV[ARGC] = "ミクさん語録.txt"; ++ARGC; と書く事も出来ます。
}
--------

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


**** 機能
o 配列 ARGVに入っている要素の個数です。
o AWKを起動する時に指定した入力ファイルの数に、1を足したものが入っています。
o この値を増やす事で、入力ファイルを動的に追加する事が出来ます。
   + 同時に、配列 ARGVの最後に入力ファイルを追加します。
o この値を減らす事で、入力ファイルを動的に減らす事も出来ます。


** 処理系に依存する動作
o もしかすると、UNIX版Gawkや、Gawkの古いバージョンでは、動きが異なるかもしれません。
   + The GNU Awk User's Guide の「6.5.3 Using ARGC and ARGV」によると、「ARGVには、一部のコマンドラインオプションも入っています。」との事でした。
o ARGCの値を、現在読み込み中の位置以下に設定した時、動作は処理系によって異なります。
   + 次の処理系では、この値を変更すると直ぐに反映されて、ファイル読み込みを終了します。
      + original = the one true awk(updated May 1, 2007)
   + その他の処理系では、現在の入力ファイルの読み込みが終了してから、ARGCの値を確認 = ファイル読み込み終了します。


**** メモ
o C言語の argcと違って、コマンド実行時に指定した引数を、全部取得する事は出来ません。


**** 確認した処理系
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
    ▼制作メモ
    > ARGV = AWK起動時に指定した入力ファイル名とコマンド名
    ARGIND = ARGVにおける現在入力中ファイルの位置(Gawk専用)
    ENVIRON = 環境変数。読み取り専用

ENVIRON = 環境変数。読み取り専用 - AWK

AWKのパターンと制御文
○(注記あり)Gawk on Windows ○(注記あり)Gawk ○mawk32 ○Mawk ○awk
環境変数です。読み取り専用です。

**** 書式
--------
ENVIRON[ "環境変数の名前" ]
--------

o 環境変数の名前 -- 配列の添え字の形で指定します。
   + 例。 ENVIRON["COMPUTERNAME"]


**** 使用例
--------
BEGIN {
  print "環境変数を全て取得します。";
  for (i in ENVIRON) {
    print "ENVIRON[" i "] = [" ENVIRON[i] "]";
    ++count;
  }
  print "環境変数の数 = " count;
}
--------

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


**** 機能
o 環境変数が入っている変数です。
o 配列になっていますので、環境変数名を添え字にして、取り出します。
o ENVIRONの内容を変更しても、環境変数は変わりません。

** 処理系に依存する動作
o Gawk系では、環境変数 AWKPATHを追加します。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6


**** 確認した処理系
o Gawk on Windows 3.1.7 -- 環境変数 AWKPATHを追加
o Gawk for Windows 3.1.6 -- 環境変数 AWKPATHを追加
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
    ▼制作メモ
    > PROCINFO = AWKのプロセスに関する情報。プロセスIDなど(Gawk専用)
    AWKPATH = コマンドでAWKファイル名を指定する時、ファイルの場所を省略する(Gawk, mawk32専用)
    +
    ARGV = AWK起動時に指定した入力ファイル名とコマンド名

2010年8月5日木曜日

画像や映像を半透明にする方法 - Music Maker

アレンジャー
Music Makerでは、半透明に関して、複数の方法を用意しています。
なお、半透明の画像を作りたい時は、画像編集ソフトを使います。(フリーウェアもあります)
    + 背景を透明にする方法は、「立ち絵を重ねる。透明色と、はめ込み

**** 手順
** アレンジャー上で行う方法
o 素材の赤い横線の中央の点を掴んで、下に動かします。
o 赤い横線の左右の点を掴んで横に動かすと、フェード(= 赤い線が斜めになります)。

** ミキサーを使う方法
o トラック全体に置かれた素材の、透明度(や音量)を一括調節出来ます。
o 音量調節と同じ要領で、縦のつまみを調節します。
   + 0dbが不透明です。下に下げると透明度が上がります。
o 再生しながら調節するのが、ポイントです。
o 詳しくは「ボリューム・フェーダーの使い方」。ミキサーを開く時は、「M」キーを押す方法が簡単です。

** 画像や映像の一部分だけ透明度を変える方法
o Music Maker 3 = 画像については、PNGで作成した半透明画像を読み込みます。
   + 透明色付きPNGの読み込みは、Music Maker 3でサポートされました。
   + 透明色付き動画形式のサポート有無は、未確認です。
o Music Maker (1),2 = Alpha機能を使います。
   + マスク画像や映像を用意して、画像や映像の一部分だけ透明度を変える方法です。
   + Alpha機能の詳細は、「Alphaの用途と使い方。アルファチャンネル」からどうぞ。


**** 透明度を時間変化させる方法
o Music Maker 3 = もしかすると、透明色の動画形式をサポートしているかもしれません。
o Music Maker (1),2 = オートメーションを使います。
   + 透明度に相当する項目は「輝度」ですが、他の項目を組み合わせて実現する事も出来ます。
   + オートメーションの詳細は、「オートメーションの使い方」辺りからどうぞ。


==
関連ページ:
    ▼アレンジャー
    ▼映像素材を並べる
    ▼Music Maker
    ▼制作メモ
    > イラストを輝かせる
    映像のノリの悪さを改善する
    映像の印象を、切り替えタイミングで強調する
    立ち絵を重ねる。透明色と、はめ込み
    Fireworks - 画像を半透明にする
    Flash - 画像を半透明にする

沢山の入力ファイルを簡単に処理する方法 - AWK

AWKプログラムを動かす
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
入力ファイルを1つのフォルダーに纏めて置いて、バッチファイル(Windows)やシェル(UNIX)からAWKを呼び出す方法が、簡単です。


**** 手順例(Windowsの場合)
o フォルダーを2つ作ります。 in と out
o inフォルダーに、処理したいファイルをコピーします。
   + 最初は、1ファイルだけ置く事をおすすめします。以下の手順が成功したら、沢山ファイルを置きます。
o バッチファイルを作成します。ファイル名は、例えば、go.bat
   + .bat が表示されない時は、「ファイルの拡張子を変更可能にする方法

-------- 書き方の例です
cd in
for %%F in (*.txt) do c:\program\gawk.exe -f ..\go.awk %%F > ..\out\%%F
cd ..
pause
--------

   + ファイルの種類に合わせて、*.txt の部分を書き換えます。
   + c:\program\gawk.exe の部分は、いつもAWKを呼び出している時の書き方に、置き換えます。
   + 同じ名前のファイルが嫌な時は、..\out\%%F の部分を、..\out\out%%F などに書き換えます。

o AWKプログラムを作ります。
   + ファイル名は、バッチファイルに書いたファイル名に合わせます。
   + 例の場合は、go.awk。バッチファイルと同じ場所に置きます。
   + オプションが必要になった時は、バッチファイルに追加します。
o バッチファイルを実行します。
   + Windows XPの場合は、黒い画面(コマンドプロンプト画面)が出てきます。
   + エラーの時は、エラーメッセージが画面に表示されます。
o 最後に、「続行するには何かキーを押してください」のようなメッセージが出ますので、何かキーを押します。
o 黒い画面が消えます。outフォルダーにファイルが出来ています。
   + ファイルサイズが0KBの時は、きっと、出力文の書き忘れか、エラーです。


**** メモ
o この例をそのまま使う場合は、outフォルダーや inフォルダーを、適当に掃除して下さい。


**** 確認した処理系
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プログラムを動かす
    ▼AWK
    ▼制作メモ
    > AWKのバージョンを確認する
    Gawkで、オプション一覧を表示する
    Gawkの操作説明書(マニュアル)をオンラインで見る
    ▼AWKプログラムを書く
(2010年8月5日変更。カタカナ用語の長音追加)

ERRNO = 入出力系の最新エラーメッセージ(Gawk専用) - AWK

AWKの入出力関数とコマンド実行機能
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
getlinecloseなど、入出力系の機能を使用した時の、最新エラーメッセージです。

**** 書式
--------
ERRNO
--------

o この変数は、Gawkの拡張機能です。
o ERRNOは変数です。
o ERRNOの値を変更する事も出来ますが、AWKの動作は変わりません。


**** 使用例
--------
BEGIN {
  if ((getline < "ありえないファイル名.tmp") < 0) {
    print ERRNO;
  }
}
--------

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


**** 機能
o getlineやcloseなど、入出力系でエラーが発生した時に、エラーメッセージが入ります。
o エラーが複数回発生した時は、最後のエラーメッセージが入っています。
o 次回、getlineやcloseの呼び出しが成功しても、エラーメッセージは消えません。
o この機能をサポートしていない処理系があります。

** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6


**** メモ
o C言語の errnoには整数値が入りますが、AWKの ERRNOは、文字列です。


**** 確認した処理系
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
    ▼制作メモ
    > FS = 読み込んだ行を列に分割する時の区切り文字
    RS = 1行読み込む時の改行文字
    FILENAME = 現在読み込み中ファイルの名前
(2010年8月16日追加。手動更新した場合)

2010年8月4日水曜日

mind skip - to_dk作品紹介.


動画演出のみ参加作品
私は車で小さな旅に出かけた。


**** メモ
o トヨタのビジュアルミックスコンテストに参加した時に作った作品の一つです。
o 車の魅力の一つ、小さな旅を表現しました。

** 今回勉強したポイント
o 限られた素材と時間で、他の2作品と異なる演出を目指しました。
o 最後の道路標識は、頭の中で描いたシーンよりも、少し遅れてしまいました。


**** 管理情報
o iQ Visual Mix Contest (by Toyota) 参加作品 id=2101530
o 映像作品(曲のスタイルは、テクノ)
o 動画演出のみ参加作品の3作目
o 歌  Tes.
o 使用曲  sky pocket(▽ by Tes.
o 素材利用  楽曲、映像素材共に、コンテスト主催者が提供
o 初出  2009-02-19  on YouTube

**** 公開先
▽on YouTube


==
関連ページ:
    ▼動画演出のみ参加作品一覧
    ▼動画作品を見る
    ▼作品紹介
    ▼目次
    > Bloom,iQ