Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Sintaxis] Leer archivo .ini (https://www.cobolforo.es/showthread.php?t=715)

Fito 1 de septiembre de 2017 16:38

Leer archivo .ini
 
Hola Amigos:

Buscando información en la web encontré este código en visual basic para leer archivos ini por medio de winapi. Es posible traducirla a Cobol?

Código VB:
  1. Option Explicit
  2.  
  3. Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
  4. Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
  5.  
  6. Public Function Leer_INI(Filename As String, Key_Value As String, Key_Name As String, Optional ByVal Default As String) As String
  7.    
  8.     Dim Size As Integer
  9.     Dim Value As String
  10.  
  11.     Value = Space(255)
  12.     Size = GetPrivateProfileString(Key_Value, Key_Name, "", Value, Len(Value), Filename)
  13.  
  14.     If Size > 0 Then Leer_INI = Left$(Value, Size) Else Leer_INI = Default
  15.  
  16. End Function
  17.  
  18. Public Function Escribir_INI(Filename As String, Key_Value As String, Key_Name As String, Value As String) As Long
  19.    
  20.     Dim Size As Integer
  21.  
  22.     Size = WritePrivateProfileString(Key_Value, Key_Name, Value, Filename)
  23.  
  24. End Function

Saludos...

Fito...

Rapinto 1 de septiembre de 2017 19:09

Fito,

Não seria mais prático usar uma ComboBox?
Dizes qual o nome do ficheiro a ler nas propriedades "File" da ComboBox.
A ComboBox pode ficar como "visible" = false, para ninguém ver.

Load : carrega o ficheiro
Save : guarda o ficheiro.

Não é necessário abrir o ficheiro em Cobol.

Un saludo
Rui Pinto

fastpho 6 de septiembre de 2017 23:27

Estas lineas que mando lee un archivo . ini donde se lee los baudios y la puerta de comunicacion
Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01  PARM1      PIC X(128).
  3.  01  PARM2      PIC X(128).
  4.  01  PARM3      PIC S9(9) COMP-5.
  5.  01  PARM4      PIC X(128).
  6.  01  PARM5      PIC S9(9) COMP-5.
  7.  PROCEDURE       DIVISION.
  8.      MOVE   "Comunica"  to  PARM1       *> Application name
  9.      MOVE   "baud"          to  PARM2       *> Key Name
  10.      MOVE   2               TO  PARM3       *> Default value
  11.      MOVE   strIniFile      to  PARM4
  12.      CALL   "GetPrivateProfileIntA" WITH STDCALL LINKAGE
  13.             USING   BY REFERENCE    PARM1
  14.                                     PARM2
  15.                     BY VALUE        PARM3
  16.                     BY REFERENCE    PARM4
  17.                     RETURNING       PARM5
  18.                    
  19.      EVALUATE   PARM5
  20.             WHEN    1
  21.                     MOVE    "9600"  TO  "TEXT"  OF  CMTEXT2
  22.             WHEN    3
  23.                     move    "38400" TO  "TEXT"  OF  CMTEXT2
  24.             WHEN    OTHER
  25.                     MOVE    "19200" TO  "TEXT"  OF  CMTEXT2
  26.      END-EVALUATE
  27.  
  28.      MOVE   "Comunica"  to  PARM1       *> Application name
  29.      MOVE   "puerta"            to  PARM2       *> Key Name
  30.      MOVE   1               TO  PARM3       *> Default value
  31.      MOVE   strIniFile      to  PARM4
  32.      CALL   "GetPrivateProfileIntA" WITH STDCALL LINKAGE
  33.             USING   BY REFERENCE    PARM1
  34.                                     PARM2
  35.                     BY VALUE        PARM3
  36.                     BY REFERENCE    PARM4
  37.                     RETURNING       PARM5
  38.                    
  39.      MOVE   PARM5   TO      "TEXT"  OF  CMTEXT1.

Fito 5 de julio de 2023 21:22

Hola @fastpho,

Intenté hacer esto y no pude hacerlo andar :yoquese:

Saludos...

Fito...

fastpho 6 de julio de 2023 05:59

1 Archivos Adjunto(s)
Hola @Fito
Proba con este ejemplo es de lectura de enteros y de string de un archivo que se llama ftp.ini
Saludos...

Fito 10 de julio de 2023 04:45

Hola Amigos:

Te comento @fastpho, que yo estaba haciendo lo mismo que vos, pero con una pequeña diferencia.

Así funciona:
Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  
  3.  01  INI-Seccion            pic x(7)   value "GENERAL".
  4.  01  INI-Clave              pic x(7)   value "EMPRESA".
  5.  01  INI-Default            pic x(128) value "valor por defecto".
  6.  01  INI-Valor              pic x(128) value spaces.
  7.  01  INI-Size               pic s9(9) comp-5 value 128.
  8.  01  INI-Archivo            pic x(128) value "d:pruebaconfig.ini" & X"00".

Así no:

Código COBOL:
  1.  01  Variables-INI.
  2.      02  INI-Seccion            pic x(7)   value "GENERAL".
  3.      02  INI-Clave              pic x(7)   value "EMPRESA".
  4.      02  INI-Default            pic x(128) value "valor por defecto".
  5.      02  INI-Valor              pic x(128) value spaces.
  6.      02  INI-Size               pic s9(9) comp-5 value 128.
  7.      02  INI-Archivo            pic x(128) value "d:pruebaconfig.ini" & X"00".

Los campos tienen que ser nivel 01.

Cada vez entiendo menos de esto....

Saludos...

Fito...

fastpho 10 de julio de 2023 14:39

Hola @Fito , los campos se pueden trabajar con nivel 01 o 77 pasando las varialbles por
Código:

REFERENCE
Si vas a trabajar con el nivel 01 subdivido tenes pasar las variables por
Código:

CONTENT
Ejemplo de Escritura con subdivisiones
Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01 FileName        PIC X(24)   VALUE "C:FSC5WORKFTP.INI" & X"00".  
  3.  01 Variables-INI.
  4.     02  PARM1     PIC X(6).         *> Application name
  5.     02  PARM2     PIC X(5).         *> Key Name
  6.     02  PARM3     PIC X(128).       *> Value Write
  7.     02  PARM4     PIC X(128).       *> FileName INi.  
  8.     02  PARM5     PIC S9(9) COMP-5.
  9.  
  10.  PROCEDURE       DIVISION.
  11.      
  12.          
  13.      MOVE   "Config"            TO  PARM1       *> Application name
  14.      MOVE   "Clave"                 TO  PARM2       *> Key Name
  15.      MOVE   "Fito 500 " & X"00" TO  PARM3       *> Value Write
  16.      MOVE   FileName        TO  PARM4            *> FileName INi
  17.      CALL   "WritePrivateProfileStringA"    WITH STDCALL LINKAGE
  18.             USING   BY CONTENT  PARM1  
  19.                 BY CONTENT  PARM2  
  20.                 BY CONTENT  PARM3  
  21.             BY CONTENT  PARM4  
  22.                     RETURNING   PARM5.

Saludos...

Kuk 10 de julio de 2023 14:55

@fastpho, el nivel del campo no tiene nada que ver con CONTENT o REFERENCE, estos son el modo de pasar los parámetros:
  • CONTENT - es una copia del parámetro, de modo que si el llamado modifica algo, en el llamante no va a tener impacto/cambio
  • REFERENCE - es pasar el puntero, dándole acceso al llamado a la misma sección de memoria que ha reservado el llamante, de modo que el llamado puede modificar algo y el llamante lo verá también


La franja horaria es GMT +2. Ahora son las 07:31.

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