Page 2 of 4

Re: Campos empaquetados en archivo de texto

PostPosted: Thu Oct 14, 2021 4:01 pm
by carlos vargas

Re: Campos empaquetados en archivo de texto

PostPosted: Thu Oct 14, 2021 6:29 pm
by El Loco
Carlitos grande... me parece que esto puede funcionar...estoy viéndolo desde el celular...cuando llegue a casa lo pruebo...pero por lo que vi puede llegar a funcionar.
Mil gracias amigo
Abrazo
Miguel

Re: Campos empaquetados en archivo de texto

PostPosted: Thu Oct 14, 2021 7:49 pm
by El Loco
Grande Carlos... lo estoy viendo desde el celular... pero por lo poco que vi me parece que va a funcionar ... cuando llegue a casa lo pruebo.
Desde ya muchísimas muchísimas gracias
Abrazo enorme
Miguel

Re: Campos empaquetados en archivo de texto

PostPosted: Fri Oct 15, 2021 2:24 am
by El Loco
Carlos ...hace un rato llegué a casa (22.30hs) de trabajar. De forma inmediata me puse a trabajar en esta función.
Por ahora, si bien la hice funcionar, los valores que envía son todos erróneos (tengo un archivo con los valores reales para comprobación) :(
Igual voy a seguir probando ..."hasta que las velas no ardan" o caiga desmayado de sueño.
Gracias
Abrazo.
Miguel

Re: Campos empaquetados en archivo de texto

PostPosted: Fri Oct 15, 2021 2:08 pm
by carlos vargas
Prueba con las herramientas del.segundo link.
A ver si funciona.

Re: Campos empaquetados en archivo de texto

PostPosted: Fri Oct 15, 2021 3:43 pm
by El Loco
carlos vargas wrote:Prueba con las herramientas del.segundo link.
A ver si funciona.


Buenos días....tampoco :cry:

Re: Campos empaquetados en archivo de texto

PostPosted: Sat Oct 16, 2021 2:55 am
by El Loco
El Loco wrote:Buenos días a todos.
Alguien por favor podría pasar esta función en C para utilizarla en FiveWin/Harbour?
Gustoso le abonaría por el trabajo realizado.
En verdad necesito poder convertir estos benditos campos ....necesito desesperadamente poder tomar este trabajo, que me ayudaría a pasar esta situación que estamos viviendo en mi amado país.
Desde ya muchísimas gracias.
Abrazo enorme
Miguel


Hola a todos... no hay nadie que se a anime a pasar esta función para poder probarla en Fivewin/Harbour ?
En verdad pagaría por el trabajo realizado. Realmente necesito poder tomar este trabajo.
Desde ya muchísimas gracias.
Abrazo.
Miguel

Re: Campos empaquetados en archivo de texto

PostPosted: Sat Oct 16, 2021 4:42 am
by Antonio Linares
Miguel,

estamos intentando matar moscas a cañonazos :-)

Revisando tu fichero Prueba.txt y las especificaciones que tienes en Diseño Registro 1250.xlsx es tan simple como hacer:

go.bat
Code: Select all  Expand view
set path=c:\bcc7\bin
c:\harbour\bin\hbmk2 comp3 -comp=bcc


comp3.prg
Code: Select all  Expand view
function Main()

   local cText := hb_MemoRead( "Prueba.txt" )

   Comp3( cText )

return nil

function Comp3( cText )

   local ClaveBeneficio   := SubStr( cText,  1, 11 )  // 01000000190
   local ClaseDeBeneficio := SubStr( cText, 12,  2 )  // 01
   local MarcaInvalidez   := SubStr( cText, 14,  1 )  // 'S' o ' '
   local ApellidoNombres  := SubStr( cText, 28, 27 )  // MELAMED LUIS
   local CajaOtorgante    := SubStr( cText, 55,  2 )  // 01
   local Marca            := SubStr( cText, 57,  1 )  // N

   ? "ClaveBeneficio:",   ClaveBeneficio
   ? "ClaseDeBeneficio:", ClaseDeBeneficio
   ? "MarcaInvalidez:",   MarcaInvalidez
   ? "ApellidoNombres:",  ApellidoNombres
   ? "CajaOtorgante:",    CajaOtorgante
   ? "Marca:",            Marca

return nil


Resultado
C:\soporte\MiguelAngel>comp3
ClaveBeneficio: 01000000190
ClaseDeBeneficio: 01
MarcaInvalidez:
ApellidoNombres: MELAMED LUIS
CajaOtorgante: 01
Marca: N


Y esos valores son correctos. Continua con los demas valores (eso lo tienes hecho en un ratito) y luego hacemos que lea cualquier registro (dandole el número de registro). Las posiciones 1, 12, 14, 28, 55, 57, ... y las longitudes 11, 2, 1, 27, 2, 1... estan tambien especificadas en ese mismo documento.

Animo que ese trabajo es para ti ;-)

Re: Campos empaquetados en archivo de texto

PostPosted: Sat Oct 16, 2021 6:35 am
by El Loco
Hola Antonio...gracias por tomarte el tiempo para verlo...pero me parece que no me explique bien.
ya tengo hecho un programa con todos los campos ya los tengo definido y los genera perfectamente incluso los guardo en un dbf.
El tema está en los campos empaquetados que comienzan en la posición 400 (que son una serie de 30 movimientos) y otros pocos campos más empaquetados.
EJ.:
x 53 400 1149 750 AREA CONCEPTOS - 30 occurs
x 53.1 400 424 25 AREA DE 1 CONCEPTO Hasta 30 Occurs
x 53.1.1 400 402 3 N CODIGO DE CONCEPTO
x 53.1.2 403 405 3 N CODIGO DE EMPRESA
x 53.1.3 406 407 2 N TIPO DE CONCEPTO
x 53.1.4 408 413 6 PS IMPORTE 9(9)V9
53.1.5 414 419 6 PS IMPORTE DEUDA TOTAL 9(9)V9
x 53.1.6 420 421 2 PS CANTIDAD DE CUOTAS
x 53.1.7 422 424 3 PS PORCENTAJE 9(3)V9

Ahí está mi problema, en los campos tipo "PS".....antiguamente estos campos venían en EBCDIC pero ahora lo cambiaron.
Lo que necesito es alguna función que convierta los campos empaquetados (COMP-3) por los menos en texto, después yo me arreglo.
Gracias.
Abrazo
Miguel

Re: Campos empaquetados en archivo de texto

PostPosted: Sat Oct 16, 2021 7:08 am
by Antonio Linares
Miguel,

En el documento el importe se describe como tipo "PS" y tiene una longitud de 6 bytes a partir de la posición 408:

local Importe := SubStr( cText, 408, 6 )

Sus valores en hexadecimal:
Code: Select all  Expand view
  ? "Importe:",          hb_NumToHex( Asc( SubStr( Importe, 1, 1 ) ) ),;
                          hb_NumToHex( Asc( SubStr( Importe, 2, 1 ) ) ),;
                          hb_NumToHex( Asc( SubStr( Importe, 3, 1 ) ) ),;
                          hb_NumToHex( Asc( SubStr( Importe, 4, 1 ) ) ),;
                          hb_NumToHex( Asc( SubStr( Importe, 5, 1 ) ) ),;
                          hb_NumToHex( Asc( SubStr( Importe, 6, 1 ) ) )


Aparece:
Importe: 0 0 88 ED 1B C


Sabes que valor es el que está guardado ahi ? Asi podemos averiguar el formato usado (comp3)

Re: Campos empaquetados en archivo de texto

PostPosted: Sat Oct 16, 2021 7:15 am
by Antonio Linares
Usando comp-3 el valor 12.345 queda como 12 34 5C y el valor -1.2 queda como 01 2D (C es positivo y D negativo)

estamos cerca :-)
https://stackoverflow.com/questions/795523/interpreting-comp-3-packed-decimal-fields-into-numeric-values

Re: Campos empaquetados en archivo de texto

PostPosted: Sat Oct 16, 2021 7:24 am
by Antonio Linares
Es posible que el valor guardado en el importe sea: 35.053,27 ?

Puedes comprobarlo ?

Re: Campos empaquetados en archivo de texto

PostPosted: Sat Oct 16, 2021 7:33 am
by Antonio Linares
Puede ser 136.237,27 ?

Re: Campos empaquetados en archivo de texto

PostPosted: Sat Oct 16, 2021 7:46 am
by Antonio Linares
Si 12.345 se convierte en 12 34 5C, veamos como generar eso nosotros:

Code: Select all  Expand view
function Main()

   NumToComp3( 12345 )

return nil

function NumToComp3( nValue )

   local cValue := AllTrim( Str( nValue ) )
   local nByte1 := Val( SubStr( cValue, 1, 2 ) )
   local nByte2 := Val( SubStr( cValue, 3, 2 ) )
   local nByte3 := Val( SubStr( cValue, 5, 1 ) )

   ? cValue, nByte1, nByte2, nByte3, If( nValue > 0, "C", "D" )

return nil


Resultado:
C:\soporte\MiguelAngel>comp3
12345 12 34 5 C


Si el formato es asi, ya sabemos como generarlo, ahora falta hacerlo en el sentido contrario :-)

Re: Campos empaquetados en archivo de texto

PostPosted: Sat Oct 16, 2021 1:02 pm
by El Loco
.