如何读取这个奇怪的逗号分隔文件并随机添加引号

问题描述 投票:0回答:1

我从银行应用程序收到 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"",""""";

嗯,这里最好的部分是通常包含分号,但随机有一行没有分号。

所以现在我的解决方案毫无用处,我更加困惑了。

php
1个回答
-1
投票

我认为你实现的方法是最简单、最好的方法,但是没有必要使用这些转换(考虑到改变字符串的编码可能会导致部分数据丢失)。

我用更简单的方式编写了这段代码:

$line = "2024-03-01, \"\"abc\"\", \"\"abc2\"\", 40, \"\"abc3\"\", \"\"\"\", \"\"\"\"";

$explodedArr = explode(',',$line);
$resultArray = [];
foreach($explodedArr as $arrElement){
    $resultArray[] = str_replace('"', "", $arrElement);
}

print_r($resultArray);
© www.soinside.com 2019 - 2024. All rights reserved.