Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl-有一个逗号分隔的输出,要将其写入CSV吗_Perl - Fatal编程技术网

Perl-有一个逗号分隔的输出,要将其写入CSV吗

Perl-有一个逗号分隔的输出,要将其写入CSV吗,perl,Perl,代码如下: my @col= sort keys %colnames; print "mRNA,".join(",",@col)."\n"; foreach my $row(keys %rownames){ print "$row"; foreach my $col(@col){ my $num=$mat{$col}->{$row}; $num=~s/(\.\d\d)\d+/$1/; print ",$num"; }

代码如下:

my @col= sort keys %colnames;

print "mRNA,".join(",",@col)."\n";
foreach my $row(keys %rownames){
    print "$row";
    foreach my $col(@col){
        my $num=$mat{$col}->{$row};
        $num=~s/(\.\d\d)\d+/$1/;
        print ",$num";
    }
    print "\n";
}
输出:
请帮助我将此输出写入
.csv
文件。

要写入csv文件,请使用


像这样的东西可能有用。。。结合米勒的回答。我没有测试它,只是给你一个想法。而且很明显,它可以写得更干净,更少冗余

use strict;
use warnings;
use autodie;

my $csvFile = Text::CSV->new ( { binary => 1, eol => "\n" } )
                or die "Cannot use CSV: ".Text::CSV->error_diag ();

my @col= sort keys %colnames;
my @csv; 

$csv[0][0] = "mRNA,";
my @joinCol = join(",",@col);
my $i =1; 
foreach (@joinCol) {
    $csv[0][$i] = $_;
    $i++;
}    

my $k = 1; 
foreach my $row(keys %rownames){
    my $j = 0; 
    print "$row";
    $csv[$k][$j] = $row;
    foreach my $col(@col){
        my $num=$mat{$col}->{$row};
        $num=~s/(\.\d\d)\d+/$1/;        
        print ",$num";
        $csv[$k][$j] = $num; 
        $j++;
    }
    print "\n";
    $k++;
}

open $fh, '>', "new.csv" or die "Couldn't open csv file: $! \n";

for (@csv) {
    $csvFile->print($fh, $_);
}

close $fh;

其他人用很好的解决方案回答了这个问题,但如果您迫切需要它,我会运行您的脚本并将其重定向到一个新文件perl my-script.pl>output.csv`。我如何在上面显示的代码中合并,因为它有行值和列值。这就是我的困惑。@geet如果这是你想要的答案,请随意选择并结束这个问题。顺便说一下,欢迎来到StackOverflowThank@Miller。我也是Perl的新手。我还发布了另一个问题。请让我知道,如果你能给我一些见解。
use strict;
use warnings;
use autodie;

# Your Data Initialization
my %colnames; # = Something
my %rownames; # = Something else
my %mat; # = a hash of hash

# Prepare CSV
my $csv = Text::CSV->new ( { binary => 1, eol => "\n" } )
                or die "Cannot use CSV: ".Text::CSV->error_diag ();
open $fh, '>', "new.csv";

my @col = sort keys %colnames;

# Output Header
$csv->print($fh, ['mRNA', @col]);

# Output Rows
for my $row (keys %rownames){
    my @data = ($row);
    for my $col (@col){
        my $num = $mat{$col}{$row};
        $num =~ s/(\.\d\d)\d+/$1/;
        push @data, $num;
    }
    $csv->print($fh, \@data);
}

close $fh;
use strict;
use warnings;
use autodie;

my $csvFile = Text::CSV->new ( { binary => 1, eol => "\n" } )
                or die "Cannot use CSV: ".Text::CSV->error_diag ();

my @col= sort keys %colnames;
my @csv; 

$csv[0][0] = "mRNA,";
my @joinCol = join(",",@col);
my $i =1; 
foreach (@joinCol) {
    $csv[0][$i] = $_;
    $i++;
}    

my $k = 1; 
foreach my $row(keys %rownames){
    my $j = 0; 
    print "$row";
    $csv[$k][$j] = $row;
    foreach my $col(@col){
        my $num=$mat{$col}->{$row};
        $num=~s/(\.\d\d)\d+/$1/;        
        print ",$num";
        $csv[$k][$j] = $num; 
        $j++;
    }
    print "\n";
    $k++;
}

open $fh, '>', "new.csv" or die "Couldn't open csv file: $! \n";

for (@csv) {
    $csvFile->print($fh, $_);
}

close $fh;