Problema : Tengo una tabla en foxpro 2.x (o visual foxpro 6.x, se aplica a ambas versiones) con la siguiente estructura (o diseño de registro):
campo tipo longitud
codrut caracter 6 posiciones
refrut caracter 20 posiciones
desrut memo ? posiciones (4 ó 10)
esta tabla guarda rutas de servicio de transporte urbano; el campo
desrut, contiene la ruta por calles que seguira cada línea de transporte urbano (supongamos que el tamaño oscila entre 100 y 1000 caracteres). Ahora, necesito pasar el contenido de esta tabla a MySql; para tales efectos utilizo los siguientes comandos en FoxPro:
Código PHP:
use tabladerutas
copy to rutasparamysql sdf
close data
el problema es que el archivo de texto creado no tiene el campo
desrut (de vital importancia en esta tabla).
Solución :
creo una tabla (.dbf) intermedia con la siguiente estructura:
campo tipo longitud
codrut caracter 6 posiciones
refrut caracter 20 posiciones
desru1 caracter 250 posiciones
desru2 caracter 250 posiciones
desru3 caracter 250 posiciones
desru4 caracter 250 posiciones
nota : sólo 4 campos porque el campo
dsrut nunca excede 1000 caracteres.
Código PHP:
set memowidth to 125 && el ancho que tendrá cada línea extraída del campo memo (125 caracteres ¿quién sabe por qué?, a 250 se truncaban algunas palabras, a 125 hay que crear un pequerño artificio/algoritmo pero funciona bien).
set path to caminotablas
use interm_rutas exclusive
zap
appe from original_rutas for !empty(cdemp) && en las tablas que usaba existían algunos campos cdemp en blanco, normalmente no debe de darse al ser clave de la tabla, en fin pregunten al área de sistemas
scan && examinar registro a registro toda la tabla
c = 0 && para usar los campos dsru1, ..., dsru4
a = 3 && 125 car + 125 car = 250 caracteres
for x=1 to memlines(dsrut) && cuantas líneas de memo hay (de 1 a 4 - mínimo 100, máximo 1000 caracteres)
if a = 3
c = c + 1
a = 1
d = "" && concatena contenido de campos dsru"x"
endif
campo = "ds"+alltrim(str(c)) && campo dsru"x" a actualizar
d = d + alltrim(mline(dsrut,x)) + " " && espacio en blanco al final para separar palabras
a = a + 1 && necesita comentario?, es un contador de cocina
replace &campo. with d && reemplaza de memo a dsru"x"
next
endscan
copy to txt_rutas_paraMySql sdf
clos all
luego desde mysql admin:
Código PHP:
load data local infile 'txt_rutas_paraMySql.txt' into table rutas fields terminated by '';
pero eso es tema de otro foro...
PD: es una solución académica, de cocina o como la quieran llamar; mi consulta estaba orientada a no usar este metodo sino de frente una sola instrucción COPY TO :::: SDF...
(SE ENTIENDE????)