1

我有一个 Perl 脚本,它将包含多个句子 ( ) 的文本文件作为输入Sentences.txt。每个句子都用白线隔开。该脚本为Sentences.txt. 例如,Sent1.txt对于中的第一句Sentences.txtSent2.txt对于中的第二句Sentences.txt,依此类推。

当我尝试使用该函数将句子从Sentences.txt相应的单独文件 ( ) 打印并且该句子包含一个字符时,问题就出现了。我该如何解决这个问题?SentX.txtprintf%

这是代码:

#!/usr/bin/perl -w

use strict;
use warnings;

# Separate sentences
my $sep_dir = "./sep_dir";

# Sentences.txt
my $sent = "Sentences.txt";
open my $fsent, "<", $sent or die "can not open '$sent'\n";

# read sentences
my $kont = 1;
my $previous2_line = "";
my $previous_line = "";
my $mom_line = "";
while(my $line = <$fsent>){
    chomp($line);
    #
    $previous2_line = $previous_line;
    #
    $previous_line = $mom_line;
    #
    $mom_line = $line;
    if($mom_line !~ m/^\s*$/){
        # create separate sentence file
        my $fitx_esal = "Sent.$kont.txt";
        open my $fesal, ">", $fitx_esal or die "can not open '$fitx_esal'\n";
        printf $fesal $mom_line;
        close $fesal or die "can not close '$fitx_esal'.\n";
        $kont++;
    }
}
close $fsent or die "can not close '$sent'.\n";
4

2 回答 2

5

如果您只想按照找到的方式放置句子,为什么不使用print?% 没有问题。

如果printf需要,您需要将每个 % 替换为 %%,例如使用

$sentence =~ s/%/%%/g;
于 2013-10-21T09:02:43.897 回答
2

finprintf代表“格式”,而不是“文件” 。您缺少格式参数。

printf $fesal "%s", $mom_line;

但你可以简单地使用

print $fesal $mom_line;

要包含%(s)printf格式中,请将其加倍:%%.

于 2013-10-21T11:37:35.053 回答