首页 > 解决方案 > 我需要比较两个差异文件csv的两列

问题描述

我是 PHP 语言的新手,我有 2 个 csv 文件,其中包含:前 2 列,第一列带有一些国家前缀,第二列带有对应国家/地区的名称。第二个有 2 列,第一个有电话号码,第二个通讯国。如果我发现前缀匹配,我需要比较这两个文件,我需要删除这个号码,并将其余电话号码添加到另一个文件中。例如:

   第一个文件 x.csv 第二个文件 y.csv


前缀国家电话号码
4474 英国 英国 44793245683...  
347466 西班牙 西班牙 34746689211345
3278比利时比利时324568845212.....
                         瑞士4189544562131...
                         英国 4474321546588464...
                         意大利 39324566546548345
                         英国 4478564684151...   

所以我想在另一个 fil z.csv 这个输出:

country     phone number
UK          44793245683...

Belgium     324568845212.....
Switzerland 4189544562131...
Italy       39324566546548345
UK          4478564684151... 

这意味着在这个数字中找到了匹配的前缀:

Country     Phone NUmber      Match Prefix
Spain       34746689211345    347466
UK          4474321546588464  4474 

标签: phpcsv

解决方案


这是示例文件和用法的答案:

档案一:

root@dib:~# cat 1.csv
prefix  country
4474    UK
347466  Spain
3278    Belgium

文件二:

root@dib:~# cat 2.csv
country     phone number
UK          44793245683...
Spain       34746689211345
Belgium     324568845212.....
Switzerland 4189544562131...
UK          4474321546588464...
Italy       39324566546548345
UK          4478564684151...

php脚本:

root@dib:~# cat find_numbers.php
<?php
$file1 = $argv[1];
$file2 = $argv[2];

// Get an array of each line of the first file.
$prefix_contry = explode("\n", file_get_contents($file1));

print "Country\t Phone NUmber\t Match Prefix\n";

foreach($prefix_contry as $prefix_line) {
    // Extract numbers from begging of each line.
    if(preg_match('/^([0-9]+)/', $prefix_line, $prefix_matches)) {

        if($file = fopen($file2, "r")) {

            // Loop through second file line by line...
            while(($line = fgets($file)) !== false) {
                $line = rtrim($line);

                // Pull out number from second file.
                if(preg_match('/([0-9]+)/', $line, $matches)) {

                    // Check to see if number begins with prefix.
                    if(preg_match("/^{$prefix_matches[1]}/", $matches[1])) {
                        print("$line\t{$prefix_matches[1]}\n");
                    }
                }
            }
            fclose($file);
        } else {   print "Couldn't open file.";   }
    }
}

?>

测试运行:

root@dib:~# php find_numbers.php 1.csv 2.csv
Country  Phone NUmber    Match Prefix
UK          4474321546588464... 4474
Spain       34746689211345      347466

推荐阅读