Perl练习题,持续更新中...
自己做的,有更好的答案可以贴上来,电脑是英文系统,编辑器中文显示有问题,所以写的英文注释(英语小白,勿喷)
1.在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。
- #user/bin/env perl
-
- #file name : test.pl
- #author : Tony Sun
- #version : 1.0
- #date : 2014-6-26 11:01:29
-
- =head function descripte
- read first line in each files which name start with $startwith in folder $path
- write it to a file named $write_file_name
-
- $path : the path of files
- $write_file_name: the file name which been wroted
- $startwith : the ragular of the file name
- $num : the number of the documents to satisfy the conditions
- =cut
-
- sub func_find_and_save{
- my($path,$write_file_name,$startwith,$num) = @_;
-
- #get folder&file handler
- opendir(TMP,$path) || die "open folder failed,cause by:$!";
- open(WRITEFILE,">$write_file_name") || die "open file $write_file_name failed,cause by:$!";
-
- my $flag = 0;
- my $open_failed = 0;
-
- #filte files and get the first line in the file which satisfy the condition
- foreach $file_name (readdir TMP)
- {
- next if(!($file_name =~ /^$startwith/));
-
- $file = $path."/".$file_name;
- if(-f $file)
- {
- if(open(FILE,$file))
- {
- $line = <FILE>;
- print WRITEFILE $line;
- $flag++;
- close(FILE);
- last if($flag>=$num);
- }
- else
- {
- $open_failed++;
- }
- }
- }
-
- #close handlers
- close(WRITEFILE);
- close(TMP);
-
- #info user the result after execute this function
- if($flag==$num)
- {
- print "finished!\n";
- }
- else
- {
-
- printf "got %d files which name start with \'$startwith!\'",$flag+$open_failed;
- print "open failed : $open_failed\n" if ($open_failed>0);
- }
- }
-
- # function test
- func_find_and_save("tmp","new","Action",100);
2.写脚本实现,可以用shell、perl等。把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。(忽然发现文件句柄都没关闭)
- #!user/bin/env perl
-
- #file name : test.pl
- #author : Tony Sun
- #version : 1.0
- #date : 2014-6-26 11:43:50
-
- =head function descripte
- two files named $file_a and $file_b,fetch rows that in $file_a and not in $file_b,
- write those rows to $file_c,and give out the row numbers in $file_c
-
- $file_a : file for compare
- $file_b : file for compare
- $file_c : file for deposit row than in $file_a and not in $file_b
- =cut
-
- sub func_compare_files{
- my($file_a,$file_b,$file_c) = @_;
-
- #get file operate handler
- open("FILE_A","<$file_a") || die "open file $file_a failed,cause by:$!";
- open("FILE_B","<$file_b") || die "open file $file_b failed,cause by:$!";
- open("FILE_C",">$file_c") || die "open file $file_c failed,cause by:$!";
-
- #get one row each time in $file_a,and compare with each rows in $file_b
- #if it is not in file_b,then print it out to file_c
- #(it maybe not the best method to handle this question,but it is the method think of now)
- my $diff_rows = 0;
- my @lines_b = <FILE_B>;
- while(my $line_a = <FILE_A>)
- {
- my $flag = 0;
- foreach my $line_b (@lines_b)
- {
- if($line_a eq $line_b)
- {
- $flag++;
- last;
- }
- }
- print FILE_C $line_a if($flag==0);
- $diff_rows++ if($flag==0);
- }
-
- close(FILE_A);
- close(FILE_B);
- close(FILE_C);
-
- print "finished,and $diff_rows rows in $file_c\n";
- }
-
- #function test
- func_compare_files("a","b","c");
3.输入一个数字组成的字符串,插入“+”,“-”,使得计算结果为0.(非递归版和递归版)。正在做ing
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。