Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: eliminare i tab

  1. #1

    eliminare i tab

    Ciao,

    ho fatto qualche ricerca ma non sono pervenuto a nulla che mi fosse di valido aiuto.
    sto leggendo un file .dat i dati però presenti in questo file sono separati dai tab, avrei bisogno di eliminare i tab e sostituirli con una virgola, in modo da poter poi usare l'explode e memorizzare i dati in un array.
    una riga del file che leggo è del tipo:
    codice:
    25/06/02  00,00  6000    1.51    1.62  133.58  297.59   22.16   .315   .580   .110   .224   .285  -.136  -.015   .017   .036  -.051  -.010   .149   .069      .151    -12.1     .010     .013     .009     .012 -9999.000 -9999.000 -9999.000 -9999.000   -9999.9     -12.1
    dove gli spazi non sono degli spazi ma dei tab, a volte ce n'è uno a volte 2. Ora che ci penso, credo che siano dei tab..se fossero degli spazi come li potrei togliere, con str_replace facendolo agire più volte?
    help me..grazie.
    ciao.
    PeppePegasus

  2. #2
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    Volendo anche cosi':
    Codice PHP:

    $A 
    '11 22.5  1,2   12/13    3.3s Z';
    $x explode(' '$A);
    print 
    '<pre>'print_r($x); print '</pre>';

    foreach(
    $x as $key=>$valore){
        if(
    $valore=='')
            unset(
    $x[$key]);
    }
    print 
    '<pre>'print_r($x); print '</pre>'
    Explode sul singolo spazio ed eliminazione di ogni chiave array se = spazio, dato che ogni singolo spazio inizialmente viene messo nell array come singolo elemento

  3. #3
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Ce l'hai provato anche così?

    Codice PHP:
    explode("\t"$array); 

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  4. #4
    no la soluzione di neroux l'avevo provata ma niente, prende tutta la stringa (o la linea) come un unico elemento del vettore explode.
    Mentre la soluzione di m4rko80 nn l'ho capito e non mi funziona. Quello che tu chiamo $A è la mia variabile $linea, cioè tutta la linea, quindi $x è l'explode. successivamente non capisco cosa vuoi fare..alla fine dove è il mio array con i valori che mi servono?
    grazie.
    ciao.
    PeppePegasus

  5. #5
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    $x e' la riga esplosa.
    esplodendo sulla stringa intera e con singolo spazio come delimitatore viene creato l'array con sia i valori singoli(le varie diverse stringe) più gli spazzi nel mezzo alle stringhe( dato puo essere 1 ,2 un tab o piu). Ti rotrovi l'array con i valori ma anche gli spazzi(singoli) come valori.

    Nel foreach elimino ogni chiave array equivalente allo spazio(e quindi inutile)
    Il riamanente e' un array con i soli valori di stringa.
    Il mio risultato e' questo:
    Codice PHP:
    Array
    (
        [
    0] => 11
        
    [1] => 22.5
        
    [2] => 
        [
    3] => 1,2
        
    [4] => 
        [
    5] => 
        [
    6] => 12/13
        
    [7] => 
        [
    8] => 
        [
    9] => 
        [
    10] => 3.3s
        
    [11] => Z
    )

    Array
    (
        [
    0] => 11
        
    [1] => 22.5
        
    [3] => 1,2
        
    [6] => 12/13
        
    [10] => 3.3s
        
    [11] => Z

    elaborando questa riga $A = '11 22.5 1,2 12/13 3.3s Z';
    ps nel post gli spazzi vengone eliminati se doppi ma nel dump vedi che sono piu' e diversi

  6. #6
    Codice PHP:
    <pre>
    <?php 
    $row 
    '25/06/02  00,00  6000    1.51    1.62  133.58  297.59   22.16   .315   .580   .110   .224   .285  -.136  -.015   .017   .036  -.051  -.010   .149   .069      .151    -12.1     .010     .013     .009     .012 -9999.000 -9999.000 -9999.000 -9999.000   -9999.9     -12.1';

    $items preg_split('#\\s+#s'$row);

    print_r($items);
    ?>
    <pre>
    Oppure

    Codice PHP:
    <pre>
    <?php 
    $row 
    '25/06/02  00,00  6000    1.51    1.62  133.58  297.59   22.16   .315   .580   .110   .224   .285  -.136  -.015   .017   .036  -.051  -.010   .149   .069      .151    -12.1     .010     .013     .009     .012 -9999.000 -9999.000 -9999.000 -9999.000   -9999.9     -12.1';

    $items preg_split('#\\s\\s#s'$row);

    print_r($items);
    ?>
    <pre>

  7. #7
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    Bravo Filippo il risultato e' lo stesso ma non sono molto bravo con le espressioni o simimi

  8. #8
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Originariamente inviato da peppepegasus
    no la soluzione di neroux l'avevo provata ma niente, prende tutta la stringa (o la linea) come un unico elemento del vettore explode.
    Poi non erano tabulatori ma blanks normali, perché l'esempio per se funziona - appena provato

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  9. #9
    Per capire meglio..il vettore $items conterrà componente per componente i dati..cioè come se avessi fatto l'explode ma i dati sono spearati da virgole, giusto?
    ho usato questo codice:
    Codice PHP:
    while(!feof($p_file)) { // leggi fino alla fine del file
        
    $linea fgets($p_file255);
    //      echo "linea: $linea 
    ";                    
        inizio_lin=substr(
    $linea,0,4);
    //    echo "
    inizio riga$inizio_lin 
    ";
        if (
    $inizio_lin==" DOY") {
            continue;
        } 
                                
        
    $items = preg_split('#\s\s#s', $linea);
        echo "
    dato letto 0$items[0
    ";
    //    print_r(
    $items); // questo è superfluo x l'esecuzione

    ma ottengo questo risultato a video:
    codice:
    dato letto 0:
    dato letto 0: 25/06/02
    dato letto 0: 99.9
    e non riesco a capire da dove viene quel 99.9 se le prime tre righe del mio file sono:
    codice:
    DOY       h     Ndata   v_vet   v_scal    dir      Tm   s_dir     su     sv     sw    TKE     sT     uv     uw     vw     uT     vT     wT     u*     T*       z/L       H0      Cu2      Cv2      Cw2      CT2        hm        qm        sh        wh        HE       H0c 
     25/06/02  00,00  6000    1.51    1.62  133.58  297.59   22.16   .315   .580   .110   .224   .285  -.136  -.015   .017   .036  -.051  -.010   .149   .069      .151    -12.1     .010     .013     .009     .012 -9999.000 -9999.000 -9999.000 -9999.000   -9999.9     -12.1
     25/06/02  00,10  6000    1.32    1.35  100.69  297.44   11.96   .122   .287   .073   .051   .135  -.013  -.001   .005   .008  -.016  -.002   .070   .031      .310     -2.6     .005     .008     .005     .006 -9999.000 -9999.000 -9999.000 -9999.000   -9999.9      -2.6
    non mi convince. perchè se stampo la prima componente di $items mi dovrebbe stampare sempre la data!
    grazie. illuminatemi... :master:
    PeppePegasus

  10. #10
    Dipende dal fatto che le righe sono pià lunghe di 255 caratteri ma tu le leggi come se fossero lunghe di meno:

    Codice PHP:
     $linea fgets($p_file255); 

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.