Navigazione

    Privacy - Termini e condizioni
    © 2020 Search On Media Group S.r.l.
    • Registrati
    • Accedi
    • CATEGORIES
    • Discussioni
    • Non letti
    • Recenti
    • Hashtags
    • Popolare
    • Utenti
    • Stream
    • Interest
    • Categories
    1. Home
    2. Categorie
    3. Coding e Sistemistica
    4. Coding
    5. [Risolto] Trasformare un file .txt in un array di array
    Questa discussione è stata cancellata. Solo gli utenti con diritti di gestione possono vederla.
    • M
      mentelibera User Attivo • ultima modifica di

      [Risolto] Trasformare un file .txt in un array di array

      Salve a tutti,
      in un file di testo .txt ci sono linee di questo tipo:

      
      /
      /a
      /a/d
      /b
      /c
      /a/d/e
      
      ```essendo **a..e** frasi e/o numeri.
      La domanda che volevo porre è questa: come trasformarare il file in un array di array senza il primo slash e cosiderando gli altri presenti nella stessa riga come i delimitatori tra gli elementi. Nell'array dell'array verrebbe escluso quello senza elementi della prima riga.
      
      In definitiva il precedente dovrebbe essere trasformato così:
      
      

      risultato = array(
      "0" => array("a"),
      "1" => array("a","d"),
      "2" => array("b"),
      "3" => array("c"),
      "4" => array("a","d","e")
      );

      
      [php]
      <?php
      
      $array1 = explode('\n', file_get_contents("elenco.txt"));
      
      foreach($array1 as $istanza) {
          $array2 = explode('/', substr($istanza, 1));
          if(count($array2) > 0) {
              // escludo i casi che non contengono elementi
          }
      }
      
      ?>
      [/php]Il mio problema che che non riesco a capire come si inserisca l'array più annidato in quello più esterno.
      
      Grazie per le dritte.
      0 Miglior Risposta Ringrazia Cita Rispondi

        1 Risposta Ultima Risposta
      • marcocarrieri
        marcocarrieri ModSenior • ultima modifica di

        Le righe hanno lo stesso carattere delimitatore dei valori presenti sulle righe?

        0 Miglior Risposta Ringrazia Cita Rispondi

          1 Risposta Ultima Risposta
        • M
          mentelibera User Attivo • ultima modifica di

          Sì, ci sono solo due delimitatori nel file:

          1. Quello di fine linea, suppongo '\n' essendo comune sia per quelli scritti con Linux ('\n') che con Windows ('\r\n');
          2. All'interno di una stessa riga l'altro separatore tra gli elementi è '/'

          Mi scuso per l'eventuale imprecisazione.

          0 Miglior Risposta Ringrazia Cita Rispondi

            1 Risposta Ultima Risposta
          • marcocarrieri
            marcocarrieri ModSenior • ultima modifica di

            Bene e l'eventuale utilizzo di questi array?
            Tipo un ciclo per scrivere la prima riga contentie queste parole... la seconda queste.... ecc?

            0 Miglior Risposta Ringrazia Cita Rispondi

              1 Risposta Ultima Risposta
            • M
              mentelibera User Attivo • ultima modifica di

              Esatto, mi piacerebbe ricavare i singoli elementi disponendoli ordinatamente, e magari anche le singole dimensioni degli array annidati, per esempio il 5.o del primo post (riporto per comodità, "4" => array("a","d","e")) dovrebbe riportare 3.

              Grazie.

              0 Miglior Risposta Ringrazia Cita Rispondi

                1 Risposta Ultima Risposta
              • marcocarrieri
                marcocarrieri ModSenior • ultima modifica di

                Ok... un po di analisi...
                E vedo ok... 🙂 ?
                E se la dimensione fosse calcolata non a priori, ma mentre splitti andrebbe bene lo stesso?

                0 Miglior Risposta Ringrazia Cita Rispondi

                  1 Risposta Ultima Risposta
                • M
                  mentelibera User Attivo • ultima modifica di

                  Sì, va benissimo anche il calcolo della dimensione in un momento successivo.

                  Prenditi tutto il tempo di cui hai bisogno, anch'io sto facendo delle ricerche online...

                  0 Miglior Risposta Ringrazia Cita Rispondi

                    1 Risposta Ultima Risposta
                  • M
                    mentelibera User Attivo • ultima modifica di

                    Non ho avuto modo di provare il codice qui sotto, ma mi è venuta in mente questa possibile soluzione almeno per trasferire i dati dal file all'array di array che consiste nel rimuovere la riga con il solo slash in fase di lettura.
                    Ecco il prototipo:

                    [php]
                    // Legge il file e rimuove l'elemento inutile
                    $contenuto_file = file_get_contents("elenco.txt");
                    $contenuto_file = str_replace('/\n', '', $contenuto_file); // per file testuali Linux
                    $contenuto_file = str_replace('/\r\n', '', $contenuto_file); // per file testuali Windows

                    // Inserisce nell'array le righe del file e poi crea quelli annidati
                    $array = explode('\n', $contenuto_file);
                    $array = explode('/', $array);
                    [/php]Per le altre operazioni non saprei come procedere. :gtsad:

                    0 Miglior Risposta Ringrazia Cita Rispondi

                      1 Risposta Ultima Risposta
                    • marcocarrieri
                      marcocarrieri ModSenior • ultima modifica di

                      Una cosa cosi può andare bene come inizio?

                      [php]
                      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                      <html xmlns="http://www.w3.org/1999/xhtml">
                      <head>
                      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                      <title>Analisi testo</title>
                      <style type="text/css">
                      html,body
                      {
                      margin:0px;
                      padding:0px;
                      background:#AAD4FF;
                      }
                      </style>
                      </head>
                      <body>
                      <?php
                      $percorsoFile="testo.txt";
                      $contenuto_file=file_get_contents($percorsoFile);
                      $righe=split("\n",$contenuto_file);
                      $numerorighe=count($righe);
                      echo "Il file contiene $numerorighe righe.<br />";
                      $numeroriga=0;
                      foreach($righe as &$riga)
                      {
                      $numeroriga=$numeroriga+1;
                      $elementi=explode("/",$riga);
                      $numeroElementi=count($elementi)-1;
                      echo "La riga numero $numeroriga contiene $numeroElementi elementi<br />";
                      $numeroElemento=0;
                      foreach($elementi as &$elementoriga)
                      {
                      $numeroElemento=$numeroElemento+1;
                      if($numeroElemento>1)
                      {
                      echo "==>$elementoriga<==<br />";
                      }
                      }
                      }
                      ?>
                      </body>
                      </html>
                      [/php]

                      0 Miglior Risposta Ringrazia Cita Rispondi

                        1 Risposta Ultima Risposta
                      • M
                        mentelibera User Attivo • ultima modifica di

                        Mi sembra buono ma non ho capito una cosa, perché nei foreach(){ } metti come argomento un reference anziché il nome della variabile, in sostanza non dovrebbe essere, per esempio:

                        foreach($righe as $riga){/.../}

                        Grazie.

                        0 Miglior Risposta Ringrazia Cita Rispondi

                          1 Risposta Ultima Risposta
                        • marcocarrieri
                          marcocarrieri ModSenior • ultima modifica di

                          Beh, nel php sono solo dilettante, però ho visto che la sintassi data sembra essere quella.

                          php.net/manual/en/control-structures.foreach.php

                          0 Miglior Risposta Ringrazia Cita Rispondi

                            1 Risposta Ultima Risposta
                          • M
                            mentelibera User Attivo • ultima modifica di

                            Generalmente ad una variabile viene esplicitato il reference nel parametro formale della funzione quando questa ne cambierà il contenuto. In questo caso non c'era alcun problema 🙂

                            Stavo facendo una prova e mi sembra che ci sia un problema poiché prende in considerazione pure la riga con il solo slash che invece non dovrebbe prendere.

                            Ho messo temporaneamente sul mio sito l'effetto a questo riferimento che poi rimuoverò:
                            w w w.cervia.name/esperimento1.php
                            il file di testo è qui:
                            w w w.cervia.name/testo.txt

                            Grazie, ciao.

                            0 Miglior Risposta Ringrazia Cita Rispondi

                              1 Risposta Ultima Risposta
                            • marcocarrieri
                              marcocarrieri ModSenior • ultima modifica di

                              Beh puoi sempre fare un trim dell'elemento e se quest'ultimo è uguale alla stringa vuota allora non stamparlo, non considerarlo.

                              0 Miglior Risposta Ringrazia Cita Rispondi

                                1 Risposta Ultima Risposta
                              • M
                                mentelibera User Attivo • ultima modifica di

                                Giusta osservazione.
                                Visto che il problema è stato risolto mi accingo a:

                                1. sostituire i link del mio post precedente con "...omissis...";
                                2. mettere "Risolto" al titolo del primo post.

                                Grazie, :gthi:

                                <addendum>
                                Contrordine, mi accorgo solo ora che non è più possibile modificare i post precedenti nonostante la buona intenzione...
                                </addendum>

                                0 Miglior Risposta Ringrazia Cita Rispondi

                                  1 Risposta Ultima Risposta
                                • marcocarrieri
                                  marcocarrieri ModSenior • ultima modifica di

                                  E' lo si può fare entro 30 minuti...
                                  Ora vedo se chi ha il potere lo può fare. 🙂

                                  0 Miglior Risposta Ringrazia Cita Rispondi

                                    1 Risposta Ultima Risposta
                                  Caricamento altri post
                                  Rispondi
                                  • Topic risposta
                                  Effettua l'accesso per rispondere
                                  • Da Vecchi a Nuovi
                                  • Da Nuovi a Vecchi
                                  • Più Voti