21 de octubre de 2016

Desglosar cadenas separadas por comas en matrices de Visual FoxPro

Artículo original: Parsing comma-delimited strings into a Visual Foxpro array
http://www.ml-consult.co.uk/foxst-15.htm  
Autor: Mike Lewis
Traducido por: Ana María Bisbé York


Un modo sencillo de desglosar datos en una cadena separada por comas.

En Visual FoxPro (y otros lenguajes de programación) las cadenas delimitadas por comas son una vía sencilla para guardar pequeñas colecciones de datos. Es habitual el uso de estas cadenas para pasar parámetros a procedimientos o funciones, o para guardar valores en propiedades de usuarios o clases. Puede además, importar datos de algunas aplicaciones en forma de un archivo de texto delimitado por comas.

He aquí una vía sencilla para desglosar una cadena separada por comas en VFP 6.0. Utilizando esta sencilla línea de código, puede extraer rápidamente cada elemento separado por la coma y colocarlo en un elemento independiente de la matriz.

nRows = ALINES(laData, STRTRAN(cTest,",",CHR(13)))

En este caso, la cadena delimitada por comas se llama cTest y la matriz se llama laData. Si no existe la matriz, la crea. Luego de ejecutar el código, la variable nRows contendrá la cantidad de elementos en la matriz.

El código realiza dos sencillas operaciones. Primero, la función STRTRAN() convierte cada una de las comas en un carácter de fin de cadena (ASCII 13). La función ALINES() coloca cada "línea" que se ha formado en un elemento de la matriz. ALINES(), que se introdujo en VFP 6.0, está diseñada para extraer párrafos de cadenas de texto muy largas; pero funciona también en el contexto mostrado aquí.

En VFP 7.0 y superior, el código es incluso más sencillo. VFP 7.0 introdujo un parámetro adicional a ALINES(), el que le permite especificar un carácter fin de línea personalizado. Entonces, en lugar de tener que utilizar STRTRAN() para convertir las comas en ASCII 13, puede sencillamente estipular que la coma marca el fin de línea. El código entonces, es el siguiente:

nRows = ALINES(laData, cTest, .F., ",")

El tercer parámetro de ALINES() es un indicador que dice si la "línea" debe ser recortada cuando es copiada en la matriz.

Si desea convertir un archivo de texto entero en una matriz simplemente conviértalo en una cadena de caracteres antes con el código que se muestra a continuación. En VFP 6.0 y superior, la forma más fácil de convertir un archivo en una cadena es con la función FILETOSTR(). Entonces, teniendo un archivo de texto delimitado por comas llamado CLIENTS.TXT, he aquí cómo lo puede desglosar en una matriz llamada aClients:

cClients = FILETOSTR("clients.txt")
nRows = ALINES(aClients,STRTRAN(cClients,",",CHR(13)))

Vea que esta técnica no trabaja si las variables como tal contienen comas. Cuando se almacenan, por ejemplo, nombres y direcciones como variables separadas por comas, por ejemplo, lo habitual es encerrarlas entre comillas, para indicar que al desglosar trate todo este texto entre comillas como un único elemento. Desafortunadamente el código mostrado en este artículo no puede controlar esta situación.

Mike Lewis Consultants Ltd. Julio 2000. Revisado Noviembre 2001.

No hay comentarios. :

Publicar un comentario