我正在阅读CSV文件以导入数据。我有一个列有一些自动生成的数字(文本和数字)。问题是在某些行中,我的脚本将值读为指数。
示例:58597E68被视为5.86E + 72
我需要将它读作字符串而不是数字。仅当我在自动生成的数字的中间有字符(E)时才会出现此问题。
$feed = 'path-to-csv/import.csv';
if (!file_exists($feed)) {
//$feed = 'import.csv';
exit('Cannot find the CSV file: ' . $feed);
}
$row=0;
if (($handle = fopen($feed, 'r')) !== FALSE) {
while (($data_csv_rows = fgetcsv($handle, 1000000, ',')) !== FALSE) {
$row++;
if ($row == 1) {
continue;
} // skipping header row
echo "Row " . ($row-1) . "<br>";print_r($data_csv_rows);echo "<br><br>";
}
}
答案 0 :(得分:1)
问题不在于您的CSV,而在于生成CSV的原始软件(可能是Excel)。
CSV是一种简单的数据格式,当您在CSV数据中找到类似5.86E+72
之类的内容时,它就太晚了,无法修复它。
为避免这种情况,请确保export the data correct into CSV。
用于在字段中查找此类错误数据的一些PHP代码:
if (strpos($value, 'E+') !== FALSE) {
preg_match('~E\+[0-9]+$~', $value, $preg_result);
if (isset($preg_result[0])) {
die('Probably wrong data found within "'.$value.'".');
}
}
}
在您it seems 58597E68
float(5.8597E+72)
转换为58597E68
的情况下。
至少str_getcsv()
我无法重新创建问题,请参阅https://3v4l.org/RZ1eA。
按definition这是正确的,因为没有&#34;围绕这些数据,所以PHP试图确定这些数据的类型,如果它是一个强大的数值...所以一定要添加&#34;围绕弦乐。 PHP String to Numeric Conversion documentation。
更新:我无法重现您的用例! "58597E68"
变为str_getcsv()
fgetcsv()
和pipelines:
default:
- step:
name: Build and test JS.
image: node:8.9.3
script:
- npm install
- npm test
- npm run-script build
- step:
name: Build and test PHP.
image: php:7-fpm
script:
- echo "Here will be the Composer build and PHPUnit tests."
branches:
production:
- step:
name: Build and test JS.
image: node:8.9.3
script:
- npm install
- npm test
- npm run-script build
artifacts:
- dist/**
- step:
name: Build and test PHP.
image: php:7-fpm
script:
- echo "Here will be the Composer build and PHPUnit tests."
artifacts:
- dist/**
- step:
name: Deploy to FTP.
image: samueldebruyn/debian-git
script:
- apt-get update
- apt-get -qq install git-ftp
- ls public_html
- git ftp push --user $FTP_USERNAME --passwd $FTP_PASSWORD ftp://$FTP_HOST
它不会自动转换为浮动!有关详细信息,请参阅https://3v4l.org/oXkBu!我怀疑您提供给我们的数据或您的验证有问题。