【问题标题】:Using fgetcsv to replace commans within numbers使用 fgetcsv 将逗号替换为数字
【发布时间】:2023-02-14 02:18:10
【问题描述】:

我有以下 CSV 数据:

"Symbol","Name","Trade Volume","Trade Value","UIN Settlement Volume ","UIN Settlement Value ","UIN Percentage Volume","UIN Percentage Value "
"786","786 INVESTMENT LIMITED","500.00"," 2,325.00 ","500.00"," 2,325.00 ","100.00 ","100.00 "
"ABL","ALLIED BANK LIMITED","15,501.00"," 981,819.00 ","10,001.00"," 629,379.00 ","64.52 ","64.10 "
"ABOT","ABBOTT LABORATORIES (PAKISTAN) LIMITED","4,043.00"," 1,730,197.34 ","3,031.00"," 1,299,214.65 ","74.97 ","75.09 "
"ACPL","ATTOCK CEMENT PAKISTAN LIMITED","40,231.00"," 2,345,598.00 ","36,131.00"," 2,107,058.00 ","89.81 ","89.83 "
"ADAMS","ADAM SUGAR MILLS LIMITED","4,091.00"," 107,544.61 ","3,091.00"," 80,669.61 ","75.56 ","75.01 "

在使用 fgetcsv 拆分 w.r.t 逗号之前,我想从数字中删除命令。我该怎么做?

我当前的代码如下所示:

while (($row = fgetcsv($file, 1000, ",")) !== FALSE) {
            print("<br><b>Before</b><br>");
            print_r($row);
            $row = preg_replace('/([0-9]+),([0-9]+)/', '$1$2', $row);
            // $row = preg_replace('/"([0-9]+),([0-9]+)(.*?)"/', '"$1$2$3"', $row);
            print("<br><b>After</b><br>");
            print_r($row);
            $Symbol = $row[0];

【问题讨论】:

  • 为什么要在 fgetcsv() 之前执行此操作? fgetcsv() 将正确解析这些值,因为它们被引用了,并且去除后面的逗号要容易得多(只需 str_replace())并且不太可能中断。
  • @AlexHowansky 值2,325.00 仅存储为2
  • @AlexHowansky 我的意思是不使用 preg_replace,上面的结果来了,如果我使用 preg_replace 只有第一个值是有效的否则不是
  • 您不需要去除这些逗号,因为 fgetcsv() 不会在引号字符串内的逗号上中断。在调用 preg_replace() 之前发布 print_r($row); 的输出,您将在其中的值中看到 2,325.00
  • @AlexHowansky 我遇到了问题,截断它的是 mysql double 数据类型

标签: php fgetcsv


【解决方案1】:

您要从所有单元格中的数字中删除多余的逗号和空格吗?

fgetcsv 的结果是一个数组,而不是一个字符串。您需要处理每个项目

while (($row = fgetcsv($file, 1000, ",", """)) !== FALSE) {
    echo "<br><b>Before</b><br>" . PHP_EOL;
    print_r($row);
    $row = array_map(function($el) {
            if (preg_match("/^[. ,0-9]+$/", $el)) {
                $el = preg_replace("/,/", "", trim($el));
           }
           return $el;
        },
        $row);
    echo "<br><b>After</b><br>" . PHP_EOL;
    print_r($row);
    $Symbol = $row[0];
}

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 2022-07-21
    • 2013-12-10
    • 2017-02-25
    • 2017-05-29
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2019-05-01
    相关资源
    最近更新 更多