Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Problema explode stringa

    Mi sono affacciato da pochissimo nel mondo delle espressioni regolari per maneggiare delle stringhe, ed ecco subito che mi trovo davanti a un problema.

    Ho visto che per separare una stringa esiste il comando
    explode(separatore, $stringa)
    o anche
    split(separatore, $stirnga)

    Il mio problema sta in quel separatore.
    Ho una stringa, lunga un numero imprecisato di righe, con questo formato

    Riga 1 \n
    Riga 2 \n
    Riga 3 \n
    \n
    Riga 4 \n
    Riga 5 \n
    Riga 6 \n
    Riga 7 \n
    \n
    (\n)
    Riga 1 \n
    Riga 2 \n
    .....

    In cui (\n) è una riga vuota che può essere presente o meno, secondo un criterio che non posso sapere a priori.

    Dovrei separare i vari blocchi di 7 righe per poi operare su ogni singolo blocco in seguito.
    Purtroppo mentre le righe dalla 2 alla 7 sono facilmente identificabili poichè ripetitive nei vari blocchi, la riga uno contiene in ogni blocco parole diverse (Nome e Cognome) e quindi non trovo un metodo per identificarla.

    Ho trovato due soluzioni teoriche, che però non so se e come possano essere applicate al codice php:
    - Identifico la riga 2 andando a cercare la prima parola che la compone (uguale per ogni blocco) e poi vado a fare un explode alla riga precedente (si può fare?Non credo)
    - Conto le righe non vuote, e ogni 7 righe non vuote faccio un explode (mi sembra più fattibile, ma non so ugualmente come)
    -Altro a cui non ho pensato

    EDIT. corretto un po' di errori di battitura

  2. #2
    Se il problema (come sembra) si riconduce a cancellare le doppie righe vuote puoi semplicemente fare un:

    Codice PHP:
    str_replace("\n\n""\n"$stringa); 

  3. #3
    IL problema delle doppie righe vuote era uno, e ti ringrazio per la soluzione (a leggerla ora è così elementare che mi sento tanto stupido a non averla pensata prima!)

    Il problema principale però è che vorrei dividere ogni blocco di 7 righe non vuote in modo da poterci lavorare sopra a gruppi di 7, e non tenendole tutte unite

    In pratica io ora ho:
    stringa =
    Riga 1 \n
    Riga 2 \n
    Riga 3 \n
    \n
    Riga 4 \n
    Riga 5 \n
    Riga 6 \n
    Riga 7 \n
    \n
    (\n)
    Riga 1 \n
    Riga 2 \n
    ....


    e vorrei arrivare ad avere
    stringa 1 =
    Riga 1 \n
    Riga 2 \n
    Riga 3 \n
    Riga 4 \n
    Riga 5 \n
    Riga 6 \n
    Riga 7 \n

    stringa 2 =
    Riga 1 \n
    Riga 2 \n
    Riga 3 \n
    Riga 4 \n
    Riga 5 \n
    Riga 6 \n
    Riga 7 \n

    stringa 3 =
    ....

    dove le righe dalla 2 alla 7 sono simili nel'lintestazione (Riga 2 = Telefono: xxxxxxxx, Riga 3 = Indirizzo: xxxxxxxxx) e quindi facilmente individuabili, mentre la Riga 1 contiene Nome e Cognome e quindi varia di molto da blocco a blocco.

    Il fatto di volerli separati mi serve per poi poter decidere il criterio con cui riordinare i dati, dopo averli ulteirormente elaborati.

  4. #4
    Una volta che hai tolto le righe vuote puoi fare una cosa così:

    Codice PHP:
    $array = array();  // qui c'e' il tuo array
    $arrayDiArray = array(); // qui c'è un array di array
    for ($i 0$i count($array); $i += 7)
      
    $arrayDiArray array_slice($array$i7); 

  5. #5
    Originariamente inviato da margherite
    Se il problema (come sembra) si riconduce a cancellare le doppie righe vuote puoi semplicemente fare un:

    Codice PHP:
    str_replace("\n\n""\n"$stringa); 
    Capito questa parte di codice, ecco che vado a metterla in pratica e...
    non funziona.

    Inserisco la seguente riga:
    Codice PHP:
    $rosa str_replace("\n\n""\n"$rosa); 
    e la stringa $rosa passa indenne attraverso questa riga.
    Allora ho provato ad usare il carattere \r, senza successo.
    Sono andato a cercare e ho trovato questo: /^\s*$/ come indice di riga vuota, e ho provato ad inserire lui nel replace, ma niente di niente anche in questo caso....

    Per curiosità poi ho provato a inserire il seguente codice:
    Codice PHP:
    $lines     explode("\n"$rosa);
    echo 
    count($lines), "
    "

    e mi restituisce il numero esatto di righe che corrispondono alla stringa (comprese quelle vuote), quindi l carattere \n è presente alla fine di ogni riga.

    Cosa c'è di sbagliato nel codice suggeritomi da margherite?

    Inoltre la seconda parte del codice suggeritomi, in pratica in $array metto prima tutte le righe singole che prendo con un semplice explode come quello postato sopra, e poi in $arrayDiArray mi ritrovo con tanti blocchi di 7 righe, che poi tratto come meglio credo pe rle elaborazioni successive. Giusto?

    Grazie mille!!!!

  6. #6
    Per il replace verifica che non ci siano spazi o altre cose simili.
    Puoi vederlo così:

    Codice PHP:
    $lines     explode("\n"$rosa); 
    print_r($lines); 
    Ti fa il dump delle righe.
    La seconda parte è così ti crea un array in cui in ciascun elemento c'è un array di 7 elementi con le 7 righe.

  7. #7
    Grazie mille.
    In quel modo mi fa un aray con il numero di righe giusto e me lo presenta correttamente.

    Ho trovato che in alcune righe vuote se provegono da firefox è presente una tabulazione, mentre se arrriva da explorer è presente un 3-4 spazi vuoti. Inoltre a priori non so se questa riga è presente nella stringa o meno.

    /^\s*$/ posso usare questo per indicargli una riga vuota, contenente solo spazi e/o tabulazioni? Oppure il comando è un altro?

    Ho poi provato a fare un replace
    Codice PHP:
    $rosa eregi_replace("\n"" "$rosa); 
    ottenendo come risultato del print_r un array composto da un elemento solo, contenente tutta la stringa inserita, ma con gli a capo intatti.

    Non capisco più niente cosa ha che non va!!!!!

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.