Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Compilador] String para Decimal (https://www.cobolforo.es/showthread.php?t=1486)

Joseg 5 de mayo de 2022 12:05

String para Decimal
 
Necessito de achar um valor único de uma string, para criar uma chave, já que chaves primarias ou alternadas tem um limite máximo de 255 bytes.

Calcular o valor ASCII do mesmo poderia ser uma possibilidade...

Esta função:
Código COBOL:
  1.      FUNCTION ORD (argument-1)

é uma possiblidade mas necessito de percorrer uma string grande, tipo:
Código COBOL:
  1.      01 wmyvar pic x(3000).
fica lento.
Conhecem alguma alternativa?

Gracias,

Kuk 5 de mayo de 2022 15:42

Cita:

Citación del post de Joseg (Mensaje 7770)
fica lento.

¿Cómo lo haces? Prueba algo así:

Código COBOL:
  1.      01 wmyvar pic x(3000).
  2.      01 filler redefines wmyvar.
  3.         05  byte occurs 3000  pic 9(2) comp-5.
  4.      
  5.      01 idx-1      pic 9(4) comp-5.
  6.      01 suma       pic 9(9) comp-5.
  7.      procedure division.
  8.        
  9.         move 1 to idx-1
  10.         move 0 to suma
  11.        
  12.         perform until idx-1 > length of wmyvar
  13.             add byte(idx-1) to suma
  14.  
  15.             add 1 to idx-1
  16.         end-perform
  17.        

También mira esto a ver si dura menos, el cálculo será diferente pero puede servir igual creo:

Código COBOL:
  1.      01 wmyvar pic x(3000).
  2.      01 filler redefines wmyvar.
  3.         05  byte occurs 1500  pic 9(4) comp-5.
  4.      
  5.      01 idx-1      pic 9(4) comp-5.
  6.      01 suma       pic 9(9) comp-5.
  7.      procedure division.
  8.        
  9.         move 1 to idx-1
  10.         move 0 to suma
  11.        
  12.         perform until idx-1 > 1500
  13.             add byte(idx-1) to suma
  14.  
  15.             add 1 to idx-1
  16.         end-perform
  17.        

Código COBOL:
  1.      01 wmyvar pic x(3000).
  2.      01 filler redefines wmyvar.
  3.         05  byte occurs 750  pic 9(9) comp-5.
  4.      
  5.      01 idx-1      pic 9(4) comp-5.
  6.      01 suma       pic 9(18) comp-5.
  7.      procedure division.
  8.        
  9.         move 1 to idx-1
  10.         move 0 to suma
  11.        
  12.         perform until idx-1 > 750
  13.             add byte(idx-1) to suma
  14.  
  15.             add 1 to idx-1
  16.         end-perform
  17.        

Joseg 10 de mayo de 2022 13:50

Ainda não tenho a solução para o problema.

Pretendia que a string:
"101.10.01"
fosse SEMPRE diferente de:
"101.10.10"

...e tenho casos em que o cálculo dá o mesmo valor.

Gracias por qualquer ajuda.


Cita:

Citación del post de Kuk (Mensaje 7771)
¿Cómo lo haces? Prueba algo así:

Código COBOL:
  1.      01 wmyvar pic x(3000).
  2.      01 filler redefines wmyvar.
  3.         05  byte occurs 3000  pic 9(2) comp-5.
  4.      
  5.      01 idx-1      pic 9(4) comp-5.
  6.      01 suma       pic 9(9) comp-5.
  7.      procedure division.
  8.        
  9.         move 1 to idx-1
  10.         move 0 to suma
  11.        
  12.         perform until idx-1 > length of wmyvar
  13.             add byte(idx-1) to suma
  14.  
  15.             add 1 to idx-1
  16.         end-perform
  17.        

También mira esto a ver si dura menos, el cálculo será diferente pero puede servir igual creo:

Código COBOL:
  1.      01 wmyvar pic x(3000).
  2.      01 filler redefines wmyvar.
  3.         05  byte occurs 1500  pic 9(4) comp-5.
  4.      
  5.      01 idx-1      pic 9(4) comp-5.
  6.      01 suma       pic 9(9) comp-5.
  7.      procedure division.
  8.        
  9.         move 1 to idx-1
  10.         move 0 to suma
  11.        
  12.         perform until idx-1 > 1500
  13.             add byte(idx-1) to suma
  14.  
  15.             add 1 to idx-1
  16.         end-perform
  17.        

Código COBOL:
  1.      01 wmyvar pic x(3000).
  2.      01 filler redefines wmyvar.
  3.         05  byte occurs 750  pic 9(9) comp-5.
  4.      
  5.      01 idx-1      pic 9(4) comp-5.
  6.      01 suma       pic 9(18) comp-5.
  7.      procedure division.
  8.        
  9.         move 1 to idx-1
  10.         move 0 to suma
  11.        
  12.         perform until idx-1 > 750
  13.             add byte(idx-1) to suma
  14.  
  15.             add 1 to idx-1
  16.         end-perform
  17.        


Kuk 10 de mayo de 2022 15:36

@Joseg, prueba con la última versión, la de byte occurs 750 pic 9(9) comp-5. porque ahí toma 4 bytes con lo cual también tiene en cuenta el orden.

A mi me funciona, mira el ejemplo que has dado da diferente resultado con el método que digo:
Código:

PIC X(12) VALUE "101.10.01" --> 00000000002122285203
PIC X(12) VALUE "101.10.10" --> 00000000002139062418


Joseg 10 de mayo de 2022 16:34

1 Archivos Adjunto(s)
Cita:

Citación del post de Kuk (Mensaje 7796)
@Joseg, prueba con la última versión, la de byte occurs 750 pic 9(9) comp-5. porque ahí toma 4 bytes con lo cual también tiene en cuenta el orden.

A mi me funciona, mira el ejemplo que has dado da diferente resultado con el método que digo:
Código:

PIC X(12) VALUE "101.10.01" --> 00000000002122285203
PIC X(12) VALUE "101.10.10" --> 00000000002139062418


Com um exemplo fica mais fácil testar !

Joseg 10 de mayo de 2022 16:51

Cita:

Citación del post de Joseg (Mensaje 7801)
Com um exemplo fica mais fácil testar !

A ordem como os códigos (121-05-10;...) são colocados na string , pode ser um diferenciador.

Kuk 10 de mayo de 2022 17:44

@Joseg,

MainForm -> EDIT PROCEDURE DIVISION -> NEW, renombra en PRC-CALC

Edita y pega esto:

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01 idx-1        pic 9(4) comp-5.
  5.  01 wsomamodelos pic 9(18) comp-5.
  6.  
  7.  LINKAGE SECTION.
  8.  01  LNK-DATOS.
  9.      05  LNK-INPUT    PIC X(3000).
  10.      05  filler redefines LNK-INPUT.
  11.          10  byte occurs 750 pic 9(8) comp-5.
  12.      05  LNK-OUTPUT   PIC 9(18).
  13.      
  14.  PROCEDURE       DIVISION USING LNK-DATOS.
  15.      
  16.      move 1 to idx-1
  17.      move function current-date(5:12) to LNK-OUTPUT
  18.      
  19.      perform until idx-1 > 750
  20.          add byte(idx-1) to wsomamodelos
  21.  
  22.          add 1 to idx-1
  23.      end-perform
  24.      
  25.      add wsomamodelos to LNK-OUTPUT
  26.      
  27.      display LNK-OUTPUT

Código del botón Nº1:
Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  LNK-DATOS.
  5.      05  LNK-INPUT    PIC X(3000).    
  6.      05  LNK-OUTPUT   PIC 9(18).
  7.  
  8.  PROCEDURE       DIVISION.
  9.  
  10.       MOVE "Text" OF CmText1 TO LNK-INPUT
  11.  
  12.       perform 5 times *> PARA TEST RAPIDO
  13.           CALL "PRC-CALC" USING LNK-DATOS
  14.       end-perform
  15.      
  16.       MOVE LNK-OUTPUT TO "Text" OF CmText3  

Código del botón Nº2:
Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  
  5.  01  LNK-DATOS.
  6.      05  LNK-INPUT    PIC X(3000).    
  7.      05  LNK-OUTPUT   PIC 9(18).
  8.  
  9.  PROCEDURE       DIVISION.
  10.  
  11.       MOVE "Text" OF CmText2 TO LNK-INPUT
  12.  
  13.       CALL "PRC-CALC" USING LNK-DATOS
  14.      
  15.       MOVE LNK-OUTPUT TO "Text" OF CmText4  

Joseg 10 de mayo de 2022 17:58

Cita:

Citación del post de Kuk (Mensaje 7805)
@Joseg,

MainForm -> EDIT PROCEDURE DIVISION -> NEW, renombra en PRC-CALC

Edita y pega esto:

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01 idx-1        pic 9(4) comp-5.
  5.  01 wsomamodelos pic 9(18) comp-5.
  6.  
  7.  LINKAGE SECTION.
  8.  01  LNK-DATOS.
  9.      05  LNK-INPUT    PIC X(3000).
  10.      05  filler redefines LNK-INPUT.
  11.          10  byte occurs 750 pic 9(8) comp-5.
  12.      05  LNK-OUTPUT   PIC 9(18).
  13.      
  14.  PROCEDURE       DIVISION USING LNK-DATOS.
  15.      
  16.      move 1 to idx-1
  17.      move function current-date(5:12) to LNK-OUTPUT
  18.      
  19.      perform until idx-1 > 750
  20.          add byte(idx-1) to wsomamodelos
  21.  
  22.          add 1 to idx-1
  23.      end-perform
  24.      
  25.      add wsomamodelos to LNK-OUTPUT
  26.      
  27.      display LNK-OUTPUT

Código del botón Nº1:
Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  LNK-DATOS.
  5.      05  LNK-INPUT    PIC X(3000).    
  6.      05  LNK-OUTPUT   PIC 9(18).
  7.  
  8.  PROCEDURE       DIVISION.
  9.  
  10.       MOVE "Text" OF CmText1 TO LNK-INPUT
  11.  
  12.       perform 5 times *> PARA TEST RAPIDO
  13.           CALL "PRC-CALC" USING LNK-DATOS
  14.       end-perform
  15.      
  16.       MOVE LNK-OUTPUT TO "Text" OF CmText3  

Código del botón Nº2:
Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  
  5.  01  LNK-DATOS.
  6.      05  LNK-INPUT    PIC X(3000).    
  7.      05  LNK-OUTPUT   PIC 9(18).
  8.  
  9.  PROCEDURE       DIVISION.
  10.  
  11.       MOVE "Text" OF CmText2 TO LNK-INPUT
  12.  
  13.       CALL "PRC-CALC" USING LNK-DATOS
  14.      
  15.       MOVE LNK-OUTPUT TO "Text" OF CmText4  

Gracias pela ajuda !!!

Entendo a ideia. Mas não posso usar.
Eu quero mais tarde validar o registo voltando a calcular o valor original tendo por base esta string "121-03-10;121-17-00;121-03-10;121-17-00;121-05-01;", para ver se o registo já existe.

Se a "primary key" não tivesse o limite de apenas 255 bytes (ficheiros ISAM), não tinha este problema. Simplesmente definia como chave única:
Código COBOL:
  1. 01 wmodelosori PIC X(3000).
e tinha o problema resolvido.
Mas como a String pode conter até 3000 bytes tenho que procurar outra solução.

Kuk 10 de mayo de 2022 20:46

@Joseg, creo que lo he arreglado:

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01 idx-1        pic 9(4) comp-5.
  5.  01 wsomamodelos pic 9(18) comp-5.
  6.  
  7.  LINKAGE SECTION.
  8.  01  LNK-DATOS.
  9.      05  LNK-INPUT    PIC X(3000).
  10.      05  filler redefines LNK-INPUT.
  11.          10  byte occurs 750 pic 9(8) comp-5.
  12.      05  LNK-OUTPUT   PIC 9(18).
  13.      
  14.  PROCEDURE       DIVISION USING LNK-DATOS.
  15.      
  16.      move 1 to idx-1
  17.      move 0 to LNK-OUTPUT, wsomamodelos
  18.      
  19.      
  20.      perform until idx-1 > 750
  21.          COMPUTE wsomamodelos = wsomamodelos + byte(idx-1) * idx-1
  22.  
  23.          add 1 to idx-1
  24.      end-perform
  25.      
  26.      MOVE wsomamodelos to LNK-OUTPUT
  27.      
  28.      display LNK-OUTPUT

Es que estábamos tontos macho, con la SUMA no vale, y lo sabemos desde el cole :D

Cita:

Citación del post de Mates Básicas
Propiedad conmutativa de la suma: cambiar el orden de los sumandos no altera la suma


Joseg 11 de mayo de 2022 11:21

Cita:

Citación del post de Kuk (Mensaje 7810)
@Joseg, creo que lo he arreglado:

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01 idx-1        pic 9(4) comp-5.
  5.  01 wsomamodelos pic 9(18) comp-5.
  6.  
  7.  LINKAGE SECTION.
  8.  01  LNK-DATOS.
  9.      05  LNK-INPUT    PIC X(3000).
  10.      05  filler redefines LNK-INPUT.
  11.          10  byte occurs 750 pic 9(8) comp-5.
  12.      05  LNK-OUTPUT   PIC 9(18).
  13.      
  14.  PROCEDURE       DIVISION USING LNK-DATOS.
  15.      
  16.      move 1 to idx-1
  17.      move 0 to LNK-OUTPUT, wsomamodelos
  18.      
  19.      
  20.      perform until idx-1 > 750
  21.          COMPUTE wsomamodelos = wsomamodelos + byte(idx-1) * idx-1
  22.  
  23.          add 1 to idx-1
  24.      end-perform
  25.      
  26.      MOVE wsomamodelos to LNK-OUTPUT
  27.      
  28.      display LNK-OUTPUT

Es que estábamos tontos macho, con la SUMA no vale, y lo sabemos desde el cole :D


"Es que estábamos tontos macho, con la SUMA no vale, y lo sabemos desde el cole" :bat: :bat:

Agora si !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!

Muitas muitas gracias Kuk

Joseg 22 de enero de 2026 18:05

Cita:

Citación del post de Joseg (Mensaje 7817)
"Es que estábamos tontos macho, con la SUMA no vale, y lo sabemos desde el cole" :bat: :bat:

Agora si !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!

Muitas muitas gracias Kuk

Tengo un problema con este cálculo, y ahora es grave, porque ya hay muchos registros creados.

La suma de la cadena "207.99.99;" es igual a "247.97.99;".

Mi resultado: "000151790274229935".

Mi objetivo es que sea diferente. ¿Hay alguna alternativa?

Gracias,
José

Kuk 22 de enero de 2026 21:55

@Joseg, nunca he sido un crack de las formulas y algoritmos la verdad, pero me acabo de dar cuenta de otra cosa que sabemos desde el cole y se nos ha escapado...

El cálculo lo hacemos así:

Código COBOL:
  1.      COMPUTE wsomamodelos = wsomamodelos + byte(idx-1) * idx-1

De esta manera, primero se hace la multiplicación.

Si lo hacemos así, con paréntesis, para que primero se haga la suma:
Código COBOL:
  1.      COMPUTE wsomamodelos = (wsomamodelos + byte(idx-1)) * idx-1

Entonces a mi me da 2 valores diferentes:
Código:

207.99.99;  --> 759816616914665856
247.97.99;  --> 257135248213769984


Joseg 22 de enero de 2026 22:39

Cita:

Citación del post de Kuk (Mensaje 10173)
@Joseg, nunca he sido un crack de las formulas y algoritmos la verdad, pero me acabo de dar cuenta de otra cosa que sabemos desde el cole y se nos ha escapado...

El cálculo lo hacemos así:

Código COBOL:
  1.      COMPUTE wsomamodelos = wsomamodelos + byte(idx-1) * idx-1

De esta manera, primero se hace la multiplicación.

Si lo hacemos así, con paréntesis, para que primero se haga la suma:
Código COBOL:
  1.      COMPUTE wsomamodelos = (wsomamodelos + byte(idx-1)) * idx-1

Entonces a mi me da 2 valores diferentes:
Código:

207.99.99;  --> 759816616914665856
247.97.99;  --> 257135248213769984


Ahhhhhhh, ok, ok,

Muchas gracias, Kuk. Cambiaré la fórmula. Sin embargo, chatGTP sugirió este ejemplo, lo que garantiza que siempre funciona, independientemente del orden de los dígitos/caracteres.

Código COBOL:
  1.        DATA DIVISION.
  2.        WORKING-STORAGE SECTION.
  3.        01 WS-TEXTO        PIC X(50)
  4.            VALUE "207.99.99;247.97.99;".
  5.        01 WS-CODE         PIC 9(9) VALUE 0.
  6.        01 WS-ASCII        PIC 9(3).
  7.        01 I               PIC 9(3).
  8.  
  9.        PROCEDURE DIVISION.
  10.            MOVE 0 TO WS-CODE
  11.  
  12.            PERFORM VARYING I FROM 1 BY 1
  13.              UNTIL I > FUNCTION LENGTH(WS-TEXTO)
  14.                COMPUTE WS-ASCII = FUNCTION ORD(WS-TEXTO(I:1))
  15.                COMPUTE WS-CODE = (WS-CODE * 31) + WS-ASCII
  16.                COMPUTE WS-CODE = FUNCTION MOD(WS-CODE, 999999999)
  17.            END-PERFORM
  18.  
  19.            DISPLAY "CODIGO = " WS-CODE

Kuk 24 de enero de 2026 20:44

1 Archivos Adjunto(s)
Cita:

Citación del post de Joseg (Mensaje 10174)
chatGTP sugirió

Yo no me fiaría en este tipo de cosas ;)

Joseg 19 de marzo de 2026 13:42

Cita:

Citación del post de Kuk (Mensaje 10178)
Yo no me fiaría en este tipo de cosas ;)

Hola Kuk, esto no es fácil.

El cliente detectó otro error. Los códigos:
105.02.11 y 115.01.11
dan el mismo valor: 298955437302929664.
Creo que hay que tener en cuenta la posición en la que se introducen los dígitos. ¿Puedes ayudarme?

Gracias
Jose

Kuk 20 de marzo de 2026 10:17

1 Archivos Adjunto(s)
@Joseg, para no reinventar la rueda, vamos a optar por soluciones estándar, como es el caso de OpenSSL: https://es.dll-files.com/libcrypto.dll.html

Con esta solución generamos un HASH, en el caso concreto, el SHA256:
Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  strInput    PIC X(3000).  
  5.      
  6.  01  LK-HASH-RAW       PIC X(32).
  7.  
  8.  01  hLib        PIC S9(9) COMP-5.
  9.  01  ptrSHA256   PROCEDURE-POINTER.
  10.  01  ptrINPUT    POINTER.
  11.  01  nPtrINPUT REDEFINES ptrINPUT PIC S9(9) COMP-5.
  12.  
  13.  01  strLen      PIC S9(9) COMP-5.
  14.  
  15.  
  16. *-----------------------------------
  17.  01  LNK-LEN                      PIC 9(4) COMP.
  18.  01  LNK-INPUT.
  19.      05  FILLER PIC X OCCURS 1 TO 1000 DEPENDING ON LNK-LEN.
  20.  
  21.  01  LNK-OUTPUT.
  22.      05  LNK-HEX1.
  23.          10  LNK-H1 PIC X OCCURS 1 TO 1000 DEPENDING ON LNK-LEN.
  24.      05  LNK-HEX2.
  25.          10  LNK-H2 PIC X OCCURS 1 TO 1000 DEPENDING ON LNK-LEN.
  26.      
  27.  PROCEDURE       DIVISION.
  28.      
  29.      MOVE POW-TEXT OF CmText1 TO strInput
  30.      
  31.      CALL "LoadLibraryA" WITH STDCALL USING BY CONTENT "libcrypto.dll" RETURNING hLib
  32.      
  33.      CALL "GetProcAddress" WITH STDCALL USING BY VALUE hLib, BY CONTENT "SHA256" & X"00" RETURNING ptrSHA256
  34.      
  35.      MOVE FUNCTION ADDR(strInput) TO ptrINPUT
  36.      
  37.      COMPUTE strLen = FUNCTION STORED-CHAR-LENGTH(strInput)
  38.      
  39.      CALL ptrSHA256 WITH STDCALL USING
  40.         BY VALUE     nPtrINPUT
  41.         BY VALUE     strLen
  42.         BY REFERENCE LK-HASH-RAW
  43.      
  44.      COMPUTE LNK-LEN = FUNCTION STORED-CHAR-LENGTH(LK-HASH-RAW)
  45.      MOVE LK-HASH-RAW TO LNK-INPUT
  46.      
  47.      CALL "HEX" USING LNK-LEN, LNK-INPUT, LNK-OUTPUT
  48.      
  49.      MOVE LNK-OUTPUT TO POW-TEXT OF CmText3  

Tienes que crear una nueva PROCEDURE y llamarla HEX, su contenido es el siguiente:
Código COBOL:
  1.  ENVIRONMENT DIVISION.
  2.  DATA DIVISION.
  3.  
  4.  WORKING-STORAGE SECTION.
  5.  01  IDX-1                        PIC S9(4)  COMP-5.
  6.  01  IDX-S                        PIC S9(4)  COMP-5.
  7.  
  8.  01  TBL-HEX                      PIC X(16) VALUE "0123456789ABCDEF".
  9.  
  10.  01  WS-HEX-1                     PIC S9(4)  COMP-5.
  11.  01  WS-HEX-2                     PIC S9(4)  COMP-5.
  12.  
  13.  01  WS-BIN                       PIC X.
  14.  01  WS-BIN-2 REDEFINES WS-BIN    PIC 9(2) COMP-5.
  15.    
  16. ******************************************************************
  17. *                      LINKAGE SECTION                           *
  18. ******************************************************************
  19.  LINKAGE SECTION.
  20.  01  LNK-LEN                      PIC 9(4) COMP.
  21.  01  LNK-INPUT.
  22.      05  FILLER PIC X OCCURS 1 TO 1000 DEPENDING ON LNK-LEN.
  23.  
  24.  01  LNK-OUTPUT PIC X(2000).
  25.  
  26. ******************************************************************
  27. *                       PROCEDURE DIVISION
  28. ******************************************************************
  29.  PROCEDURE DIVISION USING LNK-LEN, LNK-INPUT, LNK-OUTPUT.
  30.      
  31.      MOVE 1 TO IDX-1, IDX-S
  32.      
  33.      PERFORM UNTIL IDX-1 > LNK-LEN
  34.          MOVE LNK-INPUT(IDX-1:1) TO WS-BIN
  35.          
  36.          DIVIDE WS-BIN-2 BY 16
  37.              GIVING WS-HEX-1 REMAINDER WS-HEX-2
  38.          
  39.          ADD 1 TO WS-HEX-1, WS-HEX-2
  40.          
  41.          MOVE TBL-HEX(WS-HEX-1:1) TO LNK-OUTPUT(IDX-S:1)
  42.          ADD 1 TO IDX-S
  43.          MOVE TBL-HEX(WS-HEX-2:1) TO LNK-OUTPUT(IDX-S:1)
  44.              
  45.          ADD 1 TO IDX-1, IDX-S
  46.      END-PERFORM
  47.      
  48.      GOBACK
  49.      .

No olvides lo de ALPHAL(WORD) e incluir la KERNEL32.LIB.

Resultados:
[TABLE]Valor|sha256
105.02.11|45A5AC763720497A3054E1A5C1C24DB458CE0C30 79F9AD2AB9496EAF9EAC087B
115.01.11|2B83108827E847A74B0886AB2E532E3F79988131 A61546499C3B08F32E4DB9F5
207.99.99|8189CCD84246547FD968902606574828E03D332D 2A9D65D9FCA11868303CA8B9
247.97.99|D9DCC2614B2499CCEEF96484C65855258D7CD2AF 8DEA2E5079C7F13860D9C323
[/TABLE]

¡¡¡Esto ya NO PUEDE fallar!!! :D

Joseg 20 de marzo de 2026 12:52

Kuk,
Muchas gracias por tu trabajo. Creo que esta es una solución más sólida que podría interesar al resto de la comunidad.

Ya la he probado y parece funcionar bien.


Cita:

Citación del post de Kuk (Mensaje 10215)
@Joseg, para no reinventar la rueda, vamos a optar por soluciones estándar, como es el caso de OpenSSL: https://es.dll-files.com/libcrypto.dll.html



La franja horaria es GMT +2. Ahora son las 14:47.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.