PHP - fgetcsv - Sınırlayıcı göz ardı ediliyor?

2 Cevap php

Ben bir csv dosyasındaki her satırı çıktısı çalışıyorum, ve sınırlayıcı gözardı ediliyor gibi görünüyor ... benim sözdizimi yerde yanlış eminim, ama bunu saptamak için görünmüyor olabilir ...

CSV dosyası bu gibi görünüyor:

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

Ben çıktı çalışıyorum:

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

Ama bunun yerine, bu çıkış bulunuyor:

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

İşte benim kod:

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

2 Cevap

Neden rahatsız fgetcsv? Sadece hat alarak geri dışarı tükürme, bu yüzden sadece yerine fgets kullanabilirsiniz gibi görünüyor ediyoruz:

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

Senin sorunun niyetinde gibi değil, bir bütün olarak çizgi daha, CSV dosyasındaki her değer için tam bir çizgi yazdırarak olmasıdır.

Öncelikle sizin kod yapıştırılan baskı ne değildir. Sayaç $ c değişkeni uyuşmuyor.

Bu ne olsun:

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

Veri dosyası çok büyük değilse o zaman dosyayı () işlevini kullanarak bir diziye dosyayı yüklemek için tavsiye ederiz. Sonra yapabilirsiniz dizi ve çıkış sadece çizgi değeri aracılığıyla döngü.

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

Eğer çizgi ayrıştırmak için gerekiyorsa o zaman sadece her değerinde almak için explode () işlevini kullanın.