String 连接字符串
我的算法设计有一个大问题,因为我使用的是大文本文件。 我有一个包含单词序列的文本文件。 乙二醇String 连接字符串,string,algorithm,perl,String,Algorithm,Perl,我的算法设计有一个大问题,因为我使用的是大文本文件。 我有一个包含单词序列的文本文件。 乙二醇 我的朋友们 你好,我的朋友们 世界 第二个文件是包含句子的大文件(GB)。 该程序的目标是通过单词(第一个文件)逐字查找,并在第二个文件中连接符号“+” 比如说 “你好,我的世界朋友们”作为输入成为 “你好+我的+朋友们来自这个+世界” 有什么想法吗? 我想用Perl来编程,Perl是用文本执行的 我已经用Perl编写了这个脚本,但速度太慢,因为它多次读取文件..:( 这是Perl程序的一个例子,它可
use strict;
use warnings;
use utf8;
use feature qw(:5.10);
my ($in, $dico) = @ARGV;
die "Bad infile $in" if !-r $in;
die "Bad dicofile $dico" if !-r $dico;
# load dico
my @dico;
open(FICHIERNOUVELLES, ">resultat7.txt");
open my $DICO, "<", $dico or die "Can't open $dico for reading: $!\n";
# For all lines in the Dico
foreach my $line (<$DICO>) {
chomp($line);
# extract words
if (my @word = split /\s+/, $line) {
my $re = q{(^\s*|\s+)(}.(join q(\s+), map quotemeta, @word).q{)(\s+|\s*$)};
push @dico, qr/$re/;
}
}
open my $IN, "<", $in or die "Can't open $in for reading: $!\n";
my @word;
foreach my $line (<$IN>) {
foreach my $dico (@dico) {
while (my (undef, $sequence) = $line =~ /$dico/) {
$sequence =~ s/\s+/+/g;
$line =~ s/$dico/$1$sequence$3/;
}
}
print FICHIERNOUVELLES "$line";
}
close(FICHIERNOUVELLES);
使用严格;
使用警告;
使用utf8;
使用功能qw(:5.10);
my($in$dico)=@ARGV;
死“坏填充$in”如果!-r$in;
死“坏的迪科菲尔$迪科”如果!-r$迪科;
#加载dico
我的@dico;
打开(FICHIERNOUVELLES,“>resultat7.txt”);
打开我的$DICO,“不多次读取第二个文件的解决方案是先从file1读取单词集,然后存储在数据结构中
use File::Slurp;
my @lines = read_file($filename1);
my %replacements = map { my $c = $_; $c =~ s/ / + /g; ( $_ => $c ) } @lines;
open (my $file2, "<", $filename2) or die "$!";
while (<$file2>) {
chomp;
foreach my $replacement (keys %replacements) {
s/$replacement/$replacements{$replacement}/g;
}
print $_;
}
使用File::Slurp;
my@lines=read_文件($filename1);
my%replacements=map{my$c=$\uz;$c=~s/+/+/+g;($\u=>$c)}@lines;
打开(我的$file2,"这是我对你问题的理解。第一个文件有一组单词,第二个文件有句子。在第二个文件中出现的每个单词之后,你必须添加+符号。我说的对吗?你能给我们看看你的代码吗?还有两个输入文件的一个简单示例,以及这些输入文件的输出应该是什么样子的?谢谢,我是dit我的postOK,我想我明白了…他想在第二个文件中找到字符串(定义在文件1中),并在第二个文件中用“+”替换该字符串的每个实例。是的,它是,它将单词与“+”合并,我将通过减少长度对%替换进行排序:对于每个$replacement(sort{length($b)length($a)}键(%replacements))
。这样,“你好,我的朋友”将在“我的朋友”之前匹配首先,谢谢你的帮助,我测试了你的脚本,但是有错误uuu./test.pl:ligne 1:use:commande introvable./test.pl:ligne 2:use:commande introvable./test.pl:ligne 3:use:commande introvable./test.pl:ligne 4:Erreur de syntax prèdu symbole inattendu(»./test.pl:ligne 4:`use feature qw(:5.10)“-@user17241:您是否在开始时添加了行#!/usr/bin/perl
(或您拥有的任何perl路径)?您可能没有安装File::Slurp。@user17241-您可以很容易地用my@lines;open(my$f)模拟read_文件(如果您不想对File::Slurp进行故障排除)