有一个输入文件夹, 和输出文件夹 和等效文件夹列表。
我在哪里可以开始研究,为了在输入文件夹中的列表文档中有一个单词,从等效列表中获取它的等价物,并进行替换并生成txt输出,总是在所有输出中使用utf8文档。
如果我有一个等价物列表:
bovine = cattle
cancrine = crab
canine = dog
cervine = deer
corvine = crow
equine = horse
elapine = snake
我有一个像这样的输入文件:
bovine cancrine canine cervine equine text1 text2 elapine.
我希望它在输出文件中是这样的:
cattle crab dog deer [text1] [text2] snake
text1和text2在方括号中,因为它们不在等效列表中。
但即使后面有昏迷或其他标点符号也能改变单词。 例如,输入如下:
bovine! cancrine, ,canine# cervine% $equine text1, text2,,, elapine......
应该返回:
cattle! crab, ,dog# deer% $horse [text1], [text2[,,, snake......
请使用perl脚本。
我应该说我不是程序员,但是我的一个朋友多年前为我制作了这样的程序,它只是几行,但这就是我所理解的。
我只记得他正在使用正则表达式:^[^=]+=[.*]+$
来读取类似的东西。
我使用的是活动perl,最新版本。 我希望在等价物中包括caracters°ŸÖ†ª或者其他ascii字符,我不能再联系我的朋友,所以我要求帮助这样做,将英语单词翻译成语音。 感谢
预计脚本应位于同一文件夹中,该文件夹包含3个文件夹,输入,输出和列表。 因此,如果我双击脚本,则应转换输入文本并将文件放在输出文件夹中。
感谢您的帮助
答案 0 :(得分:1)
perl
的一种方式:
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
open my $LOOKUP , "<" , "file.txt";
open my $LIST , "<" , "list.txt";
open my $OUTPUT , ">" , "output.txt";
my %h;
while (<$LOOKUP>) {
chomp;
my ($k, $v) = split /\s*=\s*/;
$h{$k} = $v;
}
while (<$LIST>) {
s/([a-zA-Z0-9]+)/$h{$1} || "[$1]"/eg;
print $OUTPUT $_;
}
perl -lpe '
BEGIN{$x=pop;%h=map{$_->[0]=>$_->[2]}map[split],<>;@ARGV=$x}
s/([a-zA-Z0-9]+)/$h{$1}||"[$1]"/eg' file.txt list.txt > output.txt