2

我正在尝试将带有前导零的数字的列放入 csv 文件中,但它不断截断前导零,我该怎么做才能保留它们?

这是我正在使用的代码:

// fopen() here
function clean_zip($string){
    if(preg_match("/^\d{5,}/", $string)){
        $string = str_pad($string, 5, "0", STR_PAD_LEFT);
    }
    return $string;
}

while(($csv = fgetcsv($rhandle)) !== false){
    // other rows here
    $fcsv[9]  = (string)clean_zip($csv[9]);
    fputcsv($whandle, $fcsv);
}
4

3 回答 3

1

正如评论中已经指出的那样,用双引号 ( ") 将数字括起来会导致类似"0123".

方法是添加一个前导单引号 ( '),如文档中所述:

如果您决定直接输入数字作为文本,'请先输入撇号 ( )。例如,对于列标题中的年份,您可以输入 '1999、'2000 和 '2001。撇号在单元格中不可见,它仅表示该条目将被识别为文本。例如,如果您输入以零 (0) 开头的电话号码或邮政编码,这很有用,因为在正常数字格式中,数字序列开头的零 (0) 会被删除。

来源:将数字格式化为文本

数据现在被解析为字符串,这导致它在函数中被忽略。

另一种方法是将列格式化为文本列。

于 2017-10-16T13:15:58.123 回答
0

我只需要告诉 Libre Office 将该列显示为文本列,而不是它认为最适合列/单元格的内容。

于 2013-04-02T19:34:36.847 回答
-1

用双引号字符 (") 括起来。如果您确定只有数字,这很容易——如果字符串中可能有引号,您必须更加小心。

于 2013-04-02T19:17:24.337 回答