2008/07/07(Mon) 12:32:06 編集(投稿者)
>たとえば、「ま」さんにご示唆いただいたmapを試そうかと思うときに、この3冊の索引にはどこにもmapの項目
>がなく、参考になるものがない、と。そういう入門書って、やっぱり丁寧さに欠けていると思うのですよ。
マップって言葉がよくなかったのかな?
連想配列って言えばよかったですか?
//JavaScript(WSH) ではこんな感じですね。
function IniFileReader(fileName) {
var ini = [];
var fso = new ActiveXObject("scripting.FileSystemObject");
var otf = fso.OpenTextFile(fileName);
//abc=1.2.2 を読んで
while ((var line = otf.ReadLine()) != null) {
//ps[0]=abc, ps[1]=1.2.2 に分割して
var ps = line.split("=");
//ini["abc"] = "1.2.2" とする
ini[ps[0]] = ps[1];
}
otf.Close();
return ini;
}
//例)
var opt_abc = IniFileReader("xxx.ini")["abc"];
これを、C# に直すんですね。
ちなみに、awk で書くとどうなるんですか?
awk で書いて出来たものを、C# に直すにはどことどこをいじればいいのか、なんて
考えながらやると上達はやいですよ。
//Java で書くとこんな感じ。
public class IniFileReader {
Map map = new HashMap();
public IniFileReader(String fileName) {
read(fileName);
}
private void read(String fileName) {
try {
BufferedReader br = new BufferedReader(new File(fileName));
String line = null;
while ((line = br.readLine()) != null) {
String[] ss = line.split("=");
map.put(ss[0], ss[1]);
}
br.close();
}
catch(Exception e) {
//何かの IO エラー
}
}
public String getProperty(String keyName) {
return map.get(keyName);
}
}
//C# で書くとこんな感じ
public class IniFileReader
{
Dictionary dic = new Dictionary();
public IniFileReader(string filename)
{
read(filename);
}
private void read(string filename)
{
Reader r = new Reader(filename);
while ((string line = r.ReadLine()) != null) {
string[] ss = line.Split("=");
dic.add(ss[0], ss[1]);
}
r.Close();
}
public property string Property(stirng key)
{
get {
return dic[key];
}
}
}
プロパティの部分は微妙にC#っぽく無いな・・・
まぁ、どーでもいいのですが、どの言語で書いても while 部分は大差ないですよね。
awk で書くと劇的にすっきりしちゃうのですか?
追記:awk では。
BEGIN {
FS = "="
MAP
while ($0 != "") {
MAP[$1] = $2
}
}
function property(key) {
return MAP[key]
}
こんな感じですかね。所要時間10分くらいです。たぶんダメダメでしょうけど。
http://homepage2.nifty.com/mozu/koza/awk_koza/awk_koza_13.html
ここで勉強しました。
ファイル読み込み自体を awk が代行してくれるって部分を考慮すると、肝心のロジック
だけ書けばいいので楽っちゃ楽ですね。でも while の部分はどの言語も似たりよったり
ですね。
もしかして、ワードプロセッサとしての awk を重宝しているあまり、Script 言語としての
awk は実際には触っていないのではないですか?
ファイルを開くとか、文字列を正規表現以外で解析するとか、泥臭くて基本的な部分のこと
です。