Page 1 of 1
Ayuda con archivos INI (Help With INI File)
Posted: Wed Jul 04, 2018 4:28 pm
by Mario Mansilla
Hola amigos :
necesito leer y escribir archivos INI sin seccion ejemplo :
Dato1=Empresa
Dato2=Domicilio
Dato3=Ciudad
No asi :
[Seccion]
Dato1=Empresa
Dato2=Domicilio
Dato3=Ciudad
Alguien tiene una rutina para realizar esto
Saludos
Mario Mansilla
**************************************************
Hello friends :
I need to read and write INI files without example section:
Dato1 = Company
Dato2 = Address
Dato3 = City
Not so:
[Section]
Dato1 = Company
Dato2 = Address
Dato3 = City
Someone has a routine to do this
regards
Mario Mansilla
Re: Ayuda con archivos INI (Help With INI File)
Posted: Wed Jul 04, 2018 10:45 pm
by andyglezl
Hola Mario
No se tu razón de hacerlo así, ya que la SECTION es lo que te facilita
extraer o grabar un cierto dato.
Pero quizá si no pones nada en SECTION te sirva . . .
--------------------------------------------------------------------------------------
Hello Mario
I do not know why you do it, because the SECTION is what makes you
extract or record a certain data.
But maybe if you do not put anything in SECTION it will help. . .
BEGIN INI FILE ( cFileIni )
SET cPath SECTION "" ENTRY "Path" DEFAULT ""
END INI
Re: Ayuda con archivos INI (Help With INI File)
Posted: Thu Jul 05, 2018 3:44 am
by Mario Mansilla
Hola Andy :
muchas gracias por tu repuesta .
Si probe esa alternativa y otras ( "" ," ",[],[ ]) pero no funciona , el archivo ini que necesito leer y escribir pertenece a LETODB y no posee SECTION y cuando en forma manual se la incorporo ,mi sistema lo lee y escribe a mi necesidad , pero LETODB no , por eso necesito que el formato del archivo no tenga SECTION .
Saludos
Mario Mansilla
Re: Ayuda con archivos INI (Help With INI File)
Posted: Thu Jul 05, 2018 9:19 am
by SALINETAS24
Hola, no entiendo lo que quieres hacer, supongo que será grabar un fichero en formato ASC o TXT.
Cuando yo necesitaba hacer algo así en clipper usaba FREAD, FOPEN, FWRITE., incluso llegue a tener una funcion de Backup.
Mira esto, igual te sirve. Un saludo.
https://harbour.edu.pl/clipper/es/ng54fb6.html
Re: Ayuda con archivos INI (Help With INI File)
Posted: Thu Jul 05, 2018 1:43 pm
by andyglezl
Tal vez...
Code: Select all
IF "LETODB"
BEGIN INI FILE ( cFileIni )
SET cPath SECTION "" ENTRY "Path" DEFAULT ""
.
.
END INI
cTempFile := HB_MemoRead( cFileIni )
cTempFile := STRTRAN( cTempFile, "[]", "" )
hb_MemoWrit( cFileIni, cTempFile )
ENDIF
Re: Ayuda con archivos INI (Help With INI File)
Posted: Thu Jul 05, 2018 2:07 pm
by serge_girard
I use this:
Code: Select all
PUBLIC cVAR := ''
IF FILE('select.ini')
BEGIN INI FILE ( 'select.ini')
GET cVAR SECTION "General" ENTRY "DNLPath"
END INI
ELSE
BEGIN INI FILE ( "select.ini")
SET SECTION "General" ENTRY "DNLPath" TO cVAR
END INI
ENDIF
Serge
Re: Ayuda con archivos INI (Help With INI File)
Posted: Thu Jul 05, 2018 3:31 pm
by Mario Mansilla
Hola Amigos :
el problema es que el archivo LETODB.INI que lee LETODB.EXE tiene formato sin SECTION , por lo cual el formato del archivo debe ser :
DataPath=c:\LetoDb
Si coloco SECTION por ejemplo :
[General]
DataPath=c:\LetoDb
Mi sistema puede leer y escribir en el archivo INI con las rutinas que usamos en HMG que propone Serge_Girard , pero LETODB directamente no lee el valor almacenado en DATAPATH , devuelve un strig vacio .
Saludos
Mario Mansilla
Hello friends :
the problem is that the LETODB.INI file that reads LETODB.EXE has a format without SECTION, so the format of the file must be:
DataPath = c: \ LetoDb
If I put SECTION for example:
[General]
DataPath = c: \ LetoDb
My system can read and write in the INI file with the routines that we use in HMG that Serge_Girard proposes, but LETODB does not directly read the value stored in DATAPATH, it returns an empty strig.
regards
Mario Mansilla
Re: Ayuda con archivos INI (Help With INI File)
Posted: Thu Jul 05, 2018 4:35 pm
by serge_girard
Mario,
I cannot help on this because I don't use LEToDB, perhaps Marek or Harbour Users in google-group?
Serge
Re: Ayuda con archivos INI (Help With INI File)
Posted: Fri Jul 06, 2018 6:18 am
by mol
In my previous Clipper project, I've used such a construction of reading INI file.
It works quite good. I've prepared working sample, where whole ini file is placed into association table.
You can modify it as you want.
Code: Select all
#include "hmg.ch"
function MAIN
msgdebug(ReadIniFile("letodb.ini"))
return
*---------------------
function ReadIniFile
param cIniFile
local nError, Row, nRowCount
local ahIniFile := { => }
private FToken := { 0, 0, "", 0, 0, .F. }, cFtokBuffer := ""
nError := FTokenInit(cIniFile, chr(13)+chr(10)+chr(26),2)
if nError < 0
return .f.
endif
do while .not. FTokenEnd()
cRow = alltrim(FTokenNext())
if (left(cRow,1) $ ";#/")
// comment line
loop
endif
if ( nPos := at("=",cRow) ) = 0
* incorrect line without equal charater '='
loop
endif
cVariable := alltrim(upper(left(cRow,nPos-1)))
xParameter := ltrim(substr(cRow,nPos+1))
if len(cVariable) == 0
loop
endif
ahIniFile[ cVariable ] := xParameter
enddo
FTokenClose() // for assurance
return ahIniFile
*----------------------------------*
FUNCTION fTokenInit(cFile, cSep, nSkip)
LOCAL nRetVal := 0
FToken[1] := FOPEN(cFile)
IF FToken[1] < 0
nRetVal := -FERROR()
ELSE
FToken[2] := FSEEK(FToken[1], 0, 2)
FToken[3] := cSep
FToken[4] := nSkip
FToken[5] := MIN(MIN(10000, MEMORY(1)*1024), FToken[2])
FToken[6] := .F.
cFtokBuffer := REPLICATE(CHR(0), FToken[5])
FSEEK(FToken[1], 0, 0)
FREAD(FToken[1], @cFtokBuffer, FToken[5])
TOKENINIT(@cFtokBuffer, FToken[3], nSkip)
ENDIF
RETURN(nRetVal)
*--------------------------------
FUNCTION fTokenNext()
LOCAL cToken, nFilePos, nStill2Read
cToken = TOKENNEXT(cFtokBuffer)
IF LEN(cToken) >= FToken[5]
* Token and buffer have the same size, a token is not
* recognizable. The buffer has to be enhanced or it has
* been tried to read text from a binary file.
*
cToken = ""
fTokenClose()
ELSE
IF TOKENEND()
* Last token for the current buffer. If the file contains
* further data, this last token has to be 'illegal' and
* read again with further data.
IF FSEEK(FToken[1], 0, 1) < FToken[2]
* new loading of the buffer
*
* If the file has not reached EOF, the last token of the
* buffer will be ignored, because it is not sure if the
* token is complete. The file pointer will be moved back to
* the beginning of the token and a new buffer will be
* loaded.
*
nFilePos := FSEEK(FToken[1], -((FToken[5] -TOKENAT()) +1) , 1)
nStill2Read := FToken[2] -nFilePos
* creating a new, smaller buffer
*
IF nStill2Read < FToken[5]
FToken[5] := nStill2Read
cFtokBuffer := REPLICATE(CHR(0), FToken[5])
ENDIF
* read the following data into the buffer
*
FREAD(FToken[1], @cFtokBuffer, FToken[5])
TOKENINIT(@cFtokBuffer, FToken[3], FToken[4])
cToken := TOKENNEXT(cFtokBuffer)
ELSE
fTokenClose()
ENDIF
ENDIF
ENDIF
RETURN(cToken)
//* displays if further tokens are existing *//
FUNCTION fTokenEnd()
RETURN(FToken[6])
//* closes the file *//
FUNCTION fTokenClose()
FCLOSE(FToken[1])
cFtokBuffer := ""
FToken := { 0, 0, "", 0, 0, .T. }
RETURN(Nil)
Re: Ayuda con archivos INI (Help With INI File)
Posted: Fri Jul 06, 2018 12:49 pm
by Mario Mansilla
Hola Amigos :
muchas gracias por su ayuda , pude solucionar el inconveniente en particular con el archivo ini de LetoDb investigando en harbour users colocando como SECTION [Main] y "letodb.ini" solo con minusculas . De esta manera podemos trabajar con las rutinas de HMG sin problemas y Letodb puede leer sin problemas el archivo .
Saludos cordiales
Mario Mansilla
Hello friends :
Thank you very much for your help, I was able to solve the problem in particular with the LetoDb ini file investigating in harbor users placing as SECTION [Main] and "letodb.ini" only with lowercase. In this way we can work with the HMG routines without problems and Letodb can read the file without problems.
Best regards
Mario Mansilla