在现在互联网的时代,如果有些东西你清楚地,google或者baidu一下,都可以找到一大堆你要的东东,但是相信大家都有这样的经历,找到的东东或者是教程,未必能用用的得心应手,或者是说“怎么文档上这块就顺利通过了,我这里怎么就抱错呀”
今天花了很长的时间搞了一下利用perl导出CSV文件的过程,挺有感触,在这里给大家分享下
因为机器装的是RedHat AS4,2.6.9 kernel,perl版本为5.8.5
在安装开始被提示找不到CSV.pm模块,有点头晕。。通过多方寻找资料得到需要通过ppm下载各种perlpackage,好吧,那么去找找吧,最终找到了ActivePerl-5.8.8.822-i686-linux-glibc-2.2.4-gcc-280952.tar.gz,下载后安装(执行install.sh便可安装)
安装完成之后就可以通过bin目录下的ppm install (内容)来进行模块安装了,当然你怎么知道需要安装些什么呢?我们可以通过./ppm s CSV,我们通常可以看到如下内容:
Downloading ActiveState Package Repository packlist...not modified
1: App-CCSV v0.02
2: Class-CSV v1.03
3: DBD-CSV v0.22
4: Data-Package-CSV v1.01
5: IO-CSVHeaderFile v0.04
6: Log-Accounting-CSV v0.02
7: POE-Filter-CSV v1.14
8: POE-Filter-CSV_XS v1.12
9: Parse-CSV v1.00
10: Snail-CSV v0.07
11: Template-Plugin-CSV v0.04
12: Text-CSV v1.10
13: Text-CSV-BulkData v0.06
14: Text-CSV-DetectSeparator v0.03
15: Text-CSV-Encoded v0.07
16: Text-CSV-Separator v0.20
17: Text-CSV-Simple v1.00
18: Text-CSV-Track v0.8
19: Text-CSV-Unicode v0.111
20: Text-CSV_PP-Iterator v1.00
21: Text-CSV_XS v0.58
22: Text-ECSV v0.01
23: Text-LooseCSV v1.6
24: Tie-File-AnyData-MultiRecord_CSV v0.01
25: Tie-Handle-CSV v0.09
26: XML-CSV v0.15
27: XML-SAXDriver-CSV v0.07
28: csv2txt v2.0
当然我们可以安装自己需要的,比如./ppm install Text-CSV :)
在这里我遇到一个问题,因为我做的内容是需要将oracle的数据导到CSV中,但是在ppm中我无法找到DBD:oracle模块,所以我只能手工安装DBD:oracle模块包,包名如下(DBD-Oracle-1.22.tar.gz),然后通过ppm更新后的pm报和其他需要的文件拷贝到/usr/lib/perl5相关目录下,后来想想,这也是一个通用的办法,也就是把ppm当成一个下载库,呵呵
好了,最终完成了工作,但是还不太完美,实现代码段如下所示,可供大家参考:
#!/usr/bin/perl -w
use DBI;
use Tie::File;
#$dbh = DBI->connect("dbi:Oracle:$dbname",$user,$passwd) or die "can't connect todatabase ".DBI-errstr;
# Connect to target DB
my $dbh = DBI->connect("dbi:Oracle:ORCL_KIDD","morefund","1", {'RaiseError' => 1});
# Insert one row
#my $rows = $dbh->do("INSERT INTO TBL_TEST(id,name,pid) VALUES (20,'test',20)");
my @lines;
my $filename='./prospects.csv';
tie(@lines,'Tie::File',$filename) or die;
#print "insert $rows rows\n";
# query
my $sth = $dbh->prepare("select fund_id from acc_settleday where rownum <=200000");
$sth->execute;
$N=0;
while(my @ref = $sth->fetchrow_array ) {
$N++;
$lines[$N]="$ref[0]\n";
}
untie(@lines);
$dbh->disconnect();
今天花了很长的时间搞了一下利用perl导出CSV文件的过程,挺有感触,在这里给大家分享下
因为机器装的是RedHat AS4,2.6.9 kernel,perl版本为5.8.5
在安装开始被提示找不到CSV.pm模块,有点头晕。。通过多方寻找资料得到需要通过ppm下载各种perlpackage,好吧,那么去找找吧,最终找到了ActivePerl-5.8.8.822-i686-linux-glibc-2.2.4-gcc-280952.tar.gz,下载后安装(执行install.sh便可安装)
安装完成之后就可以通过bin目录下的ppm install (内容)来进行模块安装了,当然你怎么知道需要安装些什么呢?我们可以通过./ppm s CSV,我们通常可以看到如下内容:
Downloading ActiveState Package Repository packlist...not modified
1: App-CCSV v0.02
2: Class-CSV v1.03
3: DBD-CSV v0.22
4: Data-Package-CSV v1.01
5: IO-CSVHeaderFile v0.04
6: Log-Accounting-CSV v0.02
7: POE-Filter-CSV v1.14
8: POE-Filter-CSV_XS v1.12
9: Parse-CSV v1.00
10: Snail-CSV v0.07
11: Template-Plugin-CSV v0.04
12: Text-CSV v1.10
13: Text-CSV-BulkData v0.06
14: Text-CSV-DetectSeparator v0.03
15: Text-CSV-Encoded v0.07
16: Text-CSV-Separator v0.20
17: Text-CSV-Simple v1.00
18: Text-CSV-Track v0.8
19: Text-CSV-Unicode v0.111
20: Text-CSV_PP-Iterator v1.00
21: Text-CSV_XS v0.58
22: Text-ECSV v0.01
23: Text-LooseCSV v1.6
24: Tie-File-AnyData-MultiRecord_CSV v0.01
25: Tie-Handle-CSV v0.09
26: XML-CSV v0.15
27: XML-SAXDriver-CSV v0.07
28: csv2txt v2.0
当然我们可以安装自己需要的,比如./ppm install Text-CSV :)
在这里我遇到一个问题,因为我做的内容是需要将oracle的数据导到CSV中,但是在ppm中我无法找到DBD:oracle模块,所以我只能手工安装DBD:oracle模块包,包名如下(DBD-Oracle-1.22.tar.gz),然后通过ppm更新后的pm报和其他需要的文件拷贝到/usr/lib/perl5相关目录下,后来想想,这也是一个通用的办法,也就是把ppm当成一个下载库,呵呵
好了,最终完成了工作,但是还不太完美,实现代码段如下所示,可供大家参考:
#!/usr/bin/perl -w
use DBI;
use Tie::File;
#$dbh = DBI->connect("dbi:Oracle:$dbname",$user,$passwd) or die "can't connect todatabase ".DBI-errstr;
# Connect to target DB
my $dbh = DBI->connect("dbi:Oracle:ORCL_KIDD","morefund","1", {'RaiseError' => 1});
# Insert one row
#my $rows = $dbh->do("INSERT INTO TBL_TEST(id,name,pid) VALUES (20,'test',20)");
my @lines;
my $filename='./prospects.csv';
tie(@lines,'Tie::File',$filename) or die;
#print "insert $rows rows\n";
# query
my $sth = $dbh->prepare("select fund_id from acc_settleday where rownum <=200000");
$sth->execute;
$N=0;
while(my @ref = $sth->fetchrow_array ) {
$N++;
$lines[$N]="$ref[0]\n";
}
untie(@lines);
$dbh->disconnect();