决定尝试学习Perl,目前需要处理一些CSV文件.
要开始进行更多高级文本操作,我首先需要一个基本代码:
导入/处理/导出应支持1000多行和20多列.将提供一个示例CSV文件,但您可以在答案中提供一个.
示例CSV文件:
"EmployeeName","OfficeHistory","JobLevelHistory"
"John Smith",501,"Engineer"
"John Smith",601,"Senior Engineer"
"John Smith",701,"Manager"
"Alex Button",601,"Senior Assistant"
"Alex Button",454,"Manager"
Run Code Online (Sandbox Code Playgroud)
如果您有任何疑问,请告诉我 - 这对我来说将是一个巨大的帮助.我的主要关注点是文本操作,但操作没有意义,除非我有办法输入数据并将其导出回文件.此外,如果您对快速创建和调试文本操作有任何建议,那将是一个巨大的帮助.(注意:目前使用应用程序执行此操作,但需要更多控制,并决定尝试使用Perl.)
任何其他事情迟早会让你疯狂.CSV在实践中是一种不守规矩的格式,虽然有规则(RFC 4180),但它们在某种程度上是事后定义的,所以一些系统,特别是微软,以不同的方式处理它们.MS确实首先实现了这一目标,但不同MS产品识别的CSV格式之间存在差异.
#!/usr/bin/env perl
use strict;
use warnings;
use Text::CSV;
my @rows;
# Read the CSV file
{
my $csv = Text::CSV->new()
or die "Cannot use Text::CSV ($!)";
my $file = "data.csv";
open my $fh, '<', $file
or die "Cannot open $file ($!)";
while (my $row = $csv->getline($fh))
{
push @rows, $row;
}
$csv->eof or $csv->error_diag();
close $fh
or die "Failed to close $file ($!)";
}
# Munge the data
{
foreach my $row (@rows)
{
foreach my $col (@{$row})
{
$col = uc($col);
}
print "\n";
}
}
# Write the data
{
my $csv = Text::CSV->new()
or die "Cannot use Text::CSV ($!)";
my $file = "output.csv";
open my $fh, '>', $file
or die "Cannot open $file ($!)";
$csv->eol("\n");
foreach my $row (@rows)
{
$csv->print($fh, \@{$row})
or die "Failed to write $file ($!)";
}
close $fh
or die "Failed to close $file ($!)";
}
Run Code Online (Sandbox Code Playgroud)
EMPLOYEENAME,OFFICEHISTORY,JOBLEVELHISTORY
"JOHN SMITH",501,ENGINEER
"JOHN SMITH",601,"SENIOR ENGINEER"
"JOHN SMITH",701,MANAGER
"ALEX BUTTON",601,"SENIOR ASSISTANT"
"ALEX BUTTON",454,MANAGER
Run Code Online (Sandbox Code Playgroud)