viernes, 29 de enero de 2016

Exportar un TAB de MapInfo según los valores de un campo a varios DXFs

En este mes se presentara una rutina en MapBasic que al escoger un campo de un archivo TAB se exportara a tantos archivos DXFs como valores tenga dicho campo escogido.
Para nuestro ejemplo, tenemos un archivo TAB con las regiones del Perú y se desea exportar tantos archivos DXFs como valores hay en  este TAB. Si abrimos este TAB observamos que hay 35 filas y dos columnas. La columna a escoger es NOMB donde están los nombres de las  25 regiones del Perú y algunos lagos (con el valor de LAGO en dicha columna).
El código para hacer esto, es el siguiente:



Include "MapBasic.def"

Dim MiTabla as String
Dim MiDXF as String
Dim Columna as Alias
Dim Valor as String

MiTabla = "LIMITE_DEPARTAMENTOS" ' Nombre del archivo TAB a exportar
Columna = "NOMB" ' Nombre de la columna escogida para exportar segun sus valores
Fetch First From MiTabla ' Posicionamos el cursor de lectura de los valores del TAB en la primera fila de la tabla del TAB
Do While Not EOT (MiTabla) ' Bucle que permite leer los valores del TAB
 Columna = MiTabla & ".NOMB" 'Guardo el valor de la fila actual en el campo NAME (donde estan los valores a exportar)
 Valor = Columna 'Guardo el valor de Columna (variable tipo Alias) a otra variable de tipo String
 Select * From MiTabla Where NOMB =  Valor Into Valor NoSelect 'Seleccion de las filas segun nombre de la region
 MiDXF = "C:\MapInfo\" & Valor & ".dxf" 'Ruta donde el DXF va ser guardado con el nombre de la region

 'Comienza a exportar a DXF
 Export Valor 'Nombre de la seleccion con nombre de la region
  Into MiDXF 'archivo DXF que se guardara la seleccion
  Type "DXF" 'tipo de exportacion
  Overwrite 'permitir sobre escritura
  ASCII 'tipo de DXF, en este caso ASCII (permite ver el contenido con un notepad)
  Version 12 'version del DXF

 Fetch Next From MiTabla 'pasa a leer la siguiente fila
Loop

Note "Exportado..."


El código esta explicado en los comentarios, solo hacer algunas aclaraciones:

Este TAB tiene 35 valores y se explicó que son 25 regiones del Perú más un valor de lagos que suman 26 valores distintos, haciendo suponer que hay duplicidad de valores y esto hará que se haga tantas veces la selección (función Select) de valores como valores duplicados existan. En el código está el parámetro Overwrite que permite sobreescribir archivos, esto último ayuda a prevenir algún problema por la duplicidad de valores y haciendo que solo se creen 26 archivos DXFs (25 regiones del Perú y los lagos). Esperando que sea de ayuda, será hasta el otro mes. Saludos.
ª