GeneXus - DELIMITADORES EN DFROPEN

 
Vista:

DELIMITADORES EN DFROPEN

Publicado por Die ! (40 intervenciones) el 29/05/2007 15:26:50
Hola gente.
Ando con unas dudas con respecto al uso de la Funcion DFROPEN COn delimitadores de campo. Ya logre leer un txt y guardar todo un renglon en una variable, pero ahora se me complica porque cada campo esta separado por ' ; ' y necesitaria usar la funcion de esta manera
&FileName = 'PRUEBA:txt'
&i = dfropen( &FileName ,1024 ,';' )

El problema viene al tratar de guardar cada campo en una variable distinta, no se como hacerlo y la ayuda mucho no me ayudo esta ves.. no tiene ningun ejemplo completo

Yo antes logre usar un txt sin problema de esta manera:

&ruta='TXT\NF'+&Empresa2+&Seccion2+'.TXT'
&i = dfropen(&Ruta)
If &i=0
call(PBORRAREGS,&Empresa,&Seccion,&FLAG)
DO while dfrnext() = 0
&i = dfrgtxt(&TxtContenido)
call(PIMPORTNOVGRIL,&TxtContenido,&Empresa,&Seccion,&FLAG)
EndDo
Else
TXTERR.Caption+='El archivo '+&FLAG+' No existe o el sistema no tiene acceso al el - '
TXTERR.Visible=1
ENDIF
&i=DFRClose()

Necesitaria Ayuda con esto.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:DELIMITADORES EN DFROPEN

Publicado por PabloF (275 intervenciones) el 29/05/2007 17:15:03
Hace poco estuve peleando para hacer andar una rutina con estas funciones.
Me parece que como lo estas haciendo esta bien.

&res= DFROpen(&FileName,,';')

En &RES se guarda el resultado de la operacion

case &res = -1
&mensaje = 'Secuencia Incorrecta'
case &res = -2
&mensaje = 'Error al abrir'
case &res = -8
&mensaje = 'No hay Suficiente memoria'

Usa para moverte entre los registros del TXT:
&resNext= DFRNext()

case &resnext = 0 // Operación satisfactoria
case &resnext = -1
&mensaje = 'Error de Secuencia en Next'
case &resnext = -3
&mensaje = 'Error de Lectura en Next'
case &resnext = -4
&mensaje = 'Fin de Datos'

Y a la hora de levantar datos usa las funciones apropiadas
&restext = DFRGNum(&AfiNro)
&restext = DFRGTXT(&AfiTipDoc)
&restext = DFRGDate(&AfiFecNac)

Va a intentar leer cada campo hasta en ancho de la variable donde lo va a guardar. En el ejemplo &afiNro tiene 8 digitos, lee 8 digitos hasta que se encuentre con un punto y coma que le marca que tiene que seguir al siguiente campo.

Es facil, una vez que lo utilizas.
Saludos PF
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DELIMITADORES EN DFROPEN

Publicado por Patricio Ojeda V (194 intervenciones) el 29/05/2007 17:32:01
Debes crearte tantas variables como datos necesites cargar. Estas variables las puedes colocar en un grid para ver tus datos cargados.

Ej.:

&i = dfropen(&archivo, 5000, ";")
do while dfrnext() = 0

&i = dfrgtxt(&clicod,12) //Para cargar texto
&i = dfrgdate(®fecha, "dmy", "/" ) //Para cargar una fecha
&i = dfrgnum(&ciucod) //Para cargar un numero
etc...
etc...

load

//Limpias tus variables despues de cargarlas

&clicod = ''
®fecha = ctod(' / / ')
&ciucod = 0

endfo

&i = dfrclose( )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DELIMITADORES EN DFROPEN

Publicado por Patricio Ojeda V (194 intervenciones) el 29/05/2007 17:32:25
Debes crearte tantas variables como datos necesites cargar. Estas variables las puedes colocar en un grid para ver tus datos cargados.

Ej.:

&i = dfropen(&archivo, 5000, ";")
do while dfrnext() = 0

&i = dfrgtxt(&clicod,12) //Para cargar texto
&i = dfrgdate(®fecha, "dmy", "/" ) //Para cargar una fecha
&i = dfrgnum(&ciucod) //Para cargar un numero
etc...
etc...

load

//Limpias tus variables despues de cargarlas

&clicod = ''
®fecha = ctod(' / / ')
&ciucod = 0

endfo

&i = dfrclose( )

Saludos y suerte...

Patricio Ojeda V
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DELIMITADORES EN DFROPEN

Publicado por DIE! (40 intervenciones) el 29/05/2007 22:01:45
PABLOF, me parecio bueno como lo implementaste, TIene validacion de lectura en el OPEN y en el NEXT, ya logre usarlo y guarda en las dos variables los dos valores separados por ' ; ' , lo unico que me lee un renglon solo.

Como deberia hacer el loop para que lea todos los regristros?
Yo lo estoy probando, pero si me podes responder gano tiempo.

Yo hice lo siguiente viendo el codigo que pasaste

&i= DFROpen(&ruta,1024,';')
DO case
case &i = -1
TXTmsj.Caption = 'Secuencia Incorrecta'
case &i = -2
TXTmsj.Caption = 'Error al abrir'
case &i = -8
TXTmsj.Caption = 'No hay Suficiente memoria'
EndCase

&resNext= DFRNext()
If &i = 0 // SI SE ABRIO BIEN EL TXT
DO case
case &resnext = 0 // Operación satisfactoria
&i = dfrgtxt(&primercampo)
&i = dfrgtxt(&segundocampo)
case &resnext = -1
TXTmsj.Caption = 'Error de Secuencia en Next'
case &resnext = -3
TXTmsj.Caption = 'Error de Lectura en Next'
case &resnext = -4
TXTmsj.Caption = 'Fin de Datos'
EndCase
EndIf

Gracias Por la Ayuda!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DELIMITADORES EN DFROPEN

Publicado por PabloF (275 intervenciones) el 30/05/2007 17:16:40
ehhmmm si, disculpas se me paso el detalle.
La parte que procesa los renglones tenes que meterla en un dowhile que controle el avance.

do while &resnet <> -4 //fin de datos

&resNext= DFRNext()
If &i = 0 // SI SE ABRIO BIEN EL TXT
DO case
case &resnext = 0 // Operación satisfactoria
&i = dfrgtxt(&primercampo)
&i = dfrgtxt(&segundocampo)
case &resnext = -1
TXTmsj.Caption = 'Error de Secuencia en Next'
case &resnext = -3
TXTmsj.Caption = 'Error de Lectura en Next'
case &resnext = -4
TXTmsj.Caption = 'Fin de Datos'
EndCase
EndIf

enddo

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar