1

我正在尝试输出 csv 文件中的每一行,并且似乎分隔符被忽略了...我确定我的语法在某处是错误的,但似乎无法查明它...

CSV 文件如下所示:

ID,Code,Count
TM768889,02001,10
TM768889,02002,10
TM768889,02003,10
TM768889,02004,10
TM768889,02005,10

我正在尝试输出:

   0 - ID,Code,Count
   1 - TM768889,02001,10
   2 - TM768889,02002,10
   3 - TM768889,02003,10
   4 - TM768889,02004,10
   5 - TM768889,02005,10

但相反,它输出的是:

0 - ID
1 - Code
2 - Count TM768889
3 - 02001
4 - 10 TM768889
5 - 02002
6 - 10 TM768889
7 - 02003
8 - 10 TM768889
9 - 02004
10 - 10 TM768889
11 - 02005
12 - 10

这是我的代码:

  $row = 0;
  if(($handle = fopen($_FILES["Filedata"]["tmp_name"], "r")) !== FALSE) {
              $string = '';
              while(($line = fgetcsv($handle,1000,",")) !== FALSE) {
                    $num = count($line);
                    $row++;
                    for($c=0; $c < $num; $c++) {
                              $string .= $c.' - '.$line[$c].'<br />';
            }
          }     
  fclose($handle);
  echo $string;
  }
4

2 回答 2

1

为什么要打扰fgetcsv?你只是把这条线吐出来,所以看起来你可以fgets改用:

  $row = 0;
  if(($handle = fopen($_FILES["Filedata"]["tmp_name"], "r")) !== FALSE) {
              $string = '';
              while(($line = fgets($handle)) !== FALSE) {
                    $row++;
                    $string .= $row.' - '.$line.'<br />';
            }
          }     
  fclose($handle);
  echo $string;
  }

您的问题是您正在为 CSV 文件中的每个值打印一整行,而不是像您想要的那样将整行打印出来。

于 2010-04-03T19:38:05.187 回答
1

首先,您的代码不会打印您粘贴的内容。计数器与 $c 变量不匹配。

这就是我得到的:

0 - ID
1 - Code
2 - Count
0 - TM768889
1 - 02001
2 - 10
0 - TM768889
1 - 02002
2 - 10
0 - TM768889
1 - 02003
2 - 10
0 - TM768889
1 - 02004
2 - 10
0 - TM768889
1 - 02005
2 - 10

如果您的数据文件不是很大,那么我建议您使用 file() 函数将文件加载到数组中。然后你可以遍历数组并输出简单的行的值。

$lines=file($_FILES["Filedata"]["tmp_name"]);
foreach($lines as $line) print($line.'<br/>');

如果您随后需要解析该行,那么只需使用 explode() 函数来获取每个值。

于 2010-04-03T19:52:40.577 回答