php - 我需要比较两个差异文件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
解决方案
这是示例文件和用法的答案:
档案一:
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
推荐阅读
- c# - c# 将带逗号的字符串转换为数字
- android - 解析 JSON 并在 Listview 中显示检索/获取 URL 服务器“无数据”
- angularjs - 我如何在整个项目中维护 Oauth 令牌?
- r - R ggplot - 两条水平线之间的阴影
- axios - lambda中的Axios不等待响应
- mysql - 有没有办法通过 WHERE IN 语句将嵌套子查询中的别名列名传递给 UPDATE 语句?
- javascript - 在 React 中使用钩子创建事件处理程序的正确方法?
- firebase - Firebase 存储:获取文件相对路径的安全方法?(存储 HTML 文件)
- python - Python登录检查验证任何正确的字母
- android - Android Dialog + Leak Canary