对程序进行了哪些更改,以便在第一个文本文件中读取其他文本文件中的输出。 目前它没有在其他文本文件中提供输出,从第一个文本文件读取。
我认为计划在某种程度上是正确的,但仍需要通过审核......
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)
答案 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);
所以你需要
read_file()
整个文件,然后迭代数组以修改内容,然后立即write_file()
整个数组,或 File::Slurp
可能更容易编写(不是真的),但只是使用open,而自己打印的优点是你需要在内存中一次只保留一行。如果您正在处理千兆字节的文件,这会产生巨大的差异。
不要个人接受,但我认为您需要自己研究更多,并在询问其他人之前使用标准文档。
作为这类情况的一般建议,请从较小的示例开始。首先解决了打开文件并在stdout上打印内容的问题。然后添加您的输入处理 - 对内容的任何更改,或省略一些行,插入新行,等等。最后添加代码以将新行写入另一个文件。通过这种循序渐进的方法,您不会看到一堆问题,但可以一次解决一个小问题。