我必须解析一个文件,以便我可以将它导入excel.所以,我认为最好的方法是创建一个csv文件.在此文件中,我必须将内容划分为不同的类别,并将它们表示在不同的列中.所以,我已经解析了文件以创建与类别对应的不同数组.现在,我正在尝试使用这些数组创建一个csv文件(考虑使用for循环).但问题是,阵列长度不等.
INPUT
NM_144736.3
NM_144963.1
XM_144975.2
BC144986.1
NM_144989.1
BC145001.1
XM_145018.2
NM_145015.2
XM_030711.2
AK145024.1
AK145030.1
NM_145034.1
Run Code Online (Sandbox Code Playgroud)
我使用正则表达式将数据解析为不同的数组.所有NM到@ array1,XM到@ array2,BC到@ array3,AK到@ array4.如果创建数组不是一个好主意,请让我知道是什么?我怎样才能从上面的数据生成csv文件.
编辑:
OUTPUT
NM_144963.1,XM_144975.2,BC144986.1,AK145024.1
NM_144963.1,XM_145018.2,BC145001.1,AK145030.1
NM_144989.1,XM_030711.2
NM_145015.2
NM_145034.1
Run Code Online (Sandbox Code Playgroud)
解析并直接写入excel电子表格,而无需导入:
use Spreadsheet::WriteExcel;
my %hash;
# Parse the data into a hash of arrayrefs
push @{$hash{substr $_, 0, 2}} => $_ for <DATA>;
# Create spreadsheet
my $workbook = Spreadsheet::WriteExcel->new('perl.xls');
my $worksheet = $workbook->add_worksheet;
# Loop through hashref keys
my @array = sort keys %hash;
for (0..@array-1) {
# Create column based on arrayref
$worksheet->write_col(0, $_, $hash{$array[$_]});.
}
# Close and save spreadsheet
$workbook->close;
Run Code Online (Sandbox Code Playgroud)