Perl程序不打印输出..

时间:2011-10-19 09:18:27

标签: perl

对程序进行了哪些更改,以便在第一个文本文件中读取其他文本文件中的输出。 目前它没有在其他文本文件中提供输出,从第一个文本文件读取。

我认为计划在某种程度上是正确的,但仍需要通过审核......

Program is as follows :
    #--------------------------------------------------------------------------------------------------#
    #     This program is intended for storing the sentences in a text file with following conditions: #
    #   1. The first letter of a sentence in upper case.                       #
    #   2. As sentence completes at [. or ? or !], the succeeding character i.e. beginning     #
    #      character of other sentence in upper case.                          #
    #   3. There may be combinations of more than one [. or ? or !] "WITH Spaces".         #
    #--------------------------------------------------------------------------------------------------#

    #!/usr/bin/perl -w

    use strict;

    #----------------------------------------------------------------------------------#
    #     "File::Slurp" used for reading whole file by use of a scalar variable        #
    #----------------------------------------------------------------------------------#
    use File::Slurp;

    #----------------------------------------------------------------------------------#
    #     "File::Slurp qw( :all)" used for getting all subs in the module exported     #
    #----------------------------------------------------------------------------------#
    use File::Slurp qw( :all );

    #======== BLOCK-1 ==========#
    #----------------------------------------------------------------------------------#
    #                 Opens File if exists else file could not open                    #
    #----------------------------------------------------------------------------------#
    open (FILE, 'matter.txt') || die("Could not open file!");

    #----------------------------------------------------------------------------------#
    #   "File::Slurp" used : by "read_file" AND "write_file" functions,        #
    #           using scalar variable                      #
    #----------------------------------------------------------------------------------#
    my $LowText_1 = read_file( 'matter.txt' );  #==== (R1_orig)

    my $UpText;
    my $ch;

    my $i=0;

    while($i < eof(FILE))       ## BLOCK-1 + BLOCK-2 (START)
    {
    #======== BLOCK-1 ==========#
     while($i < eof(FILE))
     {
        if($ch eq " ")
        {
        $ch = uc($ch);
        my $UpText = write_file('UpFirst_matter.txt', $ch); #==== (2)
        print "$UpText\n";
        my $LowText_2 = read_file( 'matter.txt' );  #==== (R2)
        }
        else
        {
        my $UpText = write_file('UpFirst_matter.txt', $ch);
        my $LowText_1 = read_file( 'matter.txt' );  #==== (R1)
        }
     }$i++;     #==== (4)

     close(FILE) || die("Could not close file!!");

    #======== BLOCK-2 ==========#
     #----------------------------------------------------------------------------------#
     #                 Opens File if exists else file could not open                    #
     #----------------------------------------------------------------------------------#
     open (FILE, 'matter.txt') || die("Could not open file!");

     #----------------------------------------------------------------------------------#
     #  "File::Slurp" used : by "read_file" AND "write_file" functions,         #
     #          using scalar variable                       #
     #----------------------------------------------------------------------------------#
     my $LowText_2 = read_file( 'matter.txt' ); #==== (R2_orig)

    #======== BLOCK-2 ==========#
     while($i < eof(FILE))
     {
        if($ch eq "." || $ch eq "?" || $ch eq "!")
        {
        my $ch = uc($ch);
        my $UpText = write_file('UpFirst_matter.txt', $ch); #==== (3(x))
        print "$UpText";
        my $LowText_1 = read_file( 'matter.txt' );  #==== (R1)
        }
        else
        {
        my $UpText = write_file('UpFirst_matter.txt', $ch);
        my $LowText_2 = read_file( 'matter.txt' );  #==== (R2)
        }
     }$i++;     #==== (4)

    close(FILE) || die("Could not close file!!");   #==== (4_end)
    }$i++;              ## BLOCK-1 + BLOCK-2 (END)

2 个答案:

答案 0 :(得分:1)

这是一种方法:

#!/usr/local/bin/perl 
use strict;
use warnings;
use File::Slurp;

my $content = read_file('x.txt');
$content =~ s/([.!?]\s*|^)(\pL)/$1\U$2/g;
write_file('y.txt', $content);

答案 1 :(得分:0)

  • 两次使用File::Slurp是多余的。删除最不具体的(第一个)
  • open的2参数形式已经被弃用了很长时间。使用3-arg形式:

    我的$文件;  打开($ file,'&lt;','matter.txt')或死;

  • File::Slurp的文档中,您甚至不需要打开()文件:

    #将整个文件读入行数my @lines = read_file('filename');

  • Perl自己的open()文档有很多示例,您可以从那里复制典型的文件读取循环

  • 如果您使用文档中所写的文件slurp,您可以一次性写出“整个文件”(!)

    #从行数组中写出一个完整的文件write_file('filename',@ lines);

  • 所以你需要

    1. 使用File :: Slurp到read_file()整个文件,然后迭代数组以修改内容,然后立即write_file()整个数组,或
    2. 不要使用File :: Slurp,只打开两个文件(一个用'&lt;'表示阅读,一个带'&gt;'用于写作)
  • File::Slurp可能更容易编写(不是真的),但只是使用open,而自己打印的优点是你需要在内存中一次只保留一行。如果您正在处理千兆字节的文件,这会产生巨大的差异。

  • 不要个人接受,但我认为您需要自己研究更多,并在询问其他人之前使用标准文档。

  • 作为这类情况的一般建议,请从较小的示例开始。首先解决了打开文件并在stdout上打印内容的问题。然后添加您的输入处理 - 对内容的任何更改,或省略一些行,插入新行,等等。最后添加代码以将新行写入另一个文件。通过这种循序渐进的方法,您不会看到一堆问题,但可以一次解决一个小问题。

祝你好运!