私はCSVファイルのリストを持っています。それぞれの空の列の数を追加する必要があります。空の列の数は、最初のファイルは0の列を挿入したい、2番目のファイルは1列を挿入したい、3番目のファイルは2列を挿入するなど、列は常に2番目のものとして挿入する必要があります。 すべての入力ファイルは、以下の例のように2列CSVあるperlを使用してcsvファイルに空の列を挿入する方法
ファイル1
2016/03/07 23:42:40.618 GMT,54.5
2016/03/07 23:43:40.618 GMT,54.0771
2016/03/07 23:44:40.618 GMT,53.9472
2016/03/07 23:45:40.618 GMT,54.2914
等ファイル2
2016/03/07 23:42:40.618 GMT,49.013
2016/03/07 23:43:40.618 GMT,48.688
2016/03/07 23:44:40.618 GMT,47.7052
2016/03/07 23:45:40.618 GMT,47.9057
FILE3
2016/03/07 23:51:40.618 GMT,50.7858
2016/03/07 23:52:40.618 GMT,52.5267
2016/03/07 23:53:40.618 GMT,54.2865
2016/03/07 23:54:40.618 GMT,53.2014
2016/03/07 23:55:40.618 GMT,52.0538
私はこのコードが書いてあるが、それは持つすべてのファイルに対して同じ出力を生成し出力が
file1の
2016/03/07 23:42:40.618 GMT,54.5
2016/03/07 23:43:40.618 GMT,54.0771
2016/03/07 23:44:40.618 GMT,53.9472
2016/03/07 23:45:40.618 GMT,54.2914
File2の
2016/03/07 23:42:40.618 GMT,,49.013
2016/03/07 23:43:40.618 GMT,,48.6883
2016/03/07 23:44:40.618 GMT,,47.7052
2016/03/07 23:45:40.618 GMT,,47.9057
FILE3
2016/03/07 23:51:40.618 GMT,,,50.7858
2016/03/07 23:52:40.618 GMT,,,52.5267
2016/03/07 23:53:40.618 GMT,,,54.2865
2016/03/07 23:54:40.618 GMT,,,53.2014
2016/03/07 23:55:40.618 GMT,,,52.0538
になりたいですただ1つの空の列を追加しました、おそらく私は何か愚かな行方不明ですが、私は何を得ることができません
#!/usr/bin/perl
#use strict;
#use diagnostics;
use CGI qw(:standard);
use Cwd;
use File::Find;
use File::Basename;
use Text::CSV;
use Text::Trim qw(trim);
use List::MoreUtils qw(uniq);
use Text::CSV_XS;
sub read_dir{
my $ph=$_[0];
my $match=$_[1];
my @fl = ();
#print "<b> will open $ph";
opendir DH, "$ph" or die "Cannot open Dir $ph: $!";
#if ($match eq "") {
@fl = grep !/^\.\.?$\.*/, sort(readdir DH) ;
#}
#else {
# my @fl = grep {$_ =~ $match} sort(readdir DH) ;
#}
closedir DH;
if ($match ne "") {
foreach my $file (@fl){
if ($file =~$match) {
push(@ffl,$file);
}
}
return @ffl;
}
else {
return @fl;
}
}
@column=();
$loc="/myfolder";
$offset=1;
@sites=("dir1","dir2","dir3");
$s="subdir";
foreach $t (@sites) {
$m=0; #number of empty column to insert in the file
@list=read_dir("$loc/Statistics/$t/$s"); #directory that contain the csv file to manipulate
foreach $l (@list) {
#inser the empty column
open $in, "<","$loc/Statistics/$t/$s/$l" or die $!;
open $out, ">>", "$loc/Statistics/$t/$s/$l.tmp" or die $!;
foreach $r (0..$m) {
print "<br> r is $r";
open $out, ">>", "$loc/Statistics/$t/$s/$l.tmp" or die $!;
while ($row = $ccsv->getline($in)) {
splice @$row, $offset, 0, shift @column;
$ccsv->print($out, $row);
}
close $out;
}
close $in;
$m=$m+1;
}
}
あなたのコードが不完全であってもコンパイルされません$カンマに1を加算します。あなたの質問を編集し、実際のコードを投稿してください。また、厳格と警告をオンにします。変数を宣言する必要があります。これを済ませれば、多くの問題が明らかになり、解決しやすくなります。 – simbabque
不足している部分を追加しました – Cris