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

    Eliminare o ignorare riga in file di testo

    Allora, ho bisogno di un suggerimento, che magari è una cavolata, ma per me che ho smesso di programmare php da 8 anni... no!
    Vi spiego il problema:
    ho un file di dati, che può o no avere un'intestazione. Esempio:

    codice:
    "T (JD)","Obj1","Ref1","Ref2","Ref3","Ref4" 
    2455994.2632870371,-0.2782,-0.2833,0.0415,0.2236,0.0841 
    2455994.2684953702,-0.2753,-0.2808,0.0453,0.2237,0.0766 
    2455994.2721296297,-0.2748,-0.2817,0.0420,0.2278,0.0776 
    2455994.2746296297,-0.2705,-0.2813,0.0426,0.2227,0.0808 
    2455994.2771296296,-0.2755,-0.2802,0.0435,0.2237,0.0776 
    2455994.2796180556,-0.2753,-0.2788,0.0395,0.2252,0.0785 
    2455994.2846296295,-0.2775,-0.2825,0.0487,0.2156,0.0825
    2455994.2871412039,-0.2774,-0.2794,0.0407,0.2248,0.0784
    Adesso, io devo fare delle operazioni con i dati in questo file, ma se ha l'intestazione, non riesco a capire come eliminare la riga non-numerica (che in genere comincia così come la si vede oppure con il classico simbolo di commento #) che genera sempre errore nello script.
    Il codice che elabora la cosa è questo (rozzo, ma funzia, almeno...):

    Codice PHP:
    $data=file($data2); 
    foreach(
    $data as $k => $v)
         {     
         if(
    strpos($v"\t")!==false
            {
             
    $s="\t";
             }
         elseif(
    strpos($v",")!==false)
             {
             
    $s=",";
             }
         else
             {
             
    $s=" ";
             }
         
    $campo=explode($strim($v), 100);
          foreach(
    $campo as $b => $n)
             {
             if(!
    floatval($n)==0)
                 {
                 
    $valore[]=trim($n);
                 }
                 }
         
    $somma=0;
         
    $numconf=0;
         for(
    $i=2$i<=$b;$i++)
             {
             
    $somma=$somma+$campo[$i];
             
    $numconf=$numconf+1;
             }
         
    $somma=$somma/$b;
         
    $jd=$campo[0];
         
    $jd1[$k]=$jd;
         if(!
    $numconf==0)
             {
                 if(
    $tipobs=='mag')
                 {
                 if(
    $campo[1]<$campo[2])
                     {
                     
    $flux=($campo[1]-$somma);
                     }
                 else
                     {
                     
    $flux=($somma-$campo[1]);
                     }
                 }
             else
                 {
                 if(
    $somma==0)
                     {
                     
    $somma=1;
                     }
                 
    $flux=($campo[1]/$somma);
                 }
             }
         else
             {
             
    $flux=$campo[1]*-1;
             } 
    all'inizio vedo i separatori di colonna quali sono, poi mi faccio l'array per la riga e il trattamento. Credo che per eliminare una riga non facente parte dei dati dovrei farlo prima... ma fare...COSA?
    Grazie a chi mi aiuterà.

    Τί ουν ποιήσε ϕιλοσοϕίας πέρι; πή τρέψή άγνοουμένων τούτων;

  2. #2
    Così a occhio, è banale notare che (ad esempio) le righe "buone" non contengono lettere, quindi:

    Codice PHP:
    foreach($data as $k => $v)
         {    
         if(
    preg_match('/[A-Z]/i'$data))
              continue;
         [...] 
    che semplicemente salta le righe contenenti delle lettere

    Attenzione che, in questo caso, il primo $k utile sarà 1 e non 0 (in questo pezzo di codice è indifferente, ma non so che uso tu ne faccia successivamente)

  3. #3
    Originariamente inviato da ZioLuffio

    Attenzione che, in questo caso, il primo $k utile sarà 1 e non 0 (in questo pezzo di codice è indifferente, ma non so che uso tu ne faccia successivamente)
    Ecco! Mi si è posto esattamente questo problema...
    Ho impostato al primo passaggio $k=$k-1, ma ovviamente quando la riga non c'è l'array parte da -1... errore!
    Mi serve un marcatore...
    Come faccio adesso a mantenere il conteggio di $k (o di una variabile istanziata ad-hoc) "regolare"?
    Questo mi sta facendo sclerare.

    Τί ουν ποιήσε ϕιλοσοϕίας πέρι; πή τρέψή άγνοουμένων τούτων;

  4. #4
    Risolto, ho impostato una variabile fittizia uguale a zero prima del ciclo e alla fine di un if in cui era avvenuto lo scarto della riga testuale ho dato un +1 alla stessa variabile.
    Grazie mille!

    Τί ουν ποιήσε ϕιλοσοϕίας πέρι; πή τρέψή άγνοουμένων τούτων;

  5. #5
    Lieto di esserti stato utile cmq avresti potuto evitarti la noia semplicemente togliendo il $k, cioè con $jd1[] = $jd, come hai fatto con $valore, poi ripeto che non so come tu lo abbia implementato al di fuori di questo pezzo di codice

    Buona giornata!

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.