¿En qué se basa MIT App Inventor?

Leer Archivos CSV en MIT App Inventor

Valoración: 4.96 (5448 votos)

Los archivos CSV (Comma Separated Values) son un formato muy común para almacenar datos tabulares, como hojas de cálculo o bases de datos simples, en un formato de texto plano. Su sencillez los hace ideales para importar o exportar información entre diferentes programas. Si estás desarrollando una aplicación con MIT App Inventor y necesitas cargar datos externos, como listas de productos, configuraciones o cualquier conjunto de información estructurada, leer un archivo CSV es una habilidad fundamental.

Aunque App Inventor no tiene un bloque mágico que diga 'Leer CSV y dámelo todo listo', sí que nos proporciona las herramientas necesarias para hacerlo paso a paso. Básicamente, se trata de leer el archivo como texto plano y luego procesar ese texto para organizar los datos en la estructura que necesitamos: una lista de listas.

¿Cómo leer un archivo csv en MIT App Inventor?
Se lee solo una vez (al inicializar Screen1). Luego, se crea una TinyDB (o se actualiza si hay nuevas palabras en el archivo CSV) y se carga en una lista donde las demás funciones de la aplicación la usan. Las nuevas palabras añadidas localmente por el usuario se almacenan en la TinyDB y permanecen únicamente allí. El archivo CSV es de solo lectura.

El Componente Clave: Archivo

Para interactuar con archivos en el dispositivo, ya sea para leerlos o escribirlos, utilizamos el componente Archivo (File). Este componente se encuentra en la paleta 'Almacenamiento' dentro del editor de diseño de App Inventor. Al arrastrarlo a la pantalla (Screen), será un componente no visible.

El componente Archivo tiene métodos y eventos que nos permitirán solicitar la lectura de un archivo y recibir su contenido una vez que la operación se complete. Los dos elementos principales que usaremos son el método LeerDesde (ReadFrom) y el evento TextoLeido (GotText).

Obteniendo el Archivo CSV

Lo primero es tener acceso al archivo CSV. Hay dos maneras principales de hacer esto en App Inventor:

1. Archivos en los Medios (Assets):

Esta es la forma más sencilla si el archivo CSV es parte de tu aplicación y no va a cambiar después de la instalación. Subes el archivo CSV a la sección 'Medios' (Media) en el editor de diseño, al igual que subes imágenes o sonidos. Para leer un archivo desde los medios, usas el método LeerDesde del componente Archivo y le proporcionas el nombre del archivo precedido por dos barras inclinadas: //nombre_de_tu_archivo.csv. Por ejemplo, si subiste un archivo llamado datos.csv, la ruta sería //datos.csv. App Inventor se encargará de encontrar este archivo dentro del paquete de la aplicación.

2. Archivos en el Almacenamiento Externo:

Si el archivo CSV es generado por el usuario, descargado de internet, o simplemente reside en el almacenamiento interno o externo del dispositivo (como la carpeta Documentos o Descargas), necesitarás especificar la ruta completa del archivo. Esto requiere que tu aplicación tenga permisos para leer el almacenamiento externo. App Inventor suele solicitar estos permisos automáticamente cuando usas componentes que los necesitan, pero es algo a tener en cuenta. La ruta del archivo podría ser algo como /storage/emulated/0/Documents/mi_archivo.csv. Puedes obtener estas rutas de varias maneras, como permitiendo que el usuario seleccione un archivo (usando el componente ActivityStarter con una acción para seleccionar archivos) o construyendo la ruta a una ubicación conocida.

Para leer desde el almacenamiento externo, también usas el método LeerDesde, pero con la ruta completa del archivo.

El Proceso de Lectura: Del Archivo al Texto

Una vez que llamas al método LeerDesde con la ruta correcta del archivo (ya sea //archivo.csv para assets o una ruta completa para almacenamiento externo), App Inventor inicia la operación de lectura en segundo plano. Cuando la lectura finaliza (exitosa o no), se activa el evento TextoLeido (GotText) del componente Archivo. Este evento nos proporciona dos datos importantes:

  • etiquetaNombreArchivo (fileName): La ruta del archivo que intentaste leer.
  • textoLeido (text): El contenido completo del archivo como una única cadena de texto.

El contenido del archivo CSV ahora está en la variable textoLeido. Aquí es donde empieza la parte interesante: procesar este texto para extraer los datos.

Procesando el Texto: De Texto a Lista de Listas

Un archivo CSV es, en esencia, texto donde las filas están separadas por saltos de línea y las columnas dentro de cada fila están separadas por un delimitador, que comúnmente es una coma (de ahí el nombre "Comma Separated Values"), pero también puede ser un punto y coma, un tabulador, etc.

Nuestro objetivo es convertir la única cadena de texto que recibimos en textoLeido en una estructura más útil en App Inventor, que es una lista de listas. La lista principal representará las filas, y cada elemento de esta lista principal será otra lista que represente las columnas de esa fila.

El bloque clave para este procesamiento es el bloque split (dividir texto). Este bloque toma una cadena de texto y la divide en una lista de subcadenas, utilizando un delimitador especificado.

El proceso general en el editor de bloques sería el siguiente, dentro del evento Archivo.TextoLeido:

1. Dividir el texto en filas: El archivo completo es una cadena larga. Las filas están separadas por saltos de línea. En App Inventor, el salto de línea se representa típicamente como . Usaremos el bloque split: split text: textoLeido at: \n. Esto nos dará una lista donde cada elemento es una cadena que representa una fila del CSV.

2. Crear la estructura final: Inicializa una variable global o local como una lista vacía. Esta será tu lista de listas final (ej: global datosCSV).

3. Procesar cada fila: Usa un bucle para cada item en lista (for each item in list) para iterar sobre la lista de filas que obtuviste en el paso 1.

4. Dividir cada fila en columnas: Dentro del bucle, para cada 'item' (que es una cadena que representa una fila), usa nuevamente el bloque split para dividirla en columnas. El delimitador aquí suele ser la coma: split text: item at: ,. Esto te dará una lista de las celdas (valores) de esa fila.

5. Agregar la fila procesada a la estructura final: La lista de celdas que obtuviste en el paso 4 es una lista simple que representa una fila completa. Usa el bloque añadir items a la lista (add items to list) o añadir elemento a la lista (append to list) para agregar esta lista de celdas a tu lista principal global datosCSV.

Al finalizar el bucle, la variable global datosCSV contendrá la estructura deseada: una lista de listas, perfectamente organizada para acceder a tus datos.

Manejando Delimitadores y Casos Especiales

Aunque la coma es el delimitador estándar, algunos archivos CSV usan punto y coma (;) u otro carácter. Es crucial saber qué delimitador usa tu archivo y usar ese carácter en el bloque split para las columnas. Si tu archivo usa ;, usarías split text: item at: ;.

Otro caso común es cuando un valor dentro de una celda contiene el propio delimitador (por ejemplo, una descripción que incluye una coma). Los archivos CSV estándar manejan esto encerrando el valor entre comillas dobles ("). El bloque split básico de App Inventor no maneja automáticamente este tipo de formato (CSV con comillas). Si tus archivos usan comillas para escapar delimitadores, el proceso de lectura se vuelve más complejo y podrías necesitar lógica adicional o extensiones para parsear correctamente esas líneas.

También es común que la primera fila de un archivo CSV sea un encabezado con los nombres de las columnas. Si no quieres incluir esta fila en tus datos procesados, simplemente puedes eliminar el primer elemento de la lista de filas que obtuviste después del primer split (el que divide por ) antes de comenzar el bucle para procesar las columnas.

Visualizando o Usando los Datos

Una vez que tienes los datos en la lista de listas global datosCSV, puedes usarlos en tu aplicación. Por ejemplo:

  • Mostrar los datos en un ListView (quizás uniendo los elementos de cada sublista para mostrar una fila).
  • Llenar un ListPicker para permitir al usuario seleccionar una fila.
  • Acceder a valores específicos (por ejemplo, la tercera columna de la quinta fila) usando el bloque seleccionar elemento de la lista (select list item) dos veces.
  • Usar los datos para configurar otros componentes, realizar cálculos, etc.

Un Ejemplo Conceptual Paso a Paso (Editor de Bloques)

Imagina que tienes un archivo productos.csv en tus medios con contenido:

ID,Nombre,Precio 101,Manzana,1.50 102,Banana,0.75 103,Naranja,1.20

Tu lógica de bloques sería (resumida):

1. En un botón 'Cargar Datos': Llama a Archivo1.LeerDesde con ruta //productos.csv.

2. En el evento Archivo1.TextoLeido textoLeido:

  • Inicializa global datosCSV como crear una lista vacía.
  • Crea una variable local filas = split text: textoLeido at: .
  • Usa para cada item filaTexto en lista filas:
    • Crea una variable local columnas = split text: filaTexto at: ,.
    • Usa añadir elemento a la lista lista: global datosCSV elemento: columnas.
  • (Opcional) Si la primera fila es encabezado: Antes del bucle, usa remover item de la lista lista: filas indice: 1.

Ahora, global datosCSV es una lista de listas donde cada sublista es una fila de datos.

Problemas Comunes y Soluciones

  • Archivo no encontrado: Verifica que la ruta sea correcta. Si es un asset, asegúrate de haberlo subido y que el nombre coincida exactamente (incluyendo mayúsculas y minúsculas, y la extensión .csv). Si es almacenamiento externo, verifica la ruta completa y los permisos.
  • Error de delimitador: Si los datos no se separan correctamente, asegúrate de que el carácter en el bloque split (para columnas) coincide con el delimitador real en tu archivo CSV.
  • Problemas con comillas: Si tu CSV usa comillas para escapar comas dentro de los datos, el split simple no funcionará. Necesitarás una lógica de parseo más avanzada.
  • Codificación del archivo: La mayoría de los archivos CSV simples usan codificación UTF-8 o ANSI. Si tu archivo usa una codificación diferente, el texto leído podría aparecer como caracteres extraños. App Inventor suele manejar UTF-8 bien.
  • Archivos muy grandes: Leer archivos enormes puede consumir mucha memoria y tardar tiempo, potencialmente bloqueando la interfaz de usuario. Para archivos muy grandes, considera procesarlos en partes o buscar alternativas.

Preguntas Frecuentes (FAQ)

¿Qué hago si mi archivo usa punto y coma (;) en lugar de coma (,)?
Simplemente cambia el carácter delimitador en el segundo bloque split (el que divide cada fila en columnas) de , a ;.

¿Cómo leo solo una columna específica?
Una vez que tienes la lista de listas datosCSV, puedes iterar sobre ella y, para cada sublista (fila), usar seleccionar elemento de la lista lista: [fila] indice: [número de columna] para obtener el valor de la columna deseada. Puedes almacenar estos valores en una nueva lista si solo necesitas esa columna.

¿Cómo ignoro la primera fila (encabezado)?
Después de usar el primer split para obtener la lista de filas (separadas por ), usa el bloque remover item de la lista lista: [lista de filas] indice: 1 antes de comenzar el bucle que procesa las columnas. El índice 1 corresponde al primer elemento en las listas de App Inventor.

¿Necesito permisos para leer archivos?
Para leer archivos subidos como 'Medios' (Assets), generalmente no necesitas permisos especiales. Para leer archivos desde el almacenamiento interno o externo del dispositivo (como la carpeta Descargas o Documentos), tu aplicación necesitará el permiso de lectura de almacenamiento, que App Inventor suele gestionar automáticamente, pero es una consideración importante.

¿Cómo puedo mostrar los datos en una tabla?
App Inventor no tiene un componente de 'tabla' nativo complejo. Puedes simular una tabla usando disposiciones (Layouts) como TableArrangement o HorizontalArrangement dentro de un VerticalScrollArrangement, creando dinámicamente etiquetas o campos de texto para cada celda. O puedes mostrar los datos de forma más sencilla en un ListView o procesarlos para usarlos de otra manera.

Conclusión

Leer archivos CSV en MIT App Inventor es un proceso de dos pasos: primero, obtener el contenido del archivo como texto usando el componente Archivo y su evento GotText; segundo, procesar ese texto utilizando el bloque split para dividirlo en filas y luego en columnas, almacenando el resultado en una lista de listas. Con esta estructura de datos, puedes acceder y utilizar la información de tu archivo CSV en cualquier parte de tu aplicación. Aunque requiere un poco de lógica en el editor de bloques, es una técnica muy potente para hacer tus aplicaciones más dinámicas y capaces de manejar datos externos.

Si quieres conocer otros artículos parecidos a Leer Archivos CSV en MIT App Inventor puedes visitar la categoría Bases de datos.

Ivan

Soy un entusiasta de la tecnología con especialización en bases de datos, particularmente en MySQL. A través de mis tutoriales detallados, busco desmitificar los conceptos complejos y proporcionar soluciones prácticas a los desafíos cotidianos relacionados con la gestión de datos

Aprende mas sobre MySQL

Subir