Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 29
  1. #1

    Modifica posizione colonne in un file CSV - come fare?

    Salve,

    devo adattare un file csv prima che venga importato in un DB MYSQL , in particolare volevo capire come poter modificare la posizione delle colonne:

    da
    col1,col2,col3,col4

    in
    col3,col1,col2,col4


    e cambiare il separatore "," con ";"

    qualcuno ha già affrontato un problema analogo?
    grazie per informazioni e suggerimenti.

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    apri il file, lo leggi riga per riga, separi gli elementi ogni riga usando la "," come separatore, riordini l'array come serve a te concatenando gli elementi con il ";", scrivi la riga in un nuovo file...

    una cosa tipo questa
    Codice PHP:
    <?php
    $in 
    "file_in.csv"// sorgente
    $out "file_out.csv"// output

    $order = array(2,0,1,3); // ordinamento

    $out_data = array(); //nuovo array per l'output

    $input fopen($in"r"); // apro il sorgente in lettura
    $out fopen($out"a"); // apro l'output in scrittura 

    if ($input) {
        
    // scorro le righe del file
        
    while (($in_data fgets($input)) !== false) {
            
    // esplodo usando la virgola
            
    $parts explode(","$in_data);
               
    // scorro l'array ordinamento
               
    foreach($order as $k){
                    
    // metto in out i dati secondo il mio ordinamento
                   
    $out_data[] = $parts[$k];
               }
            
    // concateno usando il ";"
            
    $out_write implode(";"$out_data);
            
    // scrivo la riga nel file di output
            
    fwrite($out$out_write);
            
    // resetto l'array di output
            
    $out_data null;
        }
        
    // chiudo il file
        
    fclose($input);
    }
    // chiudo il file
    fclose($out);
    ?>

  3. #3
    Ma nel nuovo array per l'output devo inserire la voluta sequenza di colonne?

    E se avessi già un separatore ; e volessi mantenerlo cosa dovrei cambiare nel tuo script?

    grazie

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    la sequenza è settata nell'array $order
    il separatore lo setti nell'implode

    considera che quello che ti ho scritto è un codice non ottimizzato, fatto apposta per farti vedere le funzioni di explode, implode, scorrere un file per riga e scrivere un output...

    se devi leggere un csv, puoi usare anche la funzione fgetcsv ed elimini l'explode...

  5. #5
    Ho riprovato il tuo codice e devo dire che funziona.
    L'unico neo è che non mette le righe andando a capo ma le mette in sequenza ad es:

    file_in.csv
    1a-riga0;1a-riga1;1a-riga2;1a-riga3;
    2a-riga0;2a-riga1;2a-riga2;2a-riga3;

    File_out.csv
    1a-riga2;1a-riga0;1a-riga1;1a-riga32a-riga2;2a-riga0;2a-riga1;2a-riga3

    è possibile farlo andare a capo e mettere il ; alla fine di ogni riga?
    Un ultima funzionalità che mi servirebbe è quella di aggiungere colonne vuote ed effettuare il replacement di caratteri/parole non volute, possibile?

    Grazie per i preziosissimi suggerimenti.

  6. #6
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    prova fwrite($out, $out_write.'\n');

  7. #7
    Grazie stefano per la dritta ora riesco ad andare a capo ma senza il ; a fine riga.

    per inserire nuove colonne e rimpiazzare caratteri o parole?

    grazie

  8. #8
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    fwrite($out, $out_write.';'.'\n');

  9. #9
    Grazie ancora Stefano, risolto anche il ; finale

  10. #10
    Studiando un pò qua e là ho trovato e perfezionato il codice per effettuare il replacement di parole e caratteri soot i dettagli:

    ***********************************
    //replacement

    //Apre il file
    $str=implode("",file('file_in.csv'));

    $fp=fopen('file_in.csv','w');
    //rimpiazza qualcosa nel file aperto
    $str=str_replace('<FINERIGA>','ciao',$str);
    $str=str_replace('col0','COLONNA0',$str);

    //Riscrive il file
    fwrite($fp,$str,strlen($str));

    //chiude il file
    fclose($fp);
    ***********************************

    ora mi rimane da capire come inserire colonne vuote.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.