• Publicidad

Extraer datos de un texto plano generado por Cobol

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Extraer datos de un texto plano generado por Cobol

Notapor felloz » 2020-02-14 10:40 @486

Saludos.

Tengo un archivo de texto plano txt, generado por cobol, y necesito extraer los datos del archivo y almacenar las variables para luego enviarlas a una base de datos.

Se me ocurre hacerlo a través de las posiciones en la que se encuentran en el archivo, pero en ese caso no sé cómo hacerlo, y si hay otra forma me gustaría que me dieran una sugerencia.

El texto similar es este:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. 9836                188            1340
  2. 9837              54077            1510
  3. 9892                390  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
felloz
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2018-12-10 09:11 @424

Publicidad

Re: Extraer datos de un texto plano generado por Cobol

Notapor explorer » 2020-02-14 12:47 @574

Si están en posiciones fijas, puedes usar unpack() para extraerlos.

Con este programa, se sacan las columnas (he deducido que son de 7, 16 y 16 caracteres de ancho):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. # Ejemplo de unpack para columnas de texto
  3. #
  4. # Columnas:
  5. #
  6. # 123456712345678901234561234567890123456
  7. # +------+---------------+---------------+
  8. # 9836                188            1340
  9. # 9837              54077            1510
  10.  
  11. use v5.24;
  12.  
  13. # leer archivo por lineas
  14. open my $FH, '<', 'code_41166.txt';
  15. while (<$FH>) {
  16.     chomp;
  17.     my @campos = unpack 'A7 A16 A16';
  18.  
  19.     say '[', join('|', @campos), ']';
  20. }
  21. close $FH;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
La salida es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[9836|             188|            1340]
[9837|           54077|            1510]
[9892|             390|]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Si en vez de texto, quieres los números (quitar los espacios en blanco que hay delante de los números), te vale con sumarles un 0.

Tienes un completísimo manual (¡en español!) en el documento perldoc perlpacktut. La descripción de unpack() la tienes en perldoc -f unpack
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados