【发布时间】: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数据类型