Resultados 1 al 10 de 10

Tema: String para Decimal

  1. #1
      Senior
    Avatar de Joseg

    Registrado
    abril de 2015
    Mensajes
    285
    Última visita
    Ayer a las 17:41

    Agradecimientos
     
    Recibidos
    125
    Enviados
    73

    Citaciones y menciones
     
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    19
    Activista del Foro / Point Value: 0 Innovación / Point Value: 0

    Predeterminado 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:
    COBOL Código:
    1.      FUNCTION ORD (argument-1)

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

    Gracias,

    0 Not allowed!

  2. #2
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,087
    Última visita
    Hoy a las 00:34

    Agradecimientos
     
    Recibidos
    908
    Enviados
    784

    Citaciones y menciones
     
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    12 Post(s)
    Poder de Reputación
    10

    Predeterminado

    Cita Iniciado por Joseg Ver Mensaje
    fica lento.
    ¿Cómo lo haces? Prueba algo así:

    COBOL Código:
    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:

    COBOL Código:
    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.        

    COBOL Código:
    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.        

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  3. #3
      Senior
    Avatar de Joseg

    Registrado
    abril de 2015
    Mensajes
    285
    Última visita
    Ayer a las 17:41

    Agradecimientos
     
    Recibidos
    125
    Enviados
    73

    Citaciones y menciones
     
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    19
    Activista del Foro / Point Value: 0 Innovación / Point Value: 0

    Predeterminado

    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 Iniciado por Kuk Ver Mensaje
    ¿Cómo lo haces? Prueba algo así:

    COBOL Código:
    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:

    COBOL Código:
    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.        

    COBOL Código:
    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.        

    0 Not allowed!

  4. #4
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,087
    Última visita
    Hoy a las 00:34

    Agradecimientos
     
    Recibidos
    908
    Enviados
    784

    Citaciones y menciones
     
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    12 Post(s)
    Poder de Reputación
    10

    Predeterminado

    @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:
    CODE Código:
    1. PIC X(12) VALUE "101.10.01" --> 00000000002122285203
    2. PIC X(12) VALUE "101.10.10" --> 00000000002139062418

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  5. #5
      Senior
    Avatar de Joseg

    Registrado
    abril de 2015
    Mensajes
    285
    Última visita
    Ayer a las 17:41

    Agradecimientos
     
    Recibidos
    125
    Enviados
    73

    Citaciones y menciones
     
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    19
    Activista del Foro / Point Value: 0 Innovación / Point Value: 0

    Predeterminado

    Cita Iniciado por Kuk Ver Mensaje
    @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:
    CODE Código:
    1. PIC X(12) VALUE "101.10.01" --> 00000000002122285203
    2. PIC X(12) VALUE "101.10.10" --> 00000000002139062418
    Com um exemplo fica mais fácil testar !
    Ficheros adjuntos Ficheros adjuntos

    0 Not allowed!

  6. #6
      Senior
    Avatar de Joseg

    Registrado
    abril de 2015
    Mensajes
    285
    Última visita
    Ayer a las 17:41

    Agradecimientos
     
    Recibidos
    125
    Enviados
    73

    Citaciones y menciones
     
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    19
    Activista del Foro / Point Value: 0 Innovación / Point Value: 0

    Predeterminado

    Cita Iniciado por Joseg Ver Mensaje
    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.

    0 Not allowed!

  7. #7
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,087
    Última visita
    Hoy a las 00:34

    Agradecimientos
     
    Recibidos
    908
    Enviados
    784

    Citaciones y menciones
     
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    12 Post(s)
    Poder de Reputación
    10

    Predeterminado

    @Joseg,

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

    Edita y pega esto:

    COBOL Código:
    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:
    COBOL Código:
    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:
    COBOL Código:
    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  

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  8. #8
      Senior
    Avatar de Joseg

    Registrado
    abril de 2015
    Mensajes
    285
    Última visita
    Ayer a las 17:41

    Agradecimientos
     
    Recibidos
    125
    Enviados
    73

    Citaciones y menciones
     
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    19
    Activista del Foro / Point Value: 0 Innovación / Point Value: 0

    Predeterminado

    Cita Iniciado por Kuk Ver Mensaje
    @Joseg,

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

    Edita y pega esto:

    COBOL Código:
    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:
    COBOL Código:
    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:
    COBOL Código:
    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:
    COBOL Código:
    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.

    0 Not allowed!

  9. #9
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,087
    Última visita
    Hoy a las 00:34

    Agradecimientos
     
    Recibidos
    908
    Enviados
    784

    Citaciones y menciones
     
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    12 Post(s)
    Poder de Reputación
    10

    Predeterminado
    1 members found this post helpful.

    @Joseg, creo que lo he arreglado:

    COBOL Código:
    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

    Cita Iniciado por Mates Básicas
    Propiedad conmutativa de la suma: cambiar el orden de los sumandos no altera la suma

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  10. #10
      Senior
    Avatar de Joseg

    Registrado
    abril de 2015
    Mensajes
    285
    Última visita
    Ayer a las 17:41

    Agradecimientos
     
    Recibidos
    125
    Enviados
    73

    Citaciones y menciones
     
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    19
    Activista del Foro / Point Value: 0 Innovación / Point Value: 0

    Predeterminado

    Cita Iniciado por Kuk Ver Mensaje
    @Joseg, creo que lo he arreglado:

    COBOL Código:
    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

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

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

    Muitas muitas gracias Kuk

    0 Not allowed!

Información de Tema

Usuarios Viendo este Tema

Actualmente hay 1 usuarios viendo este tema. (0 miembros y 1 visitantes)

Temas Similares

  1. [Sintaxis] ADO-CONNECT-STRING
    Por Breew en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 0
    Último Mensaje: 24.04.2022, 12:23
  2. [Sintaxis] Convertir DECIMAL a NUMERO para COBOL
    Por Dasije en el foro WinDev
    Respuestas: 0
    Último Mensaje: 12.08.2019, 00:44
  3. [Sintaxis] Tipo de dato decimal en mysql...
    Por Fito en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 8
    Último Mensaje: 04.05.2018, 15:54
  4. [Herramienta] DECIMAL-POINT IS COMMA en Cobview
    Por Gatomalo en el foro COBOL - General
    Respuestas: 1
    Último Mensaje: 03.05.2018, 06:06
  5. [Sintaxis] Duda sobre STRING e INSPECT
    Por Anthony en el foro AcuCobol
    Respuestas: 2
    Último Mensaje: 09.04.2015, 21:18

Etiquetas para este Tema

Marcadores

Marcadores

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •