次は、正規表現を使用してカンマ区切りファイルを検索する例です。誰もが以下のコードをハッシュマップ検索に変換する方法を知っていますか?一致した場合、コードは両方のファイルから元の行を返す必要があります。ハッシュマップの使用とコンマ区切りファイルの検索
必ずしもハッシュマップを使用する必要はありません。あなたの解決策には、grep、ハッシュ、スマート検索、最初のものなど、配列を検索するための他の高速な方法も含めることができます。
これらの文書には何千ものレコードがあります。目的は、file1.csvの3列目とfile2.csvの4列目の類似項目を見つけることです。一致するものがあれば、両方の文書の行を結合します。
更新は:それは@データ2列
my $data_file1 = "file1.csv"; #contains in this file "james,smith,3 kids"
my $data_file2 = "file2.csv"; #contains in this file "jim,jones,tall,3 kids"
my $handle1;
my @temp_data1, @temp_data2;
open $handle1, '<', $data_file1;
chomp(@data1 = <$handle1>);
close $handle1;
open $handle1, '<', $data_file2;
chomp(@data2 = <$handle1>);
close $handle1;
foreach my $line1 (@data1)
{
@temp_data1 = split /,/ , $line1;
$not_found =1;
foreach my $line2 (@data2)
{
@temp_data2 = split /,/ , $line2;
if($temp_data2[3] =~ /$temp_data1[2]$/)
{
$not_found =0;
say $line1 .",". $line2;
}
}
if($not_found)
{
say "$line1 was not found";
}
}
*「ハッシュマップは必ずしも使用する必要はありません」*これは学校の割り当てですか? – Borodin
'my @ temp_data1、@ temp_data2'行は' @ temp_data1'を字句配列変数として宣言しますが、 'my_'は' @ temp_data2'には適用されません。これはカンマ演算子よりも厳密に束縛されるからです。あなたは 'my @ temp_data1;' @ temp_data2;と同等のものを書いていますが、それだけでステートメント内の配列を最適化することは最適化されます。 'my'は' use strict'がなければほとんど役に立たないし、あなたが書いた* Perlプログラムのすべての上に 'use warnings 'all''と一緒に使う必要があります。その単純な尺度はあなたにあなたのエラーを警告していました。 – Borodin
'$ not_found = 1'を初期化するのは混乱します。 '$ found'を使って論理を逆転させ、' $ 'が見つからなければ$ line1が "見つからない"と言うのが良いでしょう。 – Borodin