Perl例程:从txt文件提取数据到excel文件指定位置

功能:
1.读取当前路径下txt文件中符合特定匹配条件的数据;
2.将读取的数据保存到excel表指定位置。

#!/usr/bin/perl

use Cwd;
my $dir = getcwd;
use strict;
use Win32;
use Win32::OLE;
use Win32::OLE::Const 'Microsoft Excel';
use Win32::OLE::Variant;
use Win32::OLE::NLS qw(:LOCALE :DATE);
$Win32::OLE::Warn = 3;

my @log_file_name=("origin.txt","test.txt");	#2个待读取文件
my $outexcell="H266_performance_results.xlsx";	#写入数据到该输出excel文件
use File::Copy;
copy("./H266_performance.xlsx",$outexcell) or die "copy xlsx file failed: &!"; #复制模板excel文件
#get already active excel application object or open new
my $Excel =Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application','Quit');
use Encode;
#open excel file
my $Book = $Excel->Workbooks->Open("$dir\/$outexcell") or die "Could not open the $dir\/$outexcell !!!\n";
my $Sheet=$Book->Worksheets("Sheet1");	#找到excel中对应的sheet表,名称可根据需求更改

my $file_idx=0;
for($file_idx=0; $file_idx<2; $file_idx++)
{
    #get file name
    my $infile="$dir\/$log_file_name[$file_idx]";
    #open file
    if(open(IN1,"<$infile"))
    {
        print "find $infile\n";
        my $result_num=0;	
        my $count_num=0;
        my %variable=("Bitrate"=>0,"Y-PSNR">=0,"U-PSNR">=0,"V-PSNR">=0,"YUV-PSNR">=0);
        #scan file
        while(my $aline=<IN1>)
        {
            #$aline=~s/\n$//;	#可能是使用一个空格分界
            $aline=~s/^\s+//;
            my @array=split(/\s+/,$aline);	#使用至少一个空格分界
			
            if($#array gt 1)
            {
                #print "Array > 1!\n"; //测试
                #find data:Bitrate,Y-PSNR,U-PSNR,V-PSNR,YUV-PSNR
                #if(($array[0] eq "1") && ($array[1] eq "a"))
                if(($array[0] eq "1") && ($array[1] eq "a"))	#符合特定匹配条件
                {
                    print "find data!\n";
                    $variable{"Bitrate"}=$array[2];	#创建元素“Bitrate”
                    $variable{"Y-PSNR"}=$array[3];	#创建元素“Y-PSNR”
                    $variable{"U-PSNR"}=$array[4];	#创建元素“U-PSNR”
                    $variable{"V-PSNR"}=$array[5];	#创建元素“V-PSNR”
                    $variable{"YUV-PSNR"}=$array[6];#创建元素“YUV-PSNR”
                    $count_num=$count_num+5;
                }
            }	
            my @result=values(%variable);
            if($count_num eq $#result)
            {
                $count_num=0;
                $result_num++;
                print "$result_num $variable{'Bitrate'} $variable{'Y-PSNR'} 
                $variable{'U-PSNR'} $variable{'V-PSNR'} $variable{'YUV-PSNR'} \n";
                my $col=0;
                if($file_idx eq 0)
                {
                    $Sheet->Cells($result_num+2, $col+1)->{'Value'}=$variable{"Bitrate"}; 
                    $Sheet->Cells($result_num+2, $col+4)->{'Value'}=$variable{"Y-PSNR"}; 
                    $Sheet->Cells($result_num+2, $col+7)->{'Value'}=$variable{"U-PSNR"}; 
                    $Sheet->Cells($result_num+2, $col+10)->{'Value'}=$variable{"V-PSNR"}; 
                    $Sheet->Cells($result_num+2, $col+13)->{'Value'}=$variable{"YUV-PSNR"}; 
                }
                else
                {
                    $Sheet->Cells($result_num+2, $col+2)->{'Value'}=$variable{"Bitrate"}; 
                    $Sheet->Cells($result_num+2, $col+5)->{'Value'}=$variable{"Y-PSNR"}; 
                    $Sheet->Cells($result_num+2, $col+8)->{'Value'}=$variable{"U-PSNR"}; 
                    $Sheet->Cells($result_num+2, $col+11)->{'Value'}=$variable{"V-PSNR"}; 
                    $Sheet->Cells($result_num+2, $col+14)->{'Value'}=$variable{"YUV-PSNR"}; 
                }
            }		
        }
        close(IN1);
        $Book->Save;
    }
    else
    {
        print "Warning:cannot open input file $infile\n";
    }
}
$Book->Close;
$Excel->Quit();
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章 概述 一、Perl是什么? Perl是Practical Extraction and Report Language的缩写,它是由Larry Wall设计的,并由他不断更新和维护,用于在UNIX环境下编程。 .Perl具有高级语言(如C)的强大能力和灵活性。事实上,你将看到,它的许多特性是从C语言中借用来的。 .与脚本语言一样,Perl不需要编译器和链接器来运行代码,你要做的只是写出程序并告诉Perl来运行而已。这意味着Perl对于小的编程问题的快速解决方案和为大型事件创建原型来测试潜在的解决方案是十分理想的。 .Perl提供脚本语言(如sed和awk)的所有功能,还具有它们所不具备的很多功能。Perl还支持sed到Perl及awd到Perl的翻译器。 简而言之,Perl象C一样强大,象awk、sed等脚本描述语言一样方便。 二、Perl在哪里? Perl通常位于/usr/local/bin/perl或/usr/bin/perl中。你可以在Internet用匿名FTP免费得到它,如ftp://prep.ai.mit.edu/pub/gnu/perl-5.004.tar.gz。 安装过程为: (1)解压: $gunzip perl-5.004.tar.gz $tar xvf - <perl-5.004.tar.gz (2)编译: $make makefile (3)放置: 将编译生成的可执行文件拷贝到可执行文件通常所在目录,如: $copy <compiled excutable file> /usr/local/bin/perl 注:这需要系统管理员权限。 北美 地址 目录 ftp.netlabs.com IP地址:192.94.48.152 目录 /pub/outgoing/perl5.0 ftp.cis.ufl.edu IP地址: 128.227.100.198 目录 /pub/perl/src/5.0 ftp.uu.net IP地址: 192.48.96.9 目录 /languages/perl ftp.khoros.unm.edu IP地址: 198.59.155.28 目录 /pub/perl ftp.cbi.tamucc.edu IP地址: 165.95.1.3 目录 /pub/duff/Perl ftp.metronet.com IP地址: 192.245.137.1 目录 /pub/perl/sources genetics.upenn.edu IP地址: 128.91.200.37 目录 /perl5 欧洲 Site Location ftp.cs.ruu.nl IP地址: 131.211.80.17 目录 /pub/PERL/perl5.0/src ftp.funet.fi IP地址: 128.214.248.6 目录 /pub/languages/perl/ports/perl5 ftp.zrz.tu-berlin.de IP地址: 130.149.4.40 目录 /pub/unix/perl src.doc.ic.ac.uk IP地址: 146.169.17.5 目录 /packages/perl5 澳洲 Site Location sungear.mame.mu.oz.au IP地址: 128.250.209.2 目录 /pub/perl/src/5.0 南美 Site Location ftp.inf.utfsm.cl IP地址: 146.83.198.3 目录 /pub/gnu 三、运行 用文本编辑器编辑好你的Perl程序,加上可执行属性:$chmod +x <program>就可以执行了:$./<program>。如果系统提示:"/usr/local/bin/perl not found",则说明你没有安装成功,请重新安装。 注:你的程序的第一行必须为#!/usr/local/bin/perlperl所在位置)。 四、注释: 注释的方法为在语句的开头用字符#,如: # this line is a comment 注:建议经常使用注释使你的程序易读,这是好的编程习惯。 第二章 简单变量 基本上,简单变量就是一个数据单元,这个单元可以是数字或字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值