微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试阅读pdf,parsing数据,并在Linux上使用Perl将所需数据写入电子表格

我试图从信用卡帐单中提取数据,并将其input到电子表格中以用于税收目的。 到目前为止,我所做的工作涉及多个步骤,但是我对Perl比较陌生,正在从我所知道的方面进行工作。 这是我迄今为止编写的两个单独的脚本…从pdf中读取所有数据并写入文本文件,另一个parsing文本(不完美)并将其写入另一个文本文件。 然后,我想要创build一个CSV文件导入到电子表格或直接写入电子表格。 我想用一个脚本来做,但是两三个就足够了。

一个脚本:

#!/usr/bin/perl use CAM::PDF; my $file = "/home/cd/Documents/Jan14.pdf"; my $pdf = CAM::PDF->new($file); my $doc=""; my $filename = 'report.txt'; open(my $fh,'>',$filename) or die "Could not open file '$filename' $!"; for ($i=1; $i <= $pdf->numPages(); $i++) { $doc = $doc.$pdf->getPageText($i); } print $fh " $docn"; close $fh; print "donen";

第二个脚本:

#!/usr/bin/perl use strict; use warnings; undef $/; # Enable 'slurp' mode open (FILE,'<','report.txt') or die "Could not open report.txt: $!"; my $file = <FILE>; # Whole file here Now... my ($stuff_that_interests_me) = ($file =~ m/.*?(Date of Transaction.*?CONTINUED).*/s); print "$stuff_that_interests_men"; my $filename = 'data.txt'; open(my $fh,'>>',$filename) or die "Could not open file '$filename' $!"; print $fh " $stuff_that_interests_men"; close $fh; print "donen"; close (FILE) or die "Could not close report.txt: $!"; open (FILE2,'report.txt') or die "Could not open report.txt: $!"; my $file2 = <FILE2>; # Whole file here Now... my ($other_stuff_that_interests_me) = ($file2 =~ m/.*?(Page 2 .*?TRANSACTIONS THIS CYCLE).*/s); print "$other_stuff_that_interests_men"; $filename = 'data.txt'; open($fh,$filename) or die "Could not open file '$filename' $!"; print $fh " $other_stuff_that_interests_men"; close $fh; print "donen"; close (FILE2) or die "Could not close report.txt: $!";

更新:我在CPAN上find了一个模块(CAM:PDF),它对我所要做的事情非常有用…它甚至能够以一种我可以更容易地用于电子表格的格式呈现数据。 但是,我还没有想出如何让它打印到一个.txt文件…任何build议?

有没有办法在另一个Excel电子表格中嵌套Excel电子表格?

写入包含macros的现有Excel .xls文件

如何使用Spreadsheet :: WriteExcel从MSsql Server nvarchar列输出欧元符号

如何从Excel / VBA调用长时间运行的外部程序?

#!/usr/bin/perl -w package main; use warnings; use strict; use CAM::PDF; use Getopt::Long; use Pod::Usage; use English qw(-no_match_vars); our $VERSION = '1.60'; my %opts = ( density => undef,xdensity => undef,ydensity => undef,check => 0,renderer => 'CAM::PDF::Renderer::Dump',verbose => 0,help => 0,version => 0,); Getopt::Long::Configure('bundling'); Getoptions('r|renderer=s' => $opts{renderer},'d|density=f' => $opts{density},'x|xdensity=f' => $opts{xdensity},'y|ydensity=f' => $opts{ydensity},'c|check' => $opts{check},'v|verbose' => $opts{verbose},'h|help' => $opts{help},'V|version' => $opts{version},) or pod2usage(1); if ($opts{help}) { pod2usage(-exitstatus => 0,-verbose => 2); } if ($opts{version}) { print "CAM::PDF v$CAM::PDF::VERSIONn"; exit 0; } if (defined $opts{density}) { $opts{xdensity} = $opts{ydensity} = $opts{density}; } if (defined $opts{xdensity} || defined $opts{ydensity}) { if (!eval "require $opts{renderer}") ## no critic (StringyEval) { die $EVAL_ERROR; } if (defined $opts{xdensity}) { no strict 'refs'; ## no critic(ProhibitNoStrict) my $varname = $opts{renderer}.'::xdensity'; ${$varname} = $opts{xdensity}; } if (defined $opts{ydensity}) { no strict 'refs'; ## no critic(ProhibitNoStrict) my $varname = $opts{renderer}.'::ydensity'; ${$varname} = $opts{ydensity}; } } if (@ARGV < 1) { pod2usage(1); } my $file = shift; my $Pagelist = shift; my $doc = CAM::PDF->new($file) || die "$CAM::PDF::errstrn"; foreach my $p ($doc->rangetoArray(1,$doc->numPages(),$Pagelist)) { my $tree = $doc->getPageContentTree($p,$opts{verbose}); if ($opts{check}) { print "Checking page $pn"; if (!$tree->validate()) { print " Failedn"; } } $tree->render($opts{renderer}); }

我想要创建一个CSV文件导入到电子表格或直接写入电子表格。

您可以直接写入电子表格,查看Excel :: Writer :: XLSX 。

如果你想创建一个CSV文件,那么你可以尝试使用Text :: CSV和Text :: CSV_XS 。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐