下面是使用正則表達式搜索逗號分隔文件的示例。有誰知道如何將下面的代碼轉換爲哈希映射搜索。如果匹配,代碼應該從兩個文件中返回原始行。使用哈希映射並搜索逗號分隔文件
您不必使用散列映射。您的解決方案可以包含任何其他更快的搜索數組的方法,例如grep,hash,智能搜索,第一等。
這些文檔中有成千上萬條記錄。目標是在file1.csv的第3列和file2.csv的第4列中找到類似的項目。如果有匹配,則從兩個文檔中加入這些行。
更新:忘了提,它應打印$一號線,如果它不@ DATA2陣列
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;'並且只是在一個聲明中提到一個數組將被優化。如果沒有'use strict','my'的用處很少,而且你*必須總是和*'*'每個你編寫的Perl程序的頂部一起使用'use warnings'all''。這個簡單的措施會提醒你你的錯誤。 – Borodin
初始化'$ not_found = 1'會令人困惑。使用'$ found'並反轉邏輯會更好,用'say'結束$ line1找不到「除非$ found」。 – Borodin