Guru30
9th May 2008, 14:54
Hola, tengo un fichero excell con varias columnas. Cada columna tiene diferentes extensiones y esos datos los quiero subir a una tabla. ¿Cómo puedo leerlos?. Al campo leac le he dado una extensión de 8 pero si sólo lee 6 se me pasa a la columna desc.

function leer()
{
long fp2

string detalle2(275)
extern string leac(8)
extern string desc(50)
fp2 = seq.open("a2.csv","r")
if fp2>0 then
|db.retry.point()
while seq.eof(fp2)=0
estado=seq.gets(detalle2,275,fp2)
|string.scan(detalle2,"%s",leac)
leac = detalle2(1;8)
desc = detalle2(9;50)
|select tfgld022.*
|from tfgld022 for update
|where tfgld022._index1 = {:leac}
|selectdo
| db.insert(ttfgld022,db.retry)
|endselect
endwhile
|commit.transaction()
estado=seq.close(fp2)
endif
}

bilmaa
12th May 2008, 20:20
el fichero debe tener en mi caso el pipe "|" como separador de campo pero puedes cambiarlo por el que quieras.

Esto lee una linea de un fichero hasta el final de línea y despues mete los datos en variables.


fich = seq.open(strip$(fichero),"r")
seq.gets(registro,2048,fich,GETS_NORMAL)
while not seq.eof(fich)
mensaje = "Importando Transacción "& registro
display("mensaje")
inserta.pro.tfgld014()
seq.gets(registro,2048,fich,GETS_NORMAL)
endwhile


function inserta.pro.tfgld014()
{
string.scan(strip$(registro),"%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s",
ttyp.gld018, docn.gld018, suno.gld102, fact.provee, refr.gld102, dim1.gld102, fecha.factura.1, fecha.vencimiento,
amnt.gld102, ccur.divisa, rate.acp200, amth.gld102, ccur.divisa.s, saldo.euro, ccur.euro, seak.gld102, tpdoc.gld102, numdoc.gld102)

}

Espero que esto te ayude.

salu2

Guru30
13th May 2008, 08:58
Gracias pero las variables que lees y separas por | tienen distinta longitud, no son string fijos. Eso es lo que me falla.

bilmaa
14th May 2008, 16:24
en ningún momento le digo cual es la longitud de las variables, solo le digo el separador que tienen el el fichero, ya el solo recoje los datos y los pone en las variables correspondientes.

Tu pruebalo y despues me dices si te funciona o no.

amealo
23rd May 2008, 20:46
A mi siempre me ha funcionado lo que indica Bilmaa