次のようなデータを含む file.txt があります。
word = blabla
a = 1
b = 2
c = 3
word = blabla_b
a = 11
b = 22
c = 33
(基本的に、このファイルは、このファイルに「a」に含まれる数字を書き込むJavaコードによって作成され、その後、特定のループで「b」と「c」、明らかにa、b、c 1、2、3になりますは単なる例です。私は別の名前と別の番号を持っています :-) )
私がする必要があるのは:
- CMD から与えられたファイルから読み取る
- それをCSVファイル(Excelで開く)に書き込み、すべての列の下部(数値ではないため「単語」を除く)に書き込み、平均を取得します:(Excelファイルで平均を計算する方法は知っていますが、単独で実行するスクリプト)
最終的には次のようになります。
私はそれが機能する一般的ではないことをしましたが、非常に愚かであり、もっとエレガントな方法があると確信しています!!!
my $in_file = shift;
my $fileName = "CSV_file";
open $out_file, ">$fileName.csv" or die "can't open $fileName: $!";
my @fields = ("word","a","b","c");
foreach (@fields)
{
#first write down the line of the headlines per each column
print $out_file "$_,";
}
print $out_file "\n";
open STATS, "<$in_file" or die "Error opening file \$in_file";
local($counter) = 0;
#creating avg and sum variables for each column - not clever once i'll have much more columns!!!!!!!!!
my $avgA = 0 , $avgB = 0 ,$avgC = 0;
my $sumA = 0 , $sumB = 0 ,$sumC = 0;
my $numOfRows = 0;
while (<STATS>)
{
chop;
($name, $number) = split("=");
print $out_file "$number";
if ($counter == $#fields) #end of row
{
print $out_file "\n";
$sumC += $number;
$counter = 0;
$numOfRows++;
}
else
{
print $out_file ",";
$counter++;
}
#adding to the Sum of each column (in order for future Avg calc)
if ($counter == 2)
{
$sumA += $number;
}
elsif ($counter == 3)
{
$sumB += $number;
}
}
$avgA = $sumA/$numOfRows;
$avgB = $sumB/$numOfRows;
$avgC = $sumC/$numOfRows;
print $out_file "AVG:,$avgA ,$avgB,$avgC \n";
close (FILE);