Home > Archives > 2005年02月16日

2005年02月16日

C#-mode (csharp-mode)

Meadow/Emacs の C#-mode (csharp-mode) を発見.http://www.davh.dk/script/ で公開されている.csharp-mode.el を site-lisp ディレクトリに入れて,.emacs に

 (autoload 'csharp-mode "csharp-mode" 
   "Major mode for editing C# code." t)
 (setq auto-mode-alist (cons '( "\\.cs\\'" . csharp-mode ) auto-mode-alist ))

のエントリを追加すると使用可能.

Visual Studio.NET2003 を持っているにもかかわらず,Meadow で書いてコマンドラインでコンパイルするというあほなことをやっている.

ちなみに,コマンドラインでコンパイルするには

C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat

を実行して環境変数を適当に設定させるらしい.

最萌トーナメントの集計スクリプト

AWK の勉強のためとの建前で 第2回東方最萌トーナメント の集計スクリプトを書いてみた.スレッドの番号を入れると wget でページを落としてきて解析して gnuplot でグラフを描いてくれる.あほだ...

ファイルを置いといてみる.

Continue reading

AWK - match と substr

AWK 使いはじめて一時間ほどはまっていたのが,直前の正規表現でマッチした部分の取り出し方だった.ruby やら perl やらではそれらは簡単にできるのだが(特別な変数に入る),awk はそこまではできないらしい.結局 awk で正規表現でマッチした部分を取り出すには,match と substr あたりを使う必要があるとの結論に達した.

例えば, hh:mm 見たいな時間の表示を取り出すには

	pos=match($0, /[0-9][0-9]:[0-9][0-9]/) 
	if(!pos) next
	timestr = substr($0, pos, RLENGTH) 

などのようにする.

match で正規表現をマッチさせて,返り値でその開始位置を取得し(RSTART変数にも入る),長さが RLENGTH に入っているのでその分を substr で取り出すという手順になる.マッチに失敗したときは 0 が帰るらしい.コード中ではマッチしなかった場合に next を呼ぶようにしている.

AWK - はじめ

awk のプログラム(スクリプト)は

pattern { action }
pattern { action }
....

という構造にjなっている.pattern は /regex/ などのような正規表現や,BEGIN, END のような全ての最初と最後を意味するものがある.

入力はレコードセパレータ(RSという変数に入っている)によってレコードに分割され,全ての pattern に対してマッチが取られ,マッチしたときにはその pattern の action が実行される.デフォルトではフィールドセパレータは改行コードなので,一行が一レコードになってる.

例えば,外部から TARGET という変数に何か値を渡してあげて,"Start of TARGET" から "End of TARGET"までのレコードを出力するようなのは以下のとおり.

BEGIN {
	FLAG=0
	STARTPat="Start of "TARGET
	ENDPat="End of "TARGET
}
//{
	if($0 == ENDPat){
		FLAG = 0
	}
	if(FLAG) print
	if($0 == STARTPat){
		FLAG = 1
	}
}

BEGIN で最初に変数を初期化しておいて,その後ろの //{...} で全てのレコードに対してマッチして処理をしている.これをファイル(split.awk)に保存して

awk -f split.awk -v TARGET=1st < in.dat

とかやると, in.dat の中の "Start of 1st" から "End of 1st"までの行が取り出せる.

ちなみにレコードはフィールドセパレータ(FSという変数)で分割されて,各フィールドは $i (i=1,2,...,NF) で取り出せる.$0 はレコード全体.出力は print で,引数を省略すると print $0 の意味になる.

詳しくはマニュアル参照.

GNUPlot Tips - eps オプション

EPS 出力の際のオプションで solid をつけると実線のみになる.dashed で通常通り点線がでる.dashlength で点線の長さ指定.lw 3 とかでデフォルトの線の太さを変えられる.などなど.

set terminal postscript eps color solid lw 3

GNUPlot Tips - key

グラフの線のタイトルは通常グラフの右上部に出力されるが,これを左側に移動することができる.

set key left

右上がりのグラフの描画時にはありがたい.

GNUPlot Tips - boxes

Box で棒グラフを描くときに,棒の幅を指定できる.こんな感じで.

set boxwidth 0.3 relative

通常に比べて幅が 0.3 倍になる.これで幅を縮めておいて棒グラフの中心をずれしておけば,複数の棒グラフをうまく並べてきれいに描くことができる.

GNUPlot Tips - データのフォーマット

x 軸を時間で指定するには,xdata, timefmt, format をいじる.

例えば,"HH:MM"という時間を使いたいときは,

set xdata time
set timefmt "%H:%M"
set format x "%H:%M"
set xrange 00:00":"23:10
set xtics "00:00", 10800, "24:00"

みたいに書く.%H は時間(0-23),%Mは分(0-59)を表す.timefmt は入力のフォーマットを指定していて,ファイルに書かれているデータやレンジ指定のところのフォーマットになっている.なので,入力データは例えば

00:17 37
00:18 38
00:18 39
00:20 40
00:20 41
00:21 42
00:21 43

みたいになっている.で,format は出力(xtics)のフォーマットを指定している.注意としては, xtics のインクリメントの指定などは秒単位となる.

魔法使いの勝ち

昨日の 第2回東方最萌トーナメント 「魔法使い vs. 巫女」は,

開始当初からの差をキープし続けた魔法使いの勝利となった.巫女は一応主人公なのに負けてしまうとは... 残念.今日も魔法使いの試合のようだが,果たして妹に勝てるだろうか?

Home > Archives > 2005年02月16日

Search
Feeds

Page Top