funciones de texto

8
14/08/13 Funciones de Texto www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm 1/8 FUNCIONES DE TEXTO Archivos ASCII Delimitados Los archivos ASCII Delimitados son archivos de texto (modificables con prácticamente cualquier editor de textos) comunmente utilizados para transferir información entre diferentes aplicaciones. Este tipo de archivos puede ser creado con cualquier DBMS (Oracle, SQL Server, FoxPro, etc.) y presenta las siguientes características: a. Cada línea del archivo representa una fila (o registro) b. Los campos de cada línea están separados por algún delimitador c. Los campos alfanuméricos (Character o Varchar en GeneXus) pueden estar o no delimitados por comillas (“). d. Los campos numéricos 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,"Martín Flores",1335789,1960-01-10 2,"Josefina Fernández",3254469,1991-10-12 3,"Alberto Sarmiento",2546689,1987-11-17 4,"Ignacio Martínez",526866,1989-12-11 5,"Manuel González",1523458,1959-07-15 6,"Dalmiro Schmit",2743357,1961-12-09 7,"Juan Beltrán",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 código sería 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 descripción 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. También es posible grabar registros. Esto se realiza en forma análoga a la lectura, mediante el uso de funciones. Por ejemplo, para grabar el archivo del ejemplo anterior, el código GeneXus sería el siguiente: &i = dfwopen( "clients.txt", ",", '"') for each

Upload: marcelo-pozo-fritz

Post on 20-Nov-2015

162 views

Category:

Documents


1 download

DESCRIPTION

Funciones de Texto para Genexus

TRANSCRIPT

  • 14/08/13 Funciones de Texto

    www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm 1/8

    FUNCIONES DE TEXTO

    Archivos ASCII Delimitados

    Los archivos ASCII Delimitados son archivos de texto (modificables con prcticamente cualquiereditor 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.) ypresenta las siguientes caractersticas:

    a. Cada lnea del archivo representa una fila (o registro)b. Los campos de cada lnea estn separados por algn delimitadorc. 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 camposCodCli, NomCli, CedCli, NacCli:

    1,"Martn Flores",1335789,1960-01-102,"Josefina Fernndez",3254469,1991-10-123,"Alberto Sarmiento",2546689,1987-11-174,"Ignacio Martnez",526866,1989-12-115,"Manuel Gonzlez",1523458,1959-07-156,"Dalmiro Schmit",2743357,1961-12-097,"Juan Beltrn",455310,1950-10-12

    Con GeneXus es posible leer este tipo de archivos. Para ello se proveen un conjunto de funcionesque permiten abrir el archivo, leer cada registro, copiar el contenido de cada campo a variables oatributos de GeneXus y cerrar el archivo. Por ejemplo, para leer el archivo del ejemplo, el cdigosera 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 alas funciones dbrgnum, dbrgtxt o dbrgdate. Si la secuencia fuera incorrecta, los resultados sonimpredecibles. Tambin es posible grabar registros. Esto se realiza en forma anloga a la lectura, mediante el usode funciones. Por ejemplo, para grabar el archivo del ejemplo anterior, el cdigo GeneXus sera elsiguiente:

    &i = dfwopen( "clients.txt", ",", '"')for each

  • 14/08/13 Funciones de Texto

    www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm 2/8

    defined by CliNom&i = dfwpnum( CliCod)&i = dfwptxt( CliNom )&i = dfwpnum( CliCId )&i = dfwpdate( &CliFecNac, ymd, - )&I = dfwnext()

    endfor&i = dfwclose( )

    Lectura de archivos ASCII delimitados

    La siguiente es la descripcin detallada de las funciones que permiten acceder y procesar archivosASCII delimitados.

    dfropen

    Abre un archivo de texto para su procesamiento. Es la primera funcin que hay que llamar paracomenzar a leer un archivo de texto. Sintxis:

    dfropen( [, [, [, ]]]) Parmetros: puede ser un atributo, variable o constante de tipo char. Su valor ser considerado

    como el nombre del archivo a procesar. Puede o no contener especificaciones de directorio.Si no las tiene, ser buscado en el directorio corriente.

    puede ser un atributo, variable o constante de tipo numrico, opcional, que indica el

    tamao mximo, en cantidad de caracteres, del registro a leer. Vase que los archivosASCII delimitados tienen registros (lneas) de largo variable. Si se especifica, el valor debecorresponder a la cantidad mxima de caracteres que puede tener una lnea. El valor pordefecto es 1024.

    puede ser un atributo, variable o constante de tipo character, opcional, que indica cual

    es el caracter delimitador entre campos. Si se quiere especificar el caracter de tabulacincomo separador, el valor de este parmetro debe ser el string \t.

    puede ser un atributo, variable o constante de tipo character, opcional, que indica cual

    es el caracter delimitador de los campos strings. Slo el primer carcter del valor delparmetro es considerado. Su valor, puede ser cualquier carcter que no aparezca en lostextos. Su valor por defecto es el (comillas).

    Retorno:Esta funcin puede retornar alguno de los siguientes valores: 0 Operacin satisfactoria. El archivo fue abierto.-1 Secuencia incorrecta. Ocurre cuando se llama ms de una vez a esta funcin sin haber

    llamado antes a la funcin dfrclose. Si est activado el trace, se ver el mensaje ADF0005indicando este error.

    -2 Error de apertura. Ocurre cuando el archivo identificado por no ha podido abrirse.La causa puede ser identificada claramente habilitando el trace y buscando el mensaje concdigo ADF0001. Lo ms comn es que el archivo no exista.

    -8 Memoria insuficiente. Ocurre cuando no es posible reservar un buffer de bytes. Si est activado el trace, se ver el mensaje ADF0007 indicando este error.

    dfrnext

  • 14/08/13 Funciones de Texto

    www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm 3/8

    Lee el siguiente registro (lnea) del archivo de texto delimitado. Sintxis:

    dfrnext() Parmetros:No tiene Retorno:Esta funcin puede retornar alguno de los siguientes valores: 0 Operacin satisfactoria. El registro fue ledo.-1 Secuencia incorrecta. Ocurre cuando se llama a esta funcin antes de llamar a la funcin

    dfropen o la llamada a dfropen retorn un valor diferente de cero (error).-3 Error de lectura. Ocurre cuando se ha producido un error al leer una lnea del archivo ASCII

    delimitado. La causa puede ser identificada claramente habilitando el trace y buscando elmensaje con cdigo ADF0002.

    -4 Fin de datos.

    dfrgnum

    Lee un campo de tipo numrico de la lnea actual (leda por dfrnext). Sintxis:

    dfrgnum( ) Parmetros: 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 Operacin satisfactoria. El campo fue ledo.-1 Secuencia incorrecta. Ocurre cuando se llama a esta funcin antes de llamar a la funcin

    dfrnext o la ltima llamada a dfrnext retorn un valor diferente de cero (error). Si el traceest habilitado, se ver el mensaje ADF0004 o ADF0006.

    -5 Formato incorrecto. El nmero en el campo no tiene una forma correcta. La causa mscomn es que el campo que se pretende leer sea de otro tipo (character, date, etc.). Si eltrace est habilitado, se ver el mensaje ADF0008.

    dfrgtxt

    Lee un campo de tipo character de la lnea actual (leda por dfrnext) . Sintxis:

    dfrgtxt( [, ]) Parmetros: puede ser un atributo o variable de tipo character o varchar. En l, se almacenar el valor

    ledo. 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 eltamao definido para . En caso de omitirse, se asume el tamao definido para elatributo o variable . Si ste parmetro excede el tamao de los resultados sonimpredecibles.

    Retorno:Esta funcin puede retornar alguno de los siguientes valores:

  • 14/08/13 Funciones de Texto

    www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm 4/8

    0 Operacin satisfactoria. El campo fue ledo.-1 Secuencia incorrecta. Ocurre cuando se llama a esta funcin antes de llamar a la funcin

    dfrnext o la ltima llamada a dfrnext retorn un valor diferente de cero (error). Si el traceest habilitado, se ver el mensaje ADF0004 o ADF0006.

    -5 Formato incorrecto. El string en el campo no tiene una forma correcta. La causa mscomn es que el campo que se pretende leer sea de otro tipo (number, date, etc.). Si eltrace est habilitado, se ver el mensaje ADF0009.

    -6 Overflow. Este es un warning que indica que el largo del string en el registro es mayor almximo especificado (o asumido) en el parmetro . El valor ledo es truncado a caracteres.

    dfrgdate

    Lee un campo de tipo date de la lnea actual (leda por dfrnext). El valor de fecha ledo no esajustado de acuerto con la preference Year Limit. Sintxis:

    dfrgdate( [, [, ]]) Parmetros: puede ser un atributo o variable de tipo date. En l, se almacenar el valor ledo. 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 delcampo puede valer y, m o d. Su combinacin genera el formato. Por ejemplo si el stringcontiene 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 aleer se asume en formato Da, Mes, Ao. Es importate notar que los caracteres debenestar en minscula. El valor por defecto es ymd.

    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 valorescomunmente utilizados son /, - y .. El valor por defecto es -.

    Retorno:Esta funcin puede retornar alguno de los siguientes valores: 0 Operacin satisfactoria. El campo fue ledo.-1 Secuencia incorrecta. Ocurre cuando se llama a esta funcin antes de llamar a la funcin

    dfrnext o la ltima llamada a dfrnext retorn un valor diferente de cero (error). Si el traceest habilitado, se ver el mensaje ADF0004 o ADF0006.

    -5 Formato incorrecto. El string en el campo no tiene una forma correcta. La causa mscomn es que el campo que se pretende leer sea de otro tipo (number, date, etc.).

    -7 Fecha no vlida. El valor encontrado en el campo no corresponde a una fecha vlida.Normalmente ocurre porque el formato () o el separador () no corresponde a losexistentes en el archivo. Si el trace est habilitado, se ver el mensaje ADF0010.

    -10El parmetro tiene un formato incorrecto. Si el trace est habilitado, se ver elmensaje ADF0012.

    dfrclose

    Cierra el archivo abierto por dfropen. Esta funcin debe ser llamada despus de una llamadasatisfactoria (sin error) a dfropen. Sintxis:

    dfrclose() Parmetros:

  • 14/08/13 Funciones de Texto

    www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm 5/8

    No tiene. Retorno:Esta funcin puede retornar alguno de los siguientes valores: 0 Operacin satisfactoria. El archivo fue cerrado.-1 Secuencia incorrecta. Ocurre cuando se llama a esta funcin antes de llamar a la funcin

    dfropen o la ltima llamada a dfropen retorn un valor diferente de cero (error).

    Grabacin de archivos ASCII delimitados

    La siguiente es la descripcin detallada de las funciones que permiten grabar archivos ASCIIdelimitados.

    dfwopen

    Abre un archivo de texto para su procesamiento. Es la primera funcin que hay que llamar paracomenzar a leer un archivo de texto. Sintxis:

    dfwopen( [, [, ]]]) Parmetros: puede ser un atributo, variable o constante de tipo char. Su valor ser considerado

    como el nombre del archivo a procesar. Puede o no contener especificaciones de directorio.Si no las tiene, ser creado en el directorio corriente.

    puede ser un atributo, variable o constante de tipo character, opcional, que indica cual

    es el caracter delimitador entre campos. Si se quiere especificar el caracter de tabulacincomo separador, el valor de este parmetro debe ser el string \t.

    puede ser un atributo, variable o constante de tipo character, opcional, que indica cual

    es el caracter delimitador de los campos strings. Slo el primer carcter del valor delparmetro es considerado. Su valor, puede ser cualquier carcter que no aparezca en lostextos. Su valor por defecto es el (comillas).

    Retorno:Esta funcin puede retornar alguno de los siguientes valores: 0 Operacin satisfactoria. El archivo fue abierto.-1 Secuencia incorrecta. Ocurre cuando se llama ms de una vez a esta funcin sin haber

    llamado antes a la funcin dfwclose. Si est activado el trace, se ver el mensaje ADF0005indicando este error.

    -2 Error de apertura. Ocurre cuando el archivo identificado por no ha podido abrirse.La causa puede ser identificada claramente habilitando el trace y buscando el mensaje concdigo ADF0001. Lo ms comn es que el archivo no exista.

    -8 Memoria insuficiente. Ocurre cuando no es posible reservar un buffer de bytes. Si est activado el trace, se ver el mensaje ADF0007 indicando este error.

    dfwnext

    Graba el registro con los valores especificados por las llamadas anteriores a dfwptxt, dfwpnum,etc. en el archivo de texto delimitado. Sintxis:

    dfwnext()

  • 14/08/13 Funciones de Texto

    www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm 6/8

    Parmetros:No tiene Retorno:Esta funcin puede retornar alguno de los siguientes valores: 0 Operacin satisfactoria. El registro fue ledo.-1 Secuencia incorrecta. Ocurre cuando se llama a esta funcin antes de llamar a la funcin

    dfwopen o la llamada a dfwopen retorn un valor diferente de cero (error).-9 Error de grabacin. Ocurre cuando se ha producido un error al grabar la lnea en el archivo

    ASCII delimitado. La causa puede ser identificada claramente habilitando el trace y buscandoel mensaje con cdigo ADF0003.

    dfwpnum

    Graba un campo de tipo numrico en el registro actual del archivo ASCII delimitado. Sintxis:

    dfwpnum( , ) Parmetros: puede ser un atributo, variable o constante de tipo numrico. Su valor ser el grabado

    en el campo correspondiente.. 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 Operacin satisfactoria. El campo fue grabado.-1 Secuencia incorrecta. Ocurre cuando se llama a esta funcin antes de llamar a la funcin

    dfwopen o la ltima llamada a dfwopen retorn un valor diferente de cero (error). Si el traceest habilitado, se ver el mensaje ADF0004.

    dfwptxt

    Graba un campo de tipo character en el registro actual del archivo ASCII delimitado. Sintxis:

    dfwptxt( [, ]) Parmetros: puede ser un atributo, variable o constante de tipo character. Su valor ser el grabado en

    el campo correspondiente.. 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 definidopara el parmetro .

    Retorno:Esta funcin puede retornar alguno de los siguientes valores: 0 Operacin satisfactoria. El campo fue grabado.-1 Secuencia incorrecta. Ocurre cuando se llama a esta funcin antes de llamar a la funcin

    dfwopen o la ltima llamada a dfwopen retorn un valor diferente de cero (error). Si el traceest habilitado, se ver el mensaje ADF0004.

    dfwpdate

  • 14/08/13 Funciones de Texto

    www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm 7/8

    Graba un campo de tipo date en el registro actual del archivo ASCII delimitado. Si tiene el valornulo de GeneXus, se grabar la fecha "00/00/0000". Sintxis:

    dfwpdate( [, [, ]]) Parmetros: puede ser un atributo o variable de tipo date. En l, se almacenar el valor ledo. No

    puede ser una constante. 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 carcterdel campo puede valer y, m o d. Su combinacin genera el formato. Por ejemplo si elstring 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 aleer se asume en formato Da, Mes, Ao. Es importate notar que los caracteres debenestar en minscula. El valor por defecto es ymd.

    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 Operacin satisfactoria. El campo fue grabado.-1 Secuencia incorrecta. Ocurre cuando se llama a esta funcin antes de llamar a la funcin

    dfwopen o la ltima llamada a dfwopen retorn un valor diferente de cero (error). Si el traceest habilitado, se ver el mensaje ADF0004.

    -5 Formato incorrecto. El string en el campo no tiene una forma correcta. La causa mscomn es que el campo que se pretende leer sea de otro tipo (number, date, etc.).

    -10El parmetro tiene un formato incorrecto. Si el trace est habilitado, se ver elmensaje ADF0012.

    dfwclose

    Cierra el archivo abierto por dfwopen. Esta funcin debe ser llamada despus de una llamadasatisfactoria (sin error) a dfwopen. Sintxis:

    dfwclose() Parmetros:No tiene. Retorno:Esta funcin puede retornar alguno de los siguientes valores: 0 Operacin satisfactoria. El archivo fue cerrado.-1 Secuencia incorrecta. Ocurre cuando se llama a esta funcin antes de llamar a la funcin

    dfwopen o la ltima llamada a dfwopen retorn un valor diferente de cero (error).

    Consideraciones sobre los archivos ASCII delimitados

    Slo puede estar abierto un archivo ASCII delimitado en un momento especfico. La funcin dfropenretornar un error si se la llama ms de una vez sin haber llamado previamente a dfrclose.

  • 14/08/13 Funciones de Texto

    www.gxtechnical.com/gxdlsp/pub/genexus/java/docum/manuals/7.0/java70sp14.htm 8/8

    Es posible ignorar los campos del final de un registro al llamar a dfrnext cuando queden campos porleer. No es posible saltearse campos. Si se quiere leer el campo nmero 5 es necesario leer los 4anteriores. 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) ... endifenddo&i = dfrclose( )