将数字保存为csv中的字符串


Saving numbers as a string in a csv

我正试图将一个带有前导零的数字的列放入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);
}

正如在评论中已经指出的那样,用双引号(")括起来的数字会产生类似"0123"的结果。

方法是添加一个开头单引号('),如文档中所写:

如果决定直接输入数字作为文本,请输入撇号(')首先。例如,对于列标题中的年份,您可以输入1999年,2000年和2001年。撇号在细胞中是不可见的仅指示要将条目识别为文本。这是例如,当您输入电话号码或邮政编码时非常有用它以0(0)开头,因为a的开头是0 (0以正常数字格式删除数字序列。

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

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

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

我只需要告诉Libre Office将该列显示为Text列而不是它认为最适合列/单元格的列

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