Pregunta

Estoy tratando de salida de cada línea en un archivo csv, y parece que el delimitador está siendo ignorada ... Estoy seguro de que mi sintaxis es un lugar equivocado, pero parece que no puede determinar que ...

El archivo CSV es similar al siguiente:

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

Estoy tratando de salida:

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

Pero en cambio, que es la salida siguiente:

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

Aquí está mi código:

  $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;
  }
¿Fue útil?

Solución

¿Por qué molestarse con fgetcsv? No eres más que tomar la línea y la volviera a expulsar, por lo que parece que sólo podría utilizar en lugar 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;
  }

Su problema es que está imprimiendo una línea completa para cada valor en el archivo CSV, en lugar de la línea en su conjunto como el que tenía planeado.

Otros consejos

En primer lugar el código no se imprime lo que ha pegado. El contador no se corresponde con la variable $ c.

Esto es lo que me sale:

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

Si el archivo de datos no es muy grande entonces yo le aconsejo a cargar el archivo en una matriz utilizando la función de archivo (). Entonces puede recorrer a través de la matriz y de salida el valor que es simplemente la línea.

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

Si este caso es necesario analizar la línea a continuación, sólo tiene que utilizar la función de explotar () para obtener en cada valor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top