2014-12-15 32 views
5

Ho un file .csv e quando l'ho aperto con blocco note assomiglia:Leggere un file CSV e creare un altro file CSV utilizzando PHP

ID501501503502 

E quando stampo nel browser tramite PHP, sembra come

ID 501 501 503 502 

il mio codice è:

$handle = fopen("MonC1.csv", "r"); 
$data = fgetcsv($handle, 0); 
$fh = fopen('php://output', 'w'); 
if (! empty($data)) { 
    foreach ($data as $item) { 
     echo $item."<br>"; 
    //fputcsv($fh, array($item)); 
    } 
} 

Quindi, in pratica il br tag all'interno del per loop non funziona. Questo è il mio primo problema.

E il secondo problema è anche se io usonon crea un file csv effettivo.

Ora la mia domanda è: come mai non ha spazio nel blocco note e quando stampo nel browser ottiene spazio?

Ho solo una colonna e nient'altro.

Qualsiasi aiuto è molto apprezzato. Grazie in anticipo.

+1

Quale HTML viene effettivamente generato da tale script? – EWit

+0

In realtà sta stampando il contenuto del file csv. Quindi se il file sorgente che è un file csv contiene ID123 allora echo sta stampando l'ID 1 2 3. Questo è il – Raj

+0

Stampa dove? @EWit chiede informazioni sulla fonte della risposta HTML. –

risposta

1

Come accennato nel mio commento, sembra che il tuo file originale venga salvato con terminazioni di linea UNIX, e quindi stai utilizzando fgetcsv in Windows, quindi l'intero file viene letto come una riga. Probabilmente c'è uno <br> alla fine dell'intero output.

Quindi, prima di elaborare il file, è necessario pre-elaborarlo per convertire le terminazioni di riga.

Su Linux, l'utilità unix2dos fa ciò che si desidera. Oppure, puoi semplicemente sostituire \n con \r\n nel tuo file.

L'altro problema è che fgetcsv non trasforma un intero file in un array. Invece, legge una singola riga dal tuo handle di file e la converte in un array. Avrai bisogno di leggere le righe all'interno di un ciclo:

while (($data = fgetcsv($handle)) !== FALSE) { 
    // $data contains one line of the CSV, in array form 
    // now you can fputcsv the single line 
} 
+0

Brillante. Ora sto ottenendo i dati scritti in un file CSV effettivo. Non è perfetto al 100% ma poiché non è correlato a questa domanda, probabilmente potrei postare un'altra domanda dopo aver trascorso del tempo. Ancora una volta, grazie mille per il tuo aiuto. – Raj

+0

Penso che non funzioni correttamente. Ho fatto mentre (($ data = fgetcsv ($ handle))! == FALSE) {echo $ data [0]. "
"; } ancora in uscita come singola linea nel browser. Non so quale sia l'errore che sto facendo. – Raj

+0

Scusa, la soluzione non funziona. – Raj