Visualizzazione risultati 1 fino 6 di 6

Discussione: preg_replace su più righe.

  1. #1
    phollia non è connesso Neofita
    Data registrazione
    05-02-2015
    Messaggi
    29

    Predefinito preg_replace su più righe.

    Buongiorno

    mi serve fare con PHP questa operazione:

    - Aprire un file (un csv)
    - Eliminare dal file aperto un carattere (il separatore) presente alla fine di ogni riga
    - Salvare il file corretto.

    Questo perchè la prima riga, quella con l'intestazione, non ha il carattere alla fine, mentre TUTTE le altre ce l'hanno, per cui elaborando il file mi trovo con un numero di campi maggiore rispetto ai campi mappati (poichè quel ";" alla fine crea un campo vuoto in più).

    Ho provato così:

    Codice PHP:
    $file "path/al/file.csv";

    $file_content file_get_contents($file);
    $p "/;$/mi";
    $file_content preg_replace($p""$file_content, -1);

    echo 
    $file_content
    Ma ottengo sempre e solo che la sostituzione viene fatta sull'ultima riga, le altre non vengono toccate.
    Ho provato ad usare anche il modificatore "D" ma niente, il risultato non cambia.

    Pensavo che potrei aprire e analizzare il file una riga alla volta, ma vorrei fare tutto in un solo passaggio.
    Come posso fare?

    Grazie.

  2. #2
    mzanella è connesso ora AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,055

    Predefinito

    Eseguendo quel codice su questo file CVS:
    Codice:
    a;b;c;
    d;e;f;
    ottengo il risultato desiderato, ovvero:
    Codice:
    a;b;c
    d;e;f
    Dunque immagino che il problema possa essere nel file CSV che non rispetta esattamente la struttura che ti aspetti. Per esempio, se tutte le righe tranne l'ultima contengono uno spazio dopo il separatore, si ottiene quanto hai descritto.

    Controlla bene il CSV e la sua struttura.

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  3. #3
    phollia non è connesso Neofita
    Data registrazione
    05-02-2015
    Messaggi
    29

    Predefinito

    Ho controllato il file e le righe non hanno nulla in particolare, finiscono con un ";" e il ritorno a capo.
    Però continuo ad avere come risultato la sostituzione nella sola ultima riga.

  4. #4
    mzanella è connesso ora AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,055

    Predefinito

    Hai provato con questo CSV?
    Codice:
    a;b;c;
    d;e;f;

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  5. #5
    phollia non è connesso Neofita
    Data registrazione
    05-02-2015
    Messaggi
    29

    Predefinito

    Provato in locale (XAMPP provato sia con php 5.4 che 7.0) e NON funziona. O meglio funziona nel modo che ho descritto, agendo solo sull'ultima riga.
    Provato qui su AlterVista e funziona e toglie il ; da tutte le righe.

    Adesso dovrò cercare e capire il perchè di questo comportamento.
    Ultima modifica di phollia : 15-07-2018 alle ore 20.10.53

  6. #6
    mzanella è connesso ora AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,055

    Predefinito

    Immagino che in locale tu stia usando Windows in locale: questo spiegherebbe tutto.

    Il $ di fine riga non funziona molto bene in Windows, per via del modo in cui esso codifica la fine di una riga.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •