Documente Academic
Documente Profesional
Documente Cultură
Funciones de Texto
FUNCIONES DE TEXTO
Archivos ASCII Delimitados
Los archivos ASCII Delimitados son archivos de texto (modificables con prcticamente cualquier
editor de textos) comunmente utilizados para transferir informacin entre diferentes aplicaciones.
Este tipo de archivos puede ser creado con cualquier DBMS (Oracle, SQL Server, FoxPro, etc.) y
presenta las siguientes caractersticas:
a. Cada lnea del archivo representa una fila (o registro)
b. Los campos de cada lnea estn separados por algn delimitador
c.
Los campos alfanumricos (Character o Varchar en GeneXus) pueden estar o no
delimitados por comillas ().
d. Los campos numricos no contienen comas separadoras de miles y, el separador de
decimales es el punto.
El siguiente, es un ejemplo de un archivo delimitado generado a partir de una tabla con los campos
CodCli, NomCli, CedCli, NacCli:
1,"Martn Flores",1335789,1960-01-10
2,"Josefina Fernndez",3254469,1991-10-12
3,"Alberto Sarmiento",2546689,1987-11-17
4,"Ignacio Martnez",526866,1989-12-11
5,"Manuel Gonzlez",1523458,1959-07-15
6,"Dalmiro Schmit",2743357,1961-12-09
7,"Juan Beltrn",455310,1950-10-12
Con GeneXus es posible leer este tipo de archivos. Para ello se proveen un conjunto de funciones
que permiten abrir el archivo, leer cada registro, copiar el contenido de cada campo a variables o
atributos de GeneXus y cerrar el archivo. Por ejemplo, para leer el archivo del ejemplo, el cdigo
sera semejante al siguiente:
&i = dfropen( "clients.txt", 80, ,)
do while dfrnext( ) = 0
&i = dfrgnum( &CliCod)
&i = dfrgtxt( &CliNom )
&i = dfrgnum( &CliCId )
&i = dfrgdate( &CliFecNac, ymd, - )
enddo
&i = dfrclose( )
Como se ve en el ejemplo, no existe un esquema de descripcin del registro (orden de los campos)
del archivo ASCII delimitado. El orden de los campos est dado por la secuencia en que se llaman a
las funciones dbrgnum, dbrgtxt o dbrgdate. Si la secuencia fuera incorrecta, los resultados son
impredecibles.
Tambin es posible grabar registros. Esto se realiza en forma anloga a la lectura, mediante el uso
de funciones. Por ejemplo, para grabar el archivo del ejemplo anterior, el cdigo GeneXus sera el
siguiente:
1/8
14/08/13
Funciones de Texto
defined by CliNom
&i = dfwpnum( CliCod)
&i = dfwptxt( CliNom )
&i = dfwpnum( CliCId )
&i = dfwpdate( &CliFecNac, ymd, - )
&I = dfwnext()
endfor
&i = dfwclose( )
dfrnext
www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm
2/8
14/08/13
Funciones de Texto
dfrgnum
Lee un campo de tipo numrico de la lnea actual (leda por dfrnext).
Sintxis:
dfrgnum( <num>)
Parmetros:
<num> puede ser un atributo o variable de tipo numrico. En l, se almacenar el valor ledo.
Retorno:
Esta funcin puede retornar alguno de los siguientes valores:
0
-1
-5
dfrgtxt
Lee un campo de tipo character de la lnea actual (leda por dfrnext) .
Sintxis:
dfrgtxt( <txt> [, <length>])
Parmetros:
<txt> puede ser un atributo o variable de tipo character o varchar. En l, se almacenar el valor
ledo.
<length> puede ser un atributo, variable o constante de tipo numrico, opcional, que indica la
cantidad mxima de caracteres a leer. Su valor, si se especifica, no debe exceder el
tamao definido para <txt>. En caso de omitirse, se asume el tamao definido para el
atributo o variable <txt>. Si ste parmetro excede el tamao de <txt> los resultados son
impredecibles.
Retorno:
Esta funcin puede retornar alguno de los siguientes valores:
www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm
3/8
14/08/13
0
-1
-5
-6
Funciones de Texto
dfrgdate
Lee un campo de tipo date de la lnea actual (leda por dfrnext). El valor de fecha ledo no es
ajustado de acuerto con la preference Year Limit.
Sintxis:
dfrgdate( <date> [, <fmt> [, <sep>]])
Parmetros:
<date> puede ser un atributo o variable de tipo date. En l, se almacenar el valor ledo.
<fmt> puede ser un atributo, variable o constante de tipo character, opcional, con, al menos,
tres caracteres. Indica el formato que tiene la fecha en el campo a leer. Cada carcter del
campo puede valer y, m o d. Su combinacin genera el formato. Por ejemplo si el string
contiene los caracteres ymd la fecha del campo a leer se asume (y valida) en formato Ao,
Mes, Da. Si, por el contrario el string contiene los caracteres dmy, la fecha del campo a
leer se asume en formato Da, Mes, Ao. Es importate notar que los caracteres deben
estar en minscula. El valor por defecto es ymd.
<sep> puede ser un atributo, variable o constante de tipo character, cuyo valor debe tener, al
menos, un caracter. Indica cul es el separador de los elementos de una fecha. Los valores
comunmente utilizados son /, - y .. El valor por defecto es -.
Retorno:
Esta funcin puede retornar alguno de los siguientes valores:
0
-1
4/8
14/08/13
Funciones de Texto
No tiene.
Retorno:
Esta funcin puede retornar alguno de los siguientes valores:
0
-1
dfwnext
Graba el registro con los valores especificados por las llamadas anteriores a dfwptxt, dfwpnum,
etc. en el archivo de texto delimitado.
Sintxis:
dfwnext()
www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm
5/8
14/08/13
Funciones de Texto
Parmetros:
No tiene
Retorno:
Esta funcin puede retornar alguno de los siguientes valores:
0
-1
-9
dfwpnum
Graba un campo de tipo numrico en el registro actual del archivo ASCII delimitado.
Sintxis:
dfwpnum( <num>, <dec>)
Parmetros:
<num> puede ser un atributo, variable o constante de tipo numrico. Su valor ser el grabado
en el campo correspondiente..
<dec> puede ser un atributo, variable o constante de tipo numrico, opcional, que indica la
cantidad de decimales a especificar en el campo.
Retorno:
Esta funcin puede retornar alguno de los siguientes valores:
0
-1
dfwptxt
Graba un campo de tipo character en el registro actual del archivo ASCII delimitado.
Sintxis:
dfwptxt( <txt> [, <length>])
Parmetros:
<txt> puede ser un atributo, variable o constante de tipo character. Su valor ser el grabado en
el campo correspondiente..
<length> puede ser un atributo, variable o constante de tipo numrico, opcional, que indica la
cantidad mxima de caracteres a grabar. En caso de omitirse, se asume el tamao definido
para el parmetro <txt>.
Retorno:
Esta funcin puede retornar alguno de los siguientes valores:
0
-1
dfwpdate
www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm
6/8
14/08/13
Funciones de Texto
Graba un campo de tipo date en el registro actual del archivo ASCII delimitado. Si tiene el valor
nulo de GeneXus, se grabar la fecha "00/00/0000".
Sintxis:
dfwpdate( <date> [, <fmt> [, <sep>]])
Parmetros:
<date> puede ser un atributo o variable de tipo date. En l, se almacenar el valor ledo. No
puede ser una constante.
<fmt> puede ser un atributo, variable o constante de tipo character, opcional, con, al menos,
tres caracteres. Indica el formato que tiene la fecha en el campo a grabar. Cada carcter
del campo puede valer y, m o d. Su combinacin genera el formato. Por ejemplo si el
string contiene los caracteres ymd la fecha del campo a grabar se asume en formato Ao,
Mes, Da. Si, por el contrario el string contiene los caracteres dmy, la fecha del campo a
leer se asume en formato Da, Mes, Ao. Es importate notar que los caracteres deben
estar en minscula. El valor por defecto es ymd.
<sep> es un parmetro de tipo caracteres opcional con, al menos, un caracter. Indica cul es el
separador de los elementos de una fecha. Los valores comunmente utilizados son /, - y
.. El valor por defecto es -.
Retorno:
Esta funcin puede retornar alguno de los siguientes valores:
0
-1
www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm
7/8
14/08/13
Funciones de Texto
Es posible ignorar los campos del final de un registro al llamar a dfrnext cuando queden campos por
leer. No es posible saltearse campos. Si se quiere leer el campo nmero 5 es necesario leer los 4
anteriores.
Es posible leer registros con diferentes formatos como en el siguiente ejemplo:
&i = dfropen( "invoices.txt", 80, ,)
do while dfrnext( ) = 0
&i = dfrgtxt( &RecType)
if &RecType = H
&i = dfrgnum( &InvNum )
&i = dfrgdate( &InvDat, ymd, /)
...
else
&i = dfrgnum( &PrdNum )
&i = dfrgnum( &InvQty)
...
endif
enddo
&i = dfrclose( )
www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm
8/8