未来の科学者くん、エンジニアくんへ!

2006-08-05 | 自然科学
パソコンを使っている君なら、ワードやエクセルは知っているだろう。でも、エディターも知っておいた方がいいよね。テキストを使いやすい形に編集できるツールです。
LinuxやUNIXではk-termなどから、viというエディタが使えます。
Windowsでは秀丸というフリーライセンスのものやEmEditorといった有料のものが便利です。

私は会社ではEmEditorを使ってます。同じ測定結果のテキストデータをツールに応じて並びや装飾テキストを変換する必要があるときは、エディターだけでは、数が多いと効率的に対処できません。こんなときは、そのまま着手すると、必ずや大好きな本を読む時間、勉強する時間、音楽を聴く時間などが奪われてしまいます!

そこで、テキスト変換処理は、JavaやPerlといったプログラム言語で記述して、正規表現を使って、自動化しましょう!

UNIXなどでは、grepなどのコマンドで変換編集が自動である程度できるようです。これは、東大駒場の教養で全学生が容易に習得していたものです(正確には私以外かな?)

個人的にはPerlを愛用しています。

勉強にはJavaで書くのもいいでしょう。

以上のことは、早期から、各自普通にできる用意しておいたら、自分の大切な時間をより多くゲットするセンスを養えると思うよ!!

<Perlの記述はこんな感じ>

open(FILE1, "$ARGV[1]") or die "Can't open file1 : $!\n";

open(FILE11, ">$ARGV[0]") or die "Can't open file11 : $!\n";

chomp( $ARGV[1] );

$n = 0;

while( <FILE1> ){

if(/([^\s]+)(\s+)(\t)([^\s]+)(\s)([^\s]+)(\s+)(\t)([^\s]+)(\s)([^\s]+)(\s+)(\t)([^\s]+)(\s)([^\s]+)(\s+)(\t)([^\s]+)(\s)([^\s]+)(\s+)(\t)([^\s]+)(\s)([^\s]+)(\s+)(\t)([^\s]+)(\s)([^\s]+)(\s\n)/){
$z1[0] = $6;
$z1[1] = $11;
$z1[2] = $16;
$z1[3] = $21;
$z1[4] = $26;
$z1[5] = $31;


}

if(/(\d\.*\d+)(\s+)(\t)([^\s]+)(\s+)(\t)([^\s]+)(\s)(\t)([^\s]+)(\t)([^\s]+)(\t)([^\s]+)(\t)([^\s]+)(\s+\n)/){
$x1[$n] = $1;
$Current1[$n] = $4;
$Current2[$n] = $7;
$Current3[$n] = $10;
$Current4[$n] = $13;
$Current5[$n] = $16;
$Current6[$n] = $19;


$n++; }


}

print FILE11 "voltage current \n";
print FILE11 "$z1[0]";
print FILE11 "V\n";

for($m = 0 ;$m < $n ;$m++){

print FILE11 "$x1[$m]\t$Current1[$m]\n";

}

print FILE11 "y\n";

print FILE11 "voltage current \n";
print FILE11 "$z1[1]";
print FILE11 "V\n";

for($m = 0 ;$m < $n ;$m++){

print FILE11 "$x1[$m]\t$Current3[$m]\n";

}

print FILE11 "y\n";

print FILE11 "voltage current \n";
print FILE11 "$z1[2]";
print FILE11 "V\n";

for($m = 0 ;$m < $n ;$m++){

print FILE11 "$x1[$m]\t$Current3[$m]\n";

}

print FILE11 "y\n";

print FILE11 "voltage current \n";
print FILE11 "$z1[3]";
print FILE11 "V\n";

for($m = 0 ;$m < $n ;$m++){

print FILE11 "$x1[$m]\t$Current4[$m]\n";

}

print FILE11 "y\n";

print FILE11 "voltage current \n";
print FILE11 "$z1[4]";
print FILE11 "V\n";

for($m = 0 ;$m < $n ;$m++){

print FILE11 "$x1[$m]\t$Current5[$m]\n";

}

print FILE11 "y\n";

print FILE11 "voltage current \n";
print FILE11 "$z1[5]";
print FILE11 "V\n";

for($m = 0 ;$m < $n ;$m++){

print FILE11 "$x1[$m]\t$Current6[$m]\n";

}

print FILE11 "y\n";


close( FILE1 );

close( FILE11 );


大変ですが、一度書いてしまえば、後が楽です。

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。