Iniciar Sesión

Ver la Versión Completa : [Sintaxis] Leer archivo .ini


Fito
1 de septiembre de 2017, 16:38
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?


Option Explicit

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
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

Public Function Leer_INI(Filename As String, Key_Value As String, Key_Name As String, Optional ByVal Default As String) As String

Dim Size As Integer
Dim Value As String

Value = Space(255)
Size = GetPrivateProfileString(Key_Value, Key_Name, "", Value, Len(Value), Filename)

If Size > 0 Then Leer_INI = Left$(Value, Size) Else Leer_INI = Default

End Function

Public Function Escribir_INI(Filename As String, Key_Value As String, Key_Name As String, Value As String) As Long

Dim Size As Integer

Size = WritePrivateProfileString(Key_Value, Key_Name, Value, Filename)

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

WORKING-STORAGE SECTION.
01 PARM1 PIC X(128).
01 PARM2 PIC X(128).
01 PARM3 PIC S9(9) COMP-5.
01 PARM4 PIC X(128).
01 PARM5 PIC S9(9) COMP-5.
PROCEDURE DIVISION.
MOVE "Comunica" to PARM1 *> Application name
MOVE "baud" to PARM2 *> Key Name
MOVE 2 TO PARM3 *> Default value
MOVE strIniFile to PARM4
CALL "GetPrivateProfileIntA" WITH STDCALL LINKAGE
USING BY REFERENCE PARM1
PARM2
BY VALUE PARM3
BY REFERENCE PARM4
RETURNING PARM5

EVALUATE PARM5
WHEN 1
MOVE "9600" TO "TEXT" OF CMTEXT2
WHEN 3
move "38400" TO "TEXT" OF CMTEXT2
WHEN OTHER
MOVE "19200" TO "TEXT" OF CMTEXT2
END-EVALUATE

MOVE "Comunica" to PARM1 *> Application name
MOVE "puerta" to PARM2 *> Key Name
MOVE 1 TO PARM3 *> Default value
MOVE strIniFile to PARM4
CALL "GetPrivateProfileIntA" WITH STDCALL LINKAGE
USING BY REFERENCE PARM1
PARM2
BY VALUE PARM3
BY REFERENCE PARM4
RETURNING PARM5

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
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:

WORKING-STORAGE SECTION.

01 INI-Seccion pic x(7) value "GENERAL".
01 INI-Clave pic x(7) value "EMPRESA".
01 INI-Default pic x(128) value "valor por defecto".
01 INI-Valor pic x(128) value spaces.
01 INI-Size pic s9(9) comp-5 value 128.
01 INI-Archivo pic x(128) value "d:pruebaconfig.ini" & X"00".


Así no:


01 Variables-INI.
02 INI-Seccion pic x(7) value "GENERAL".
02 INI-Clave pic x(7) value "EMPRESA".
02 INI-Default pic x(128) value "valor por defecto".
02 INI-Valor pic x(128) value spaces.
02 INI-Size pic s9(9) comp-5 value 128.
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 REFERENCE
Si vas a trabajar con el nivel 01 subdivido tenes pasar las variables por CONTENT

Ejemplo de Escritura con subdivisiones

WORKING-STORAGE SECTION.
01 FileName PIC X(24) VALUE "C:FSC5WORKFTP.INI" & X"00".
01 Variables-INI.
02 PARM1 PIC X(6). *> Application name
02 PARM2 PIC X(5). *> Key Name
02 PARM3 PIC X(128). *> Value Write
02 PARM4 PIC X(128). *> FileName INi.
02 PARM5 PIC S9(9) COMP-5.

PROCEDURE DIVISION.


MOVE "Config" TO PARM1 *> Application name
MOVE "Clave" TO PARM2 *> Key Name
MOVE "Fito 500 " & X"00" TO PARM3 *> Value Write
MOVE FileName TO PARM4 *> FileName INi
CALL "WritePrivateProfileStringA" WITH STDCALL LINKAGE
USING BY CONTENT PARM1
BY CONTENT PARM2
BY CONTENT PARM3
BY CONTENT PARM4
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