? perl语言被某些爱好者称作“Unix 中的王牌工具”。确实,和C/C++相比,Perl语言特别是在处理文本和文件方面,有一些独到的优势,在处理某些文本文件任务时,真的是很方便的。
??比如下面这个问题:
? 现在两个文本文件a.txt和b.txt,内容如下:
a.txt:
a
b
c
d
e
f
g
b.txt:
1
2
3
4
5
6
7
? 我怎样能生成一个新文件(c.txt),内容如下:
c.txt:
a
1
b
2
c
3
d
4
e
5
f
6
g
7
? 简单说就是要完成两个文本文件的交叉合并。
? ? ??如果想用C/C++实现,实现应该是比较复杂的,需要使用不少字符串处理函数,以及文件指针操作,所以我个人认为还是比较复杂的。
? 如果想比较简单地解决这种问题,就需要找到一种“处理字符串和文本方面比较有优势”的语言,在这方面,被称为“软件芯片”的perl语言就属于其中之一,只需要知道它怎么控制文件句柄,就能个比较简单地实现了,不多说了,直接看实现代码:
#! /usr/bin/perl -w #本地的perl编译器路径
use strict; #开启语法检测
use 5.010; #使用5.10版本
my $name_1 = $ARGV[0];
my $name_2 = $ARGV[1]; #得到命令行参数
#open the ori perlterm script
open TXT_1,"<$name_1";
open TXT_2,"<$name_2"; #得到两个文件句柄
my @a = <TXT_1>;
my @b = <TXT_2>; #得到两个文件内容
my $line_b = @b; #b.txt文件内容传递
my $count_line = 0; #初始化文件行数
open my $newfile,">","c.txt"; #创建升成的新文件和句柄
foreach (@a){ #循环开始交叉合并
chomp;
print $newfile "$_n";
if ($count_line <= $line_b){
print $newfile "$b[$count_line]n";
$count_line+=1;
}
}
close $newfile or warn "can not close the file";#合并结束,关闭
? 保存为merge.pl并退出,这样就OK啦!运行结果如下:
a.txt:
a
b
c
d
e
f
g
b.txt:
1
2
3
4
5
6
7
c.txt:
a
1
b
2
c
3
d
4
e
5
f
6
g
7
? 不到30行,就搞定了。