php - 读取txt文件并使用php挑选部分并将每个部分保存到数据库中
问题描述
假设这是我的文本文件,逐行是由 * 分割的一段信息
ID 1*100042176*472**any info**5030*6*1 PA1*101*90*101******
ID 1=ID101 = ID102 = ID103 = and so on
所以我希望能够阅读这些信息并翻译
ID101=1000042176
ID102=472
ID103=
ID104=any info
ID105=
ID106=5030
ID107=6 ID108=1
PA101=101 PA102=90 PA103=101 etc.
每条信息都与一个表条目相关
我可以逐行读取文件,但无法弄清楚如何挑选每一行,然后在 * 之间挑选
任何帮助,将不胜感激。
<?PHP
function readCSV($csvFile){
$file_handle = fopen($csvFile, 'r');
while (!feof($file_handle) ) {
$line_of_text[\n] = fgetcsv($file_handle, 1024);
}
fclose($file_handle);
return $line_of_text;
}
// Set path to CSV file
$csvFile = 'merchant.txt';
$csv = readCSV($csvFile);
echo '<pre>';
print_r($csv);
echo '</pre>';
?>
解决方案
这部分取决于您的示例的文字程度,但您通常可以explode()
与正则表达式一起执行此操作。例如,此模式将匹配您提供的可以在线测试的内容。
/^ID (?<G1_ID>\d+)(?<G1>(\*[^*]*)+) PA(?<G2_ID>\d+)(?<G2>(\*[^*]*)+)$/
一旦你测试了模式,你的匹配数组将保存一堆命名值,你可以进一步explode()
将*
它们用作分隔符。
下面是将所有内容放入$final
数组的工作示例。
$test = 'ID 1*100042176*472**any info**5030*6*1 PA1*101*90*101******';
$pattern = '/^ID (?<G1_ID>\d+)(?<G1>(\*[^*]*)+) PA(?<G2_ID>\d+)(?<G2>(\*[^*]*)+)$/';
if (!preg_match($pattern, $test, $matches)) {
throw new RuntimeException('Not matched');
}
$group_1_id = $matches['G1_ID'];
$group_2_id = $matches['G2_ID'];
$group_1_parts = explode('*', $matches['G1']);
$group_2_parts = explode('*', $matches['G2']);
if (count($group_1_parts) < 2) {
throw new RuntimeException('Group 1 does not have enough asterisks');
}
if (count($group_2_parts) < 2) {
throw new RuntimeException('Group 2 does not have enough asterisks');
}
$final = [];
for ($i = 1; $i < count($group_1_parts); $i++) {
$i_padded = str_pad($i, 2, '0', STR_PAD_LEFT);
$final[] = "ID${group_1_id}${i_padded}=${group_1_parts[$i]}";
}
for ($i = 1; $i < count($group_2_parts); $i++) {
$i_padded = str_pad($i, 2, '0', STR_PAD_LEFT);
$final[] = "PA${group_1_id}${i_padded}=${group_2_parts[$i]}";
}
print_r(array_values($final));
推荐阅读
- r - R 为我制作了错误的列联表
- arrays - 最大和的数组操作
- c++ - 为什么我不能正确链接 opengl 库?(Windows、mingw、命令行)
- javascript - 如何在 JavaScript 中有效地将大块细分为许多大小为 2 的小块
- swift - 有没有办法将 NStableView 数据导出为带有表格视图列标题的 PDF
- javascript - Javascript 上的 Neo4J 参数
- javascript - 尝试为我的 js 编辑器附加 js 控制台
- genetic-algorithm - 如何为符号回归选择特征
- python - 只能从命令行启动瓶子服务器吗?
- python - IndexError:python中数组的索引过多(仍然出现错误)