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に出力例)