解决php fgetcsv 读取csv文件数据不完整问题

在windows其它版本中

 代码如下 复制代码

# Open the File.
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    # Set the parent multidimensional array key to 0.
    $nn = 0;
    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
       
//print_r($data);
        # Count the total keys in the row.
        $c = count($data);
        # Populate the multidimensional array.
        for ($x=0;$x<$c;$x++)
        {
            $csvarray[$nn][$x] = $data[$x];
        }
        $nn++;
    }
    # Close the File.
    fclose($handle);
}
//print_r($csvarray);

这个代码没有任何问题,然后我放到了linux中发现有为空的字段了。

问题解析出来的数据不完整,有为空的字段
网上查了下说是在php5.2.8 中存在bug
解决办法是使用自定义函数

 代码如下 复制代码

function __fgetcsv(& $handle, $length = null, $d = ',', $e = '"') {
     $d = preg_quote($d);
     $e = preg_quote($e);
     $_line = "";
     $eof=false;
     while ($eof != true) {
         $_line .= (empty ($length) ? fgets($handle) : fgets($handle, $length));
         $itemcnt = preg_match_all('/' . $e . '/', $_line, $dummy);
         if ($itemcnt % 2 == 0)
             $eof = true;
     }
     $_csv_line = preg_replace('/(?: |[ ])?$/', $d, trim($_line));
     $_csv_pattern = '/(' . $e . '[^' . $e . ']*(?:' . $e . $e . '[^' . $e . ']*)*' . $e . '|[^' . $d . ']*)' . $d . '/';
     preg_match_all($_csv_pattern, $_csv_line, $_csv_matches);
     $_csv_data = $_csv_matches[1];
     for ($_csv_i = 0; $_csv_i < count($_csv_data); $_csv_i++) {
         $_csv_data[$_csv_i] = preg_replace('/^' . $e . '(.*)' . $e . '$/s', '$1' , $_csv_data[$_csv_i]);
         $_csv_data[$_csv_i] = str_replace($e . $e, $e, $_csv_data[$_csv_i]);
     }
     return empty ($_line) ? false : $_csv_data;
}

时间: 2024-10-27 04:48:00

解决php fgetcsv 读取csv文件数据不完整问题的相关文章

php使用fgetcsv读取csv文件出现乱码的解决方法_php技巧

本文实例讲述了php使用fgetcsv读取csv文件出现乱码的解决方法.分享给大家供大家参考.具体分析如下: 一般来说在php中碰到乱码多半是编码问题,在这里我们实例分析了fgetcsv读取csv文件乱码原因所在与解决方法. 例子如下: 复制代码 代码如下: function get_csv_contents( $file_target ){  $handle  = fopen( $file_target, 'r');  while ($data = fgetcsv($handle, 1000,

php fgetcsv读取csv文件代码

php教程 fgetcsv读取csv文件代码 function get_csv_contents( $file_target ){ $handle  = fopen( $file_target, 'r'); while ($data = fgetcsv($handle, 1000, ",")) {             $num = count($data);         echo "<p> $num fields in line $row: <br&

php使用fgetcsv读取csv文件乱码解决方法

例子    代码如下 复制代码 function get_csv_contents( $file_target ){  $handle  = fopen( $file_target, 'r');  while ($data = fgetcsv($handle, 1000, ",")) {     $num = count($data);   echo "<p> $num fields in line $row: <br>n";   $row+

php fgetcsv读取csv文件代码(1/2)

 代码如下 复制代码 function get_csv_contents( $file_target ){     $handle  = fopen( $file_target, 'r');     while ($data = fgetcsv($handle, 1000, ",")) {             $num = count($data);         echo "<p> $num fields in line $row: <br>

c++读取csv文件并赋值-如何通过c ++读取一个csv文件并将数据赋值给两个一位数组?

问题描述 如何通过c ++读取一个csv文件并将数据赋值给两个一位数组? 0 912.43 1.24 912.42 1.54 901.92 21.94 883.97 24.17 881.51 29.94 876.45 37.4 870.57 49.62 861.14 59.06 853.05 75.99 843.75 90.84 833.95 118.8 818.25 135.2 804.9 152.35 791.55 157.68 791.15 174.6 770.35 190.92 766.

csv-java中读取CSV文件时怎么处理数据当中的逗号?

问题描述 java中读取CSV文件时怎么处理数据当中的逗号? 现在要读取一个CSV文件,将内容读取后用excel的格式输出, 读取的时候使用StringTokenizer类,用逗号将CSV的数据用逗号一个个分割, csv的格式是这样的(值与值之间用半角逗号分隔): "aaa","bbb","ccc","ddd","eee"; 像这样的情况是没有问题的: 但是当数据中也有半角逗号时,例如: "aaa

基于PHP读取csv文件内容的详解_php技巧

一次性读取csv文件内所有行的数据 复制代码 代码如下: <?php $file = fopen('windows_2011_s.csv','r'); while ($data = fgetcsv($file)) { //每次读取CSV里面的一行内容//print_r($data); //此为一个数组,要获得每一个数据,访问数组下标即可$goods_list[] = $data; }//print_r($goods_list);/* foreach ($goods_list as $arr){ 

php读取csv文件并输出的方法

 本文实例讲述了php读取csv文件并输出的方法.分享给大家供大家参考.具体实现方法如下: <?php $row = 0; $j = 1; // Linea por la que quieres empezar $file = "name.txt"; //Nombre del fichero if (($handle = fopen($file, "r")) !== FALSE) { while (($data = fgetcsv($handle, "

《深入解析sas:数据处理、分析优化与商业应用》一一2.3 通过IMPORT过程读取外部文件数据

2.3 通过IMPORT过程读取外部文件数据 除了可以通过DATA步读取外部文本文件数据外,SAS还提供了IMPORT过程,通过它可以从外部数据源读取数据并写入SAS数据集中.而且,如果使用SAS/ACCESS to PC Files,IMPORT过程除了可以导入带分隔符的文件外,还可以读取PC文件中的外部数据,包括Microsoft Access数据库文件.Miscrosft Excel工作簿.Lotus 1-2-3文件.dBase文件.JMP文件.SPSS文件.Stata文件.Paradox