作者: Yさ
日時: 2004/6/23(13:19)
>  気に入った方は、ご自由に改良してください。

[使い方]
 >gawk -f sel.awk text.txt[ENTER]
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
----- sel.awk
BEGIN{ RS=""; FS="\n"; tgt=""; tgtNo=0; }
{ split($1,s,","); if(tgtNo>0 && (tgt!=s[1] || tgtNo!=s[2])) next;
  endq=0; delete tbl_tgt; delete tbl_tgtNo;
  for(i=1; i<=NF; ++i){ t=$i; split(t,s,",");
    if(s[1]=="@"){ ansChk(endq); continue; }
    if(s[1]=="Q"){ printf("%s%s)%s\n", "\n質問",s[2],s[3]); continue; }
    if(s[1]=="A"){ printf("%s%s)%s\n", "\n結果",s[2],s[3]); continue; }
    if(s[1]=="-"){ printf("%s%s\n", "     ",s[2]);   continue; }
    endq=s[1]+0;  printf("%s%s. %s\n","  ",s[1],s[2]);
    tbl_tgt[endq]=s[3]; tbl_tgtNo[endq]=s[4];
  }
  printf("\n");
}
function ansChk(endq){
  if(endq<1) return;
  RS="\n";
  do{ printf("?>");
    if((getline a < "-")<=0) break;
  }while(a<1 || endq<a);
  RS="";

  tgt=tbl_tgt[a]; tgtNo=tbl_tgtNo[a];
}
-----


----- text.txt
Q,1,あなたは、C++ という言語をどう思いますか?
-,
1,興味がある、あるいは良いと思う,Q,2
2,興味が無い、あるいは良くないと思う,Q,3
3,そもそも知らない,A01
@

Q,2,質問1に A と答えた方だけ答えてください。
-,あなたは、C++ のどのような部分に惹かれますか?
-,
1,メジャーだから/本が多いから,A,2
2,格好よさそうだから,A,3
3,オブジェクト指向だから,A,4
4,汎用性があり、実用的だから,A,5
5,コンパイルされたオブジェクトの実行速度が速い,A,6
6,自分で拡張可能/細やかな処理が可能な文法が魅力,A,7
7,その他,A08
@

Q,3,質問1に B と答えた方だけ答えてください。
-,あなたは、C++ のどのような部分が不満ですか?
-,
1,文法が難しそう,A,9
2,本などでよく非難されているから,A,10
3,言語として古く原始的,A,11
4,C言語のほうが簡単でシンプル,A,12
5,ISOやANSIの解説書が使えない,A,13
6,その他,A,8
@

A,1,知識不足型
-, まだプログラミングに対して、積極的に情報を集めて
-,いないと思われます。この状態で誰かに「とりあえず
-,「〜をやっとけ」といわれると、反論の余地がありませ
-,ん。導入しやすい言語に出会えば良いのですが、難しす
-,ぎる言語に出会うと、プログラミングに挫折する可能性
-,は多いにあります。まずは色々な言語を、用途などとと
-,もに見て回ると良いでしょう。
@

A,2,二次的目的型
-, 他にも「コンパイラが多いから」などがありますが、
-,言語の本質よりも環境に左右されるタイプと思われます。
-,プロなら仕方ないですが、そうでなければ、強い目的意
-,識が無いかぎり挫折の可能性が大きいです。まずは簡単
-,にできる言語を選び、簡単なものでも「完成品」をつく
-,ってみることが良いでしょう。
@

A,3,スタイル追求型
-, このタイプは、スタイルにかける執念の度合いによっ
-,て変わります。ある程度の困難は彼らのやる気を引き出
-,しますが、限界はありますので、達成はかなり困難です。
-,言語として難しいとはいえ、単純なところから一歩一歩
-,前進していけば達成可能なのですが、えてしてこのタイ
-,プはその基礎を嫌いがちです。どうせ人の忠告には耳を
-,貸さないでしょうから、運を天にまかせましょう。
@

A,4,知識先行型
-, C++ がオブジェクト指向プログラミング言語なのは事
-,実ですが、それは、C言語プログラマが「オブジェクト
-,があるとこんなに便利なのか」と感嘆するためであって、
-,オブジェクト指向を求めて C++ というのは、聞きかじり
-,の知識を消化しないままの思い込みの危険性が大きいで
-,す。本当に知識を深めたいなら、ダイクストラの3構造
-,あたりの基本知識からじっくり理解する必要があるでし
-,ょう。その根気が無ければ、プログラミングをつづける
-,意味を途中で失ってしまうかもしれません。
@

A,5,情報先行型
-, 嘘は無いのですが、人の情報に左右されすぎる傾向が
-,あります。汎用性と万能性は異なりますので、その点を
-,理解して、自分の目的のために言語を選べばよい選択が
-,できますが、他人からの情報だけに惑わされると、なん
-,だかわからないままプログラミングを覚える機会を逸し
-,かねません。まず目的を設定し、それ用の言語を堅実に
-,選ぶと良いでしょう。
@

A,6,マニアの卵型
-, プログラミング経験のろくろく無いうちから、そーい
-,うマニアックなことにはまる人間は、両極端です。この
-,型はスタイル追求型より根性というか執念はありますの
-,で、力技で達成してしまう可能性はありますが、高すぎ
-,る壁は挫折の原因となります。しかも、再チャレンジす
-,るにしてもこの型は同じ言語に何度もチャレンジする可
-,能性があり、時間を膨大に浪費する可能性があります。
-,肩の力を抜いて、まずは手慰みでもいいので、ちょっと
-,したプログラムを書いてみてください。きっかけさえつ
-,かめれば十分卵からマニアになれます。
@

A,7,絶望型
-, プログラミング経験が無く、こんな答えを言える人間
-,は、面接に臆面も無く誰かの書いたシナリオを暗記して
-,答えるタイプでしょう。プログラミングのような泥臭い
-,作業には向きませんので、他のことをすることをお勧め
-,いたします。
@

A,8,未来型
-, まぁ、評価を下すほどの根拠も無いながら、この言語
-,の名前を知っているくらいには情報を集めているのでし
-,ょう。言語はたくさんありますので、今のペースでゆっ
-,くりと選びましょう。
@

A,9,実体験型
-, 正直で結構。言語は C++ だけではありませんので、簡
-,単な言語から初めてください。でも、いろんな言語に出
-,会った後に C++ を見ると、今まで見えなかった魅力的な
-,部分が見えるかもしれませんよ。
@

A,10,ギークの卵型
-, マニアよりたちの悪いギークの予備軍です。傍目には
-,違いが分かりませんが、マニアの読む分厚い専門誌でな
-,く、カルト系の雑誌の購読者である可能性があります。
-,本の非難が確信に変わったら、いっぱしのギークです。
-,ほっといてもプログラミングするようになるでしょうか
-,ら、放っておきましょう。
@

A,11,空論自滅型
-, ギークの卵型に近いですが、自分で理屈をつけていっ
-,ぱしの批評家ぶるあたり、本質を見失う可能性がありま
-,す。そもそも言語の「好み」でなく「評価」を下すなら、
-,最低限、日本語版全 1027 ページの「プログラミング言
-,語 C++ 第三版」くらい読破してほしいもんです。で、コ
-,レが読んで理解できる人を、普通入門者とは口が避けて
-,もいえません。ギークの卵型と異なり、プログラミング
-,する可能性は低いでしょう。
@

A,12,伝統芸能継承型
-, 多分、職人的Cプログラマの師匠がおられる方でしょ
-,う。一子相伝の技を学んでください。Cの道は茨の道で
-,すが、この知識が不要になる時代は当分は来ないでしょ
-,う。ただ一言言わせていただけば、それを他人に吹聴す
-,るのはご遠慮願いたいものです。なんせ書くプログラム
-,によっては、C++ はCよりかなりシンプルに書けますの
-,で。
@

A,13,マイク○ソフト依存症
-, ISOやANSI規格に従っていないのは、M_crosoft
-,の V_sualC++ ほうです。VC++ の使いにくさを基準に、C++
-,を評価するような「困った師匠」についた方と思われま
-,すので、その師匠の言うことは話半分で聞いて、あとは
-,自分で調べてみてください。プログラムの世界は、Mが
-,頭文字につくもの以外にもたくさんあるんですよ。
@

-----