Convertir texto en LF a CR/LF

Posted by ezequielmontoya on 06-Feb-2018 13:31

Hola, nosotros debemos bajar periódicamente de una web del gobierno de mi país un archivo texto y subirlo a nuestra BD.

Mi código funciona bien, con la incomodidad de que el usuario, luego de bajar el archivo, debe abrirlo en Wordpad y volverlo a grabar.

Al parecer esta entidad genera sus textos en Unix o Linux, pero nosotros tenemos Windows.

Me gustaría dejar que el usuario, de un solo click, pudiera subir la info a la BD sin pasar por Wordpad ni el peligro (menor pero incómodo) de que se equivoque de carpeta destino.

Para eso necesito convertir el texto. ¿Sabe alguien cómo puedo hacer eso?

No necesariamente en ABL. Probé hace unos minutos una utilidad llamada "unix2dos" pero no resultó bien.

Hasta pronto

Posted by ezequielmontoya on 07-Feb-2018 10:45

Hola Edsel, muchas gracias. Puedo estar interpretando mal el asunto.

Si uno toma el archivo recién bajado de la web y lo abre en Notepad, se presenta como una sola línea muy larga y al grabarlo eso no cambia.

Si en línea de comandos le da TYPE, se muestra bien.

Al tratar de hacer IMPORT desde ABL se recibe mensaje de línea muy larga.

Si se lo abre en Wordpad, se muestra bien separada cada línea. Al grabarlo, aumenta un poco el tamaño en Kb y si se abre este nuevo archivo con Notepad, esta vez se presenta bien. Y ABL lo importa sin problemas.

El crecimiento del tamaño en Kb es lo que me hizo pensar que se estaban insertando los CR, pero podría estarme equivocando así que conseguí un editor hexadecimal.

En el texto original, el separador de línea es un caracter 0D, es decir CR

En el texto regrabado desde WordPad, el separador es 0D 0A, es decir CR LF

Los Mac OS antiguos usaban CR como separador. Esto explica por qué unix2dos y otros no hicieron el trabajo.

Con esta pista encontré otras utilidades en línea de comandos que puedo llamar desde ABL. Mi problema está solucionado, ¡gracias de nuevo!

Posted by egarcia on 07-Feb-2018 06:17

Hola Ezequiel,

El comando unix2dos hace la conversion de los caracteres para indicar el final de la linea.

Estas usando IMPORT en el ABL?

El ABL te maneja el newline y el linefeed para terminar una linea.

Pareciese que la necesidad de abrir el archivo en Wordpad y grabarlo es por otros caracteres.

Tal vez puedieses ver la diferencia entre los archivos antes y despues.

Herramientas como Beyond Compare o el comando "od -c <archivo>" puede ser util.

(od - octal dump esta disponible en UNIX/Linux y tambien en Cygwin.)

Ya sabiendo la diferencia, puedes ver que comando o ABL codigo usar para convertir el archivo.

Espero que esto te ayude,

Edsel

All Replies

Posted by egarcia on 07-Feb-2018 06:17

Hola Ezequiel,

El comando unix2dos hace la conversion de los caracteres para indicar el final de la linea.

Estas usando IMPORT en el ABL?

El ABL te maneja el newline y el linefeed para terminar una linea.

Pareciese que la necesidad de abrir el archivo en Wordpad y grabarlo es por otros caracteres.

Tal vez puedieses ver la diferencia entre los archivos antes y despues.

Herramientas como Beyond Compare o el comando "od -c <archivo>" puede ser util.

(od - octal dump esta disponible en UNIX/Linux y tambien en Cygwin.)

Ya sabiendo la diferencia, puedes ver que comando o ABL codigo usar para convertir el archivo.

Espero que esto te ayude,

Edsel

Posted by ezequielmontoya on 07-Feb-2018 10:45

Hola Edsel, muchas gracias. Puedo estar interpretando mal el asunto.

Si uno toma el archivo recién bajado de la web y lo abre en Notepad, se presenta como una sola línea muy larga y al grabarlo eso no cambia.

Si en línea de comandos le da TYPE, se muestra bien.

Al tratar de hacer IMPORT desde ABL se recibe mensaje de línea muy larga.

Si se lo abre en Wordpad, se muestra bien separada cada línea. Al grabarlo, aumenta un poco el tamaño en Kb y si se abre este nuevo archivo con Notepad, esta vez se presenta bien. Y ABL lo importa sin problemas.

El crecimiento del tamaño en Kb es lo que me hizo pensar que se estaban insertando los CR, pero podría estarme equivocando así que conseguí un editor hexadecimal.

En el texto original, el separador de línea es un caracter 0D, es decir CR

En el texto regrabado desde WordPad, el separador es 0D 0A, es decir CR LF

Los Mac OS antiguos usaban CR como separador. Esto explica por qué unix2dos y otros no hicieron el trabajo.

Con esta pista encontré otras utilidades en línea de comandos que puedo llamar desde ABL. Mi problema está solucionado, ¡gracias de nuevo!

This thread is closed