Меня просят сравнить два файла, которые содержат информацию на японском и английском языках. Я использую медленный подход, читаю два файла и помещаю их в два массива, а затем использую цикл while, чтобы проверить, находятся ли УСЛОВИЯ File_B В строках File_A.
File_A:
Это мальчик.
ハ ン カ
Она девушка.
Я мужчина.
Это яблоко большое.
Этот апельсин маленький.
File_B:
является
ハ ン カ
маленький
Вывод:
Я мужчина.
Это яблоко большое.
Программа, которую я написал, отлично работает. Однако файлы, которые я обрабатываю, очень большие. Время выполнения очень медленное, если я использую циклическое воспроизведение, как это Мой друг сказал мне, что я могу поместить файлы в хэш, и он будет работать намного быстрее. Я вижу смысл его использования, но файлы, которые у меня есть, случайные, а также термины в File_B могут быть в любой части File_A. В некоторых предыдущих постах я могу использовать разделение строк File_A, поместить строку в хеш и сравнить ее с File_B (также поместите File_B в другой хеш). Тем не менее, я не знаю, как это сделать, кроме использования ~ //, чтобы проверить, получил ли строка термин.
open(A_FILE, "<", "FILE_A.txt");
my(@a_lines) = <A_FILE>; # read file into list
close(A_FILE);
open(B_FILE, "<", "FILE_B.txt");
my(@b_lines) = <B_FILE>; # read file into list
my($b_lines);
close(B_FILE);
open(my $out, ">", "Useful.txt") or die "Can't open Useful.txt: $!";
$number = @b_lines;
foreach $a_line (@a_lines) # loop thru list
{
$found = 0;
my $sentence = $a_line;
$i = 0;
chomp($sentence);
while (($i <= $number-1) and ($found == 0)){
chomp($b_lines[$i]);
if ($sentence =~ /$b_lines[$i]/){
$found = 1;
}
$i++;
}
if ($found == 1) {
print $out $sentence."\n";
}
}