2010-04-03 329 views
1

我試圖在csv文件中輸出每一行,並且好像分隔符被忽略......我確定我的語法在某處出錯了,但似乎無法找到它...PHP - fgetcsv - 分隔符被忽略?

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; 
    } 

回答

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文件中的每個值的全系列,而不是像你打算的整個行。

+0

謝謝!我欣賞指針... – TwixxyKit 2010-04-03 19:48:43

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 

如果你的數據文件是不是巨大的話,我勸你將文件加載到使用文件()函數的數組。然後你可以通過數組循環並輸出只是線條的值。

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

如果您隨後需要解析該行,那麼只需使用explode()函數來獲取每個值。