Autore Topic: fare il parse di un file txt  (Letto 4681 volte)

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
fare il parse di un file txt
« il: 27 Settembre 2011, 23:50:03 CEST »
0
Ho pensato di inserire questo snippets perchè può tornare comodo in importazioni di dati da un file di testo.(ovviamente l'estensione del file può essere a fantasia) ;-)

Supponiamo di avere un file chiamato "Parole.txt", così strutturato(anche la struttura e pura fantasia):
Citazione
1;cane;Italiano
2;dog;Inglese

Questo invece è il mio layout xml:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout android:layout_height="wrap_content"
        android:orientation="vertical" android:id="@+id/linearLayout1"
        android:layout_width="fill_parent" android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <TextView android:layout_width="wrap_content" android:id="@+id/textView2"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:text="Difficoltà"
                android:layout_marginLeft="10sp" android:layout_marginTop="10sp"
                android:fadeScrollbars="true" android:layout_height="0dp" android:layout_weight="1"></TextView>
        <TextView android:id="@+id/txtDifficolta" android:textAppearance="?android:attr/textAppearanceLarge"
                android:text=""
                android:layout_width="match_parent" android:background="@color/Beige"
                android:textColor="@color/Black" android:layout_marginLeft="10sp"
                android:layout_marginRight="10sp" android:layout_height="0dp" android:layout_weight="1"></TextView>

        <TextView android:layout_width="wrap_content" android:id="@+id/textView2"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:text="Parola"
                android:layout_marginLeft="10sp" android:layout_marginTop="10sp" android:layout_height="0dp" android:layout_weight="1"></TextView>
        <TextView android:id="@+id/txtParola" android:textAppearance="?android:attr/textAppearanceLarge"
                android:text=""
                android:layout_width="match_parent" android:background="@color/Beige"
                android:textColor="@color/Black" android:layout_marginLeft="10sp"
                android:layout_marginRight="10sp" android:layout_height="0dp" android:layout_weight="1"></TextView>

        <TextView android:layout_width="wrap_content" android:id="@+id/textView2"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:text="Lingua"
                android:layout_marginLeft="10sp" android:layout_marginTop="10sp" android:layout_height="0dp" android:layout_weight="1"></TextView>
        <TextView android:id="@+id/txtLingua" android:textAppearance="?android:attr/textAppearanceLarge"
                android:text=""
                android:layout_width="match_parent" android:background="@color/Beige"
                android:textColor="@color/Black" android:layout_marginLeft="10sp"
                android:layout_marginRight="10sp" android:layout_height="0dp" android:layout_weight="1"></TextView>
        <Button android:text="Start Importazione" android:id="@+id/btnImport"
        android:layout_gravity="center_horizontal"
        android:layout_width="match_parent" android:layout_marginLeft="10sp"
        android:layout_marginRight="10sp" android:layout_marginTop="50sp" android:layout_height="0dp" android:layout_weight="1"></Button>
        <LinearLayout android:layout_width="match_parent" android:id="@+id/linearLayout2" android:baselineAligned="true" android:layout_height="0dp" android:layout_weight="2" android:layout_gravity="top">
                <TextView android:layout_width="wrap_content" android:id="@+id/textView2" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_marginLeft="10sp" android:layout_height="wrap_content" android:layout_marginTop="10sp" android:text="Sto importando la riga:"></TextView>
                <TextView android:layout_width="98dp" android:id="@+id/txtNumeroRiga"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_height="wrap_content" android:textColor="@color/Black"
        android:background="@color/Beige" android:layout_marginLeft="10sp"
        android:layout_marginTop="10sp"></TextView>
        </LinearLayout>
</LinearLayout>

Contiene delle textview dove vengono mappati i dati estratti dal file Parole.txt

Ora passiamo al codice, così strutturato:

Codice (Java): [Seleziona]
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import android.R.string;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class importParole extends Activity {

        // Dichiarazione oggetti
        TextView txtDifficolta;
        TextView txtParola;
        TextView txtLingua;
        TextView txtNumeroRiga;
        Button btnImport;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                Log.i("importParole", "BEGIN");
                setContentView(R.layout.importfile); //Carico layout
               
                                // Inizializzo gli  oggetti
                txtParola = (TextView) findViewById(R.id.txtParola);
                txtDifficolta = (TextView) findViewById(R.id.txtDifficolta);
                txtLingua = (TextView) findViewById(R.id.txtLingua);
                txtNumeroRiga = (TextView) findViewById(R.id.txtNumeroRiga);
                btnImport = (Button) findViewById(R.id.btnImport);

                                //Dichiaro l'evento del button
                btnImport.setOnClickListener(new OnClickListener()
                                 {

                        public void onClick(View v) {
                                // TODO Auto-generated method stub
                                Log.i("IMPORT", "BEGIN");

                                                                //Richiamo il metodo che esegue il parse
                                startImport();
                                Log.i("IMPORT", "END");
                        }
                });
        }

        // Metodo parse file
        private void startImport()
        {
                //Inizio
                int cont=0; //contatore delle righe processate
                String[] separated; //Array che conterra ogni singolo elemento di ogni linea del file
                File sdcard = Environment.getExternalStorageDirectory(); //punto sulla card esterna
                Log.i("IMPORT", sdcard.toString());
                //specifico il file da utilizzare che ovviamente sarà nella card
                File file = new File(sdcard,"parole.txt");
                //Leggo il contenuto del file
                try
                {              //BufferedReader fornisce un metodo readline per leggere una riga di testo
                        BufferedReader br = new BufferedReader(new FileReader(file));
                        String line; //variabile che conterrà la singola linea

                                                //Inizio ciclo di lettura fino alla fine del file
                        while ((line = br.readLine()) != null)
                        {
                                cont++;
                                separated = line.split(";"); //Effettuo lo split della singola linea nell'array

                                                                //Memorizzo ogni singolo elemento negli oggetti della view
                                txtDifficolta.setText(separated[0]);
                                txtParola.setText(separated[1]);
                                txtLingua.setText(separated[2]);
                                txtNumeroRiga.setText(String.valueOf(cont));//QUi ho dovuto castare il contatore per la                                                               visualizzazione                                        delle righe importata
                                Log.i("IMPORT", "5");
                        }
                }
                catch (IOException e)
                {
                        //Per gestire l'errore
                }

        }
}

Ovviamente in questo esempio vedremo solo l'ultima linea importata, ma nel ciclo io ad esempio gli elementi importati li salvo in un database.
Come separatore io ho usato il ";", ovviamente uno è libero di usare quello che vuole.
Anche se molto sintetico spero sia tornato utile. :-)
« Ultima modifica: 28 Settembre 2011, 09:12:13 CEST da Qlimax »
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline TheGianLu

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows 7 PRO x64
Re:fare il parse di un file txt
« Risposta #1 il: 30 Gennaio 2012, 11:52:21 CET »
0
Ciao!
Ho bisogno di splittare una stringa remota ed il tuo codice mi è d'aiuto.
Ho però un problema: il codice è questo
Codice (Java): [Seleziona]
try {
                                        support.clear();
                                        URL url = new URL(URL_del_file_remoto);                        
                                        BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
                                    String st;                                                             
                                   
                                    while ( (st= in.readLine()) != null) {
                                                             
                                    String[] temp = st.split("|");
                                   
                                    for(int i =0; i < temp.length ; i++)
                                        support.add( (temp[i]) );
               
                                    }
                                    in.close();
                                                                   
                                } catch (MalformedURLException e) {
                                } catch (IOException e) {
                                }
tutto dentro un ASyncTask

Il file sorgente usa come delimitatore il carattere |
Il file in questione è una cosa tipo:
12345|valore1|valore2|valore3|...

L'output però è qualcosa del tipo:
 (prima riga vuota: ed è già il primo problema)
1
2
3
4
5
|

Qualcuno puoi aiutarmi? Non capisco perchè invece non ritorni:
12345
valore1
valore2
...

Grazie mille a chiunque mi aiuterà!

Offline TheGianLu

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Windows 7 PRO x64
Re:fare il parse di un file txt
« Risposta #2 il: 30 Gennaio 2012, 14:54:55 CET »
+1
Problema risolto!
La sintassi corretta da utilizzare è
Codice (Java): [Seleziona]
String[] temp = st.split("\\|");
Now it works like a charm!

Offline mos

  • Nuovo arrivato
  • *
  • Post: 18
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    andorid galaxy 2.3.5
Re:fare il parse di un file txt
« Risposta #3 il: 07 Maggio 2013, 17:09:31 CEST »
0
ciao ragazzi ho un problema del salvataggio su file.txt delle coordinate gps..

non so quale sia il problema ma non riesco a vedere il reale valore nella stampa..

sapete dirmi come faccio a salvare riga per riga i valori di latiudine e longitudine??

il pezzo di file che stampa lo posto:
Codice (Java): [Seleziona]
package it.anddev.Tesi_gps;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import it.anddev.Tesi.R;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.text.format.Time;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

public class thesi_geoposizionamento extends MapActivity
{
        private TextView tvLatitudine;
        private TextView tvLongitudine;
        private TextView tvAccuratezza;
        char gps,wifi;
       

        //Riferimento alla MapView
        private MapView mapView;
        int i=0;

        //Riferimento al MapController
        MapController mapController;

        //Riferimento al MyLocationOverlay
        //private MyLocationOverlay myLocationOverlay;

        // Otteniamo il riferimento al LocationManager
        LocationManager locationManager;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);

                tvLatitudine = (TextView)this.findViewById(R.id.tvLatitudine);
                tvLongitudine = (TextView)this.findViewById(R.id.tvLongitudine);
                tvAccuratezza = (TextView)this.findViewById(R.id.tvAccuratezza);
                // Otteniamo il riferimento alla MapView
                mapView = (MapView)findViewById(R.id.mapView);//   la piu importante..

                // Otteniamo il riferimento al controller
                mapController = mapView.getController();

                // Rendiamo la mappa cliccabile e quindi ne permettiamo il pan
                //mapView.setClickable(true);

                // Utiliziamo i controlli predefiniti per la gestione delle operazioni di zoom
                //mapView.setBuiltInZoomControls(true);

                // Impostiamo la distanza dello Zoom a 12 (valori validi da 1 a 21).
                //mapController.setZoom(12);

                // Aggiungiamo l'overlay sulla mappa della nostra posizione
                //myLocationOverlay = new MyLocationOverlay(this, mapView);
                //List<Overlay> overlays = mapView.getOverlays();
                //overlays.add(myLocationOverlay);
                //myLocationOverlay.enableMyLocation();
               
               

                // Otteniamo il riferimento al LocationManager
                locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
                        do
                            {  
                               
                                 Toast.makeText(this, "1)questa è l'ora effettiva di partenza della prova",Time.EPOCH_JULIAN_DAY);
                                     if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
                                        {
                                               Toast.makeText(this, "1)GPS è attualmente disabilitato. E' possibile abilitarlo dal menu impostazioni.", Toast.LENGTH_LONG).show();
                                                   
                                               for(int i=0;i<200;i++)
                                                          {
                                            i++;
                                                      }
                                    // Registriamo il LocationListener al provider gps
                                        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,4,5,locationListener);
                                                //eseguo il salvataggio dei dati gps
                                       
                                       
                                              {
                                                // scriviFile(tvLatitudine,tvLongitudine,tvAccuratezza) ;      
                                                 // scriviFile(gps,tvLatitudine,tvLongitudine,tvAccuratezza) ;
                                                  scriviFile();
                                              }
                                                               
                                              //disabilito gps una volta che ho salvato i dati in modo da risparmiare la batteria.
                                              Toast.makeText(this, "1)operazione di scrittura coordinare finita!! GPS è attualmente abilitato.vuoi disabilitarlo dalle importazioni?", Toast.LENGTH_LONG).show();
                                             
                                              for(int i=0;i<200;i++)
                                                                 {
                                                   i++;
                                                             }
                                              //controllo se il wifi è abilitato
                                              if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
                                                  {
                                                 
                                                            Toast.makeText(this, "1)wifi è attualmente disabilitato. E' possibile abilitarlo dal menu impostazioni.", Toast.LENGTH_LONG).show();
                                                         locationManager= (LocationManager)getSystemService(Context.LOCATION_SERVICE);  
                                                            for(int i=0;i<200;i++)
                                                                         {
                                                                               i++;
                                                                             }
                                                  }
                                                 
                                                      // Registriamo il LocationListener al provider wifi
                                                      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,4,2, locationListener);
                                               
                                                      //eseguo il salvataggio dei dati wifi
                                                           {
                                                                  // scriviFile(wifi,tvLatitudine,tvLongitudine,tvAccuratezza) ;
                                                                  // scriviFile(tvLatitudine,tvLongitudine,tvAccuratezza) ;
                                                                  scriviFile();
                                                           }
                                                           
                                                           Toast.makeText(this, "1)operazione di scrittura coordinare finita!!wifi è attualmente abilitato.vuoi disabilitarlo dalle importazioni?", Toast.LENGTH_LONG).show();
                                                           for(int i=0;i<200;i++)
                                                                         {
                                                                               i++;
                                                                             }
                                                 }
                                           else
                                             {
                                                   locationManager= (LocationManager)getSystemService(Context.LOCATION_SERVICE);
                                                    // Registriamo il LocationListener al provider gps
                                                        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,4,2, locationListener);
                                                       
                                                                //eseguo il salvataggio dei dati gps
                                                              {
                                                               
                                                                 // scriviFile(gps,tvLatitudine,tvLongitudine,tvAccuratezza) ;
                                                                  //scriviFile(tvLatitudine,tvLongitudine,tvAccuratezza) ;
                                                                  scriviFile();
                                                              }
                                                              //disabilito gps una volta che ho salvato i dati in modo da risparmiare la batteria.
                                                             
                                                         Toast.makeText(this, "2)operazione di scrittura coordinare finita!! GPS è attualmente abilitato.vuoi disabilitarlo dalle importazioni?", Toast.LENGTH_LONG).show();
                                                              for(int i=0;i<2000;i++)
                                                                         {
                                                                               i++;
                                                                             }
                                                              //controllo se il wifi è abilitato
                                                              if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
                                                                  {
                                                                  locationManager= (LocationManager)getSystemService(Context.LOCATION_SERVICE);  
                                                                  Toast.makeText(this, "2)wifi è attualmente disabilitato. E' possibile abilitarlo dal menu impostazioni.", Toast.LENGTH_LONG).show();
                                                                             
                                                                            for(int i=0;i<200;i++)
                                                                                {
                                                                                       i++;
                                                                                    }
                                                                  }
                                                           // Registriamo il LocationListener al provider wifi
                                                              locationManager= (LocationManager)getSystemService(Context.LOCATION_SERVICE);    
                                                              locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,4,1,locationListener);
                                                               
                                                                      //eseguo il salvataggio dei dati wifi
                                                                           {
                                                                                   
                                                                                  // scriviFile(wifi,tvLatitudine,tvLongitudine,tvAccuratezza) ;
                                                                                   //scriviFile(tvLatitudine,tvLongitudine,tvAccuratezza) ;
                                                                                   scriviFile();
                                                                            }
                                                                           Toast.makeText(this, "2)operazione di scrittura coordinare finita!!wifi è attualmente abilitato.vuoi disabilitarlo dalle importazioni?", Toast.LENGTH_LONG).show();                  
                                                                              for(int i=0;i<200;i++)
                                                                                    {
                                                                                           i++;
                                                                                        }                        
                                                }
                                     i++;
                                                   
            }                  
               while(i<30);
       
            }          
                       
                        LocationListener locationListener = new LocationListener()
                      {
                @Override
                public void onLocationChanged(Location location)
                   {
                        // Aggiorna il marker della mappa
                        mapView.invalidate();
                        // Aggiorna la location
                        Double geoLat = location.getLatitude()*1E6;
                        Double geoLng = location.getLongitude()*1E6;
                        GeoPoint point = new GeoPoint(geoLat.intValue(), geoLng.intValue());
                        mapController.animateTo(point);

                        tvLatitudine.setText(Double.toString(getRound(location.getLatitude(), 5)));
                        tvLongitudine.setText(Double.toString(getRound(location.getLongitude(), 5)));
                        tvAccuratezza.setText(Integer.toString((int)location.getAccuracy())+" m");     
                }

                @Override
                public void onProviderDisabled(String provider) {
                        Toast.makeText(thesi_geoposizionamento.this,
                                        "onProviderDisabled "+provider, Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onProviderEnabled(String provider) {
                        Toast.makeText(thesi_geoposizionamento.this,
                                        "onProviderEnabled "+provider, Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onStatusChanged(String provider, int status,Bundle extras) {
                        Toast.makeText(thesi_geoposizionamento.this,
                                        "onStatusChanged "+provider+" status: "+status, Toast.LENGTH_SHORT).show();
                }
        };
       
           

        @Override
        public void onPause()
        {
                super.onPause();
                // Stoppa Listener delle posizioni
                if(locationManager != null)
                {
                        locationManager.removeUpdates(locationListener);
                        //myLocationOverlay.disableMyLocation();
                }
        }

        @Override
        protected void onResume()
           {
                 super.onResume();
                    // Registriamo il LocationListener al provider GPS
                 locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,4,2, locationListener);
                   //myLocationOverlay.enableMyLocation();
           }

 
         long endTime = System.currentTimeMillis();
                         
                  public static double getRound(double x, int digits)
                  {
                         double powerOfTen = Math.pow(200, digits);
                         return ((double)Math.round(x * powerOfTen) / powerOfTen);
                  }
        @Override
           protected boolean isRouteDisplayed()
             {
                  // TODO Auto-generated method stub
                    return false;
             }
        public void  scriviFile()
        //public void scriviFile(TextView tvLatitudine, TextView tvLongitudine, TextView tvAccuratezza)
        //public void scriviFile(char String,TextView tvLatitudine, TextView tvLongitudine, TextView tvAccuratezza)
            {
                Location location;
                  String path = "/sdcard/external_sd/ciao1.txt";
                try
                      {
                     File file = new File(path);
                       FileWriter fw=new FileWriter(file);
                            //fw.write("ciao a tutti");
                                   fw.write("tvLatitudine="+tvLatitudine.toString()+";"+"tvLongitudine="+tvLongitudine.toString()+";"+"tvAccuratezza="+tvAccuratezza+"\n");
                                //  fw.write(Double.toString());
                                    fw.write('\n');
                       fw.flush();
                     fw.close();
                    // scriviFile(String,tvLatitudine,tvLongitudine,tvAccuratezza) ;
                    // scriviFile(tvLatitudine,tvLongitudine,tvAccuratezza) ;
                }
                catch (IOException e)
                   {
                    e.printStackTrace();
               }
    }
}

 mi dite che modifiche devo fare al programma per poter avere i dati di latitudine longitudine nella forma:
latitudine=;longitudine=;
latitudine=;longitudine=;
latitudine=;longitudine=;
...
..
.
.
e cosi via..
quando stampo non riesco ad avere ad avere piu di una riga sul mio file!!!

grazie...