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 に答える