Я любитель Perl. Недавно мне был предоставлен скрипт Perl, который принимает текстовый файл и удаляет все форматирование, за исключением того, что отдельные слова следует пробелу. Проблема в том, что скрипт неясно, как ввести расположение файла. Я создал некоторый код для запуска всего каталога файлов, но еще не смог выполнить код. Я отправлю исходный код, а затем добавлю. Спасибо за помощь!Нужна помощь в выполнении скрипта tolening perl
Оригинала:
while(<>) {
chomp;
s/\<[^<>]*\>//g; # eliminate markup
tr/[A-Z]/[a-z]/; # downcase
s/([a-z]+|[^a-z]+)/\1 /g; # separate letter strings from other types of sequences
s/[^a-z0-9\$\% ]//g; # delete anything not a letter, digit, $, or %
s/[0-9]+/\#/g; # map numerical strings to #
s/\s+/ /g; # these three lines clean up white space (so it's always exactly one space between words, no newlines
s/^\s+//;
s/\s+$/ /;
print if(m/\S/); # print what's left
}
print "\n"; # final newline, so whole doc is on one line that ends in newline
Моих изменения:
#!/usr/local/bin/perl
$dirtoget="1999_txt/";
opendir(IMD, $dirtoget) || die("Cannot open directory");
@thefiles= readdir(IMD); #
closedir(IMD);
foreach $f (@thefiles)
{
unless (($f eq ".") || ($f eq ".."))
{
$fr="$dirtoget$f";
open(FILEREAD, "< $fr");
$x="";
while($line = <FILEREAD>) { $x .= $line; } # read the whole file into one string
close FILEREAD;
print "$x/n";
while(<$x>) {
chomp;
s/\<[^<>]*\>//g; # eliminate markup
tr/[A-Z]/[a-z]/; # downcase
s/([a-z]+|[^a-z]+)/\1 /g; # separate letter strings from other types of sequences
s/[^a-z0-9\$\% ]//g; # delete anything not a letter, digit, $, or %
s/[0-9]+/\#/g; # map numerical strings to #
s/\s+/ /g; # these three lines clean up white space (so it's always exactly one space between words, no newlines
s/^\s+//;
s/\s+$/ /;
print if(m/\S/); # print what's left
}
print "\n"; # final newline, so whole doc is on one line that ends in newline
}}
Похоже, ваш старый код был запущен как это: '$ Perl script.pl inputfile.txt> outputfile.txt', потому что он читает файл имя которого было предоставлено в качестве аргумента и 'print' результаты. Поэтому было бы целесообразно отправить этот вывод в новый файл. Если вы хотите, чтобы он просматривал больше файлов, напишите обертку в Perl или, возможно, в bash. – simbabque
http://stackoverflow.com/questions/8023959/why-use-strict-and-warnings – TLP
Вместо всех этих сложных замен, почему бы не просто захватить буквы (и цифры, если вы хотите '###')? Например. 'my @words = $ document = ~/[az] + | \ d +/gi' – TLP