![]() |
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:
é uma possiblidade mas necessito de percorrer uma string grande, tipo: Código COBOL:
Conhecem alguma alternativa? Gracias, |
Cita:
Código COBOL:
También mira esto a ver si dura menos, el cálculo será diferente pero puede servir igual creo: Código COBOL:
Código COBOL:
|
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:
|
@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 |
1 Archivos Adjunto(s)
Cita:
|
Cita:
|
@Joseg,
MainForm -> EDIT PROCEDURE DIVISION -> NEW, renombra en PRC-CALC Edita y pega esto: Código COBOL:
Código del botón Nº1: Código COBOL:
Código del botón Nº2: Código COBOL:
|
Cita:
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:
Mas como a String pode conter até 3000 bytes tenho que procurar outra solução. |
@Joseg, creo que lo he arreglado:
Código COBOL:
Es que estábamos tontos macho, con la SUMA no vale, y lo sabemos desde el cole :D Cita:
|
Cita:
"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 |
Cita:
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é |
@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:
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:
Entonces a mi me da 2 valores diferentes: Código:
207.99.99; --> 759816616914665856 |
Cita:
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 Archivos Adjunto(s)
Cita:
|
Cita:
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 |
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:
Tienes que crear una nueva PROCEDURE y llamarla HEX, su contenido es el siguiente: Código COBOL:
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 |
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:
|
| 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.