パソコンを使っている君なら、ワードやエクセルは知っているだろう。でも、エディターも知っておいた方がいいよね。テキストを使いやすい形に編集できるツールです。
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 );
大変ですが、一度書いてしまえば、後が楽です。
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 );
大変ですが、一度書いてしまえば、後が楽です。