我从银行应用程序收到 CSV 文件,但我不知道如何管理它。
fgets
函数给出以下结果:
"2024-03-01, ""abc"", ""abc2"", 40, ""abc3"", """", """"";;
正如您所看到的,末尾有两个分号,其余部分用撇号括起来,然后有带或不带双撇号的值。所以我这样做了:
$line = fgets($file,);
$line = substr($line, 0, -5);
$line = substr($line, 1);
$line = str_replace('""', '"', $line);
$keys = str_getcsv(mb_convert_encoding($line, "UTF-8", "ISO-8859-2"), ",");
嗯,它工作得很好,但可能有一个比为每行都执行此解决方案更好的解决方案。
编辑。由于我检查了从其他日期生成的 CSV 文件,因此它无法正常工作。这种模式更不常见:
"2024-04-19,""2024-04-19"",""abc"",""-100.00"",""Title";" Comments"",""""";
嗯,这里最好的部分是通常包含分号,但随机有一行没有分号。
所以现在我的解决方案毫无用处,我更加困惑了。
我认为你实现的方法是最简单、最好的方法,但是没有必要使用这些转换(考虑到改变字符串的编码可能会导致部分数据丢失)。
我用更简单的方式编写了这段代码:
$line = "2024-03-01, \"\"abc\"\", \"\"abc2\"\", 40, \"\"abc3\"\", \"\"\"\", \"\"\"\"";
$explodedArr = explode(',',$line);
$resultArray = [];
foreach($explodedArr as $arrElement){
$resultArray[] = str_replace('"', "", $arrElement);
}
print_r($resultArray);