Android

ANDROID
Códigos postales de España

getResources().openRawResource(getResources().getIdentifier(miProvincia, "raw", getPackageName()));


Encontré una base de datos de códigos postales de España y era una buena ocasión de hacer una aplicación que buscara los códigos por provincias y calles o pueblos.
En este caso había realizado esta aplicación en gambas(VB linux), luego la he realizado para android.
Estos datos de CP(códigos postales) se colocan en el directorio /res/raw ,y solo son de lectura. Estos datos están organizados por capitales y provincias, y en algún que otro caso en ciudades grandes como Reus, Fuenlabrada, etc.
El fichero indice se llama codciuz.txt donde figuran nombres de capitales y provincias, y el nombre de fichero que corresponde a dicha capital o provincia.

280:MADRID
28X:MADRID
150:A CORUÑA
030:ALACANT/ALICANTE

Para el ejemplo de Madrid capital el fichero se llamará a280codpos.txt . El fichero original se llamaba 280codpos.txt  , pero en los recursos internos los ficheros no deben empezar por numero, no distingue entre mayúsculas y minúsculas , además la extensión no se utiliza, por lo que tuve que renombrar los ficheros.
En el fichero  están los datos postales ordenados de la siguiente forma:
 
28021:A (EL SALOBRAL)
28032:ABAD JUAN CATALAN
28013:ABADA
28012:ABADES
28039:ABADESA
28043:ABALOS
28037:ABANICO

En este fichero se recorre buscando concordancias con el nombre de la calle que se quiere buscar.



Recomiendo ver el anterior androj.html programa para entender este.
Lo diferente de este programa frente al anterior es el nombre de fichero de la provincia. En este caso no sabemos su nombre hasta que no nos lo proporcione la búsqueda por provincia, y esto lo solucionamos con la siguiente orden:
ISentrada2 = getResources().openRawResource(getResources().getIdentifier(miProvincia, "raw", getPackageName()));
Donde miProvincia es el nombre del fichero de recursos internos.
Utilizamos un buffer para aumentar la velocidad de acceso al fichero.
BFentrada2 = new BufferedReader(new InputStreamReader(ISentrada2));
Leemos línea por línea buscando concordancias con el nombre de calle.
while ((Sentrada=BFentrada2.readLine()) != null)
            {
                String SentradaT[]= Sentrada.split(":");
                if(SentradaT[1].contains(Scalle))    
                    {
                        Ncalles++;  
                        Mcallel.append(Sentrada);
                        Mcallel.append("\n");
                    }
            }     
public void cuantosCX(String Lprovincia)
    {                 
        String miProvincia;
        Scalle=Mcalle.getText().toString();       
        Scalle=Scalle.toUpperCase();
        Mcalle.setText(Scalle); 
        miProvincia = Lprovincia.substring(0, Lprovincia.length()-4);
       
        try
        {
            if(ISentrada2 != null)    ISentrada2.close();       
            ISentrada2 = getResources().openRawResource(getResources().getIdentifier(miProvincia, "raw", getPackageName()));
            BFentrada2 = new BufferedReader(new InputStreamReader(ISentrada2));
           
            while ((Sentrada=BFentrada2.readLine()) != null)
            {
                String SentradaT[]= Sentrada.split(":");
                if(SentradaT[1].contains(Scalle))    
                    {
                        Ncalles++;  
                        Mcallel.append(Sentrada);
                        Mcallel.append("\n");
                    }
            }       
           
            ISentrada2.close();
        }
        catch (IOException e)
        {
            Log.e("Provincias->",e.getMessage(),e);
        }       
       
    }


PROGRAMA

Saludos
Juan Galaz


Bibliografía:

http://www.seta43.netau.net/android.html
http://android.okhelp.cz/java_android_code.php?s=openRawResource
http://www.programmershare.com/1333689/

ANDROID 4: DESARROLLO DE APLICACIONES (En papel)
ISBN 9788441531970
WEI MENG LEE , ANAYA MULTIMEDIA, 2012

EL GRAN LIBRO DE ANDROID (3ª ED.) (En papel)
ISBN 9788426719768
JESUS TOMAS GIRONES , S.A. MARCOMBO, 2013