Jump to content
kidslax

Gravando texto em arquivo .ini

Recommended Posts

Eae galera eu tô fazendo um programa e achei uma certa dificuldade em salvar/deletar em um arquivo .ini o conteúdo de um campo edit.

 

OBS: Edit é aquele campo parecido com InputBox, só que ele permite digitar várias linhas.

 

Eu quero ler o conteúdo digitado nesse campo Edit e salvar em um arquivo .ini.

 

Até ai eu sei fazer, se o usuário digitar um texto com várias linhas ele grava no arquivo .ini, porém o problema é que quando eu vou sobrescrever o conteúdo que eu digitei, o programa só sobescreve a primeira linha.

 

Eu quero fazer com que todas as linhas sejam sobescritas no arquivo.ini.

 

Esse é um fragmento das informações cruciais para vocês entenderem e

poderem me ajudar:

 

[autoit]$Edit1 = GUICtrlCreateEdit("", 8, 24, 313, 217)

$conteudo = GUICtrlRead($Edit1)

IniWrite("data\config.ini", "HOTKEYS", "F1", $conteudo)

; OBS: Vamos supor que o usuário digitou no Edit um texto

; com varias linhas.

; Até aqui o programa grava tudo certinho no arquivo .ini.

; Agora eu vou sobescrever o conteúdo digitado:

IniWrite("data\config.ini", "HOTKEYS", "F1", "")

; Ai é que tá o problema!

; O programa só sobescreve a primeira linha do texto.

[/autoit]

 

E esse é o arquivo config.ini:

 

 

 

[HOTKEYS]
F1=Texto digitado no Edit aqui
segunda linha
terceira
quando eu peço pro programa sobescrever
esse texto inteiro ele só apaga a 1ª linha.
F2=
F3=
F4=
F5=

 

 

 

A questão é: Como sobescrever todas as linhas?

 

Espero que vocês entendam, tentei ser o mais claro possível, desde já agradeço.

Share this post


Link to post
Share on other sites

@kidslax, vou postar esse exemplo como uma possível alternativa. até nós encontrar uma maneira melhor :blush:

 

$conteudo = "testando varias linhas "&@CRLF&" teste" ; conteúdo com varias linhas

IniWrite(@DesktopDir&"\myfile.ini", "HOTKEYS", "F1", StringRegExpReplace ( $conteudo, @CRLF, "#linha#"));substituimos a macro @crlf por um codigo exemplo:#linha#

$sRead = StringRegExpReplace (IniRead (@DesktopDir&"\myfile.ini", "HOTKEYS", "F1", "" ) , "#linha#",@CRLF ); quando for ler novamente sustituimos o codigo #linha#, pela macro @crlf

MsgBox(0,"",$sRead)

IniWrite(@DesktopDir&"\myfile.ini", "HOTKEYS", "F1", "")

  • Like 1

Share this post


Link to post
Share on other sites

É isso mesmo, uso uma forma semelhante à essa que você postou @Joelson0007, perfeito!

 

Eu uso no NetSend para salvar o texto que o usuário digita para compartilhar...

 

Abraços,

 

João Carlos.

Share this post


Link to post
Share on other sites

Joelson, eu testei o seu código e ele resolveu meu problema, só que eu percebi que é mais fácil (no meu caso), gravar os textos em arquivos .txt do que em .ini, e pra isso eu usei o FileWrite.

Agora eu vou usar seu código e implementar ele pra funcionar com os arquivos .txt !

 

Muito obrigado Joelson e Jscript, problema resolvido!

Share this post


Link to post
Share on other sites

@joelson0007 e @JScript

 

Me desculpem se eu estiver falando besteira, só q não consegui entender do pq dessa solução q vcs usam :wacko: , gostaria de esclarecer minhas ideias, pois ao meu ver seria + facil em vez de sobreescrever, usar o IniDelete para excluir a section e antes de reescreve-la.

 

exemplo:

 

$conteudo = "testando varias linhas: "&@CRLF&" linha" &@CRLF&" linha"&@CRLF&" linha"; conteúdo com varias linhas
$conteudo2 = "testando varias linhas: "&@CRLF&" linha1" &@CRLF&" linha2"&@CRLF&" linha3"; conteúdo com varias linhas alterado

IniWrite(@DesktopDir&"\myfile2.ini", "section2", "key", $conteudo)
IniDelete(@DesktopDir&"\myfile2.ini", "section2")
IniWrite(@DesktopDir&"\myfile2.ini", "section2", "key", $conteudo2)

 

Grato pela atenção.

Share this post


Link to post
Share on other sites

Joelson, eu testei o seu código e ele resolveu meu problema, só que eu percebi que é mais fácil (no meu caso), gravar os textos em arquivos .txt do que em .ini, e pra isso eu usei o FileWrite.

Agora eu vou usar seu código e implementar ele pra funcionar com os arquivos .txt !

 

Muito obrigado Joelson e Jscript, problema resolvido!

Wow!!! Que é isso!!! Os arquivos .ini são mil vezes mais fácil de manipular do que simples arquivos .txt usando FileWrite()...

 

Faça isso não, seu código ficará enorme e lento por conta disso, confira nesse link como eu convenci o @Belini a usar o padrão de arquivos .ini:

http://autoitbrasil.com/index.php?/topic/678-renomear-linhas-de-um-arquivo-ini-resolvido/page__view__findpost__p__4078

 

Aqui está um resumo onde você poderá avaliar melhor qual código é mais eficiente (Ambos fazem a mesma função):


Funções Ini*()

$sXXX = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
$aData = IniReadSection($sIni, "MusicList") ; Read in what we just wrote above.
For $i = 1 To $aData[0][0]
If Not StringInStr($aData[$i][1], $sXXX, 2, 1) Then
    IniWrite($sIni, "MusicList", $aData[$i][0], $sXXX)
    ExitLoop
EndIf
Next

Funções File*()

While 1
$conta_linha += 1
$linha = FileReadLine($le_espera)
If StringLen($linha) = 0 Then ExitLoop
$comp_espera = StringInStr($linha, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 2, 1)
If $comp_espera <> 1 Then
    _FileWriteToLine(@ScriptDir & "\Espera.ini", $conta_linha, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 1)
    ExitLoop
EndIf
Sleep(1)
WEnd
FileClose($le_espera)


Abraços,

 

João Carlos.

  • Like 1

Share this post


Link to post
Share on other sites

@V!c†o® Assim funciona também , porém acessa o disco 3 vezes, na outra opção o acesso ao disco é reduzido, pois acessa duas vezes para mesma função. além do ini ficar mais organizadinho

IniWrite(@DesktopDir&"\myfile.ini", "HOTKEYS", "F1", StringRegExpReplace ( $conteudo, @CRLF, "#linha#"));substituimos a macro @crlf por um codigo exemplo:#linha#
IniWrite(@DesktopDir&"\myfile.ini", "HOTKEYS", "F1", "")

mas o seu exemplo funciona bem também.

Share this post


Link to post
Share on other sites

Jscript

 

É...realmente o que você nos mostrou é verdade.

 

Agora eu sei que .ini são mais fáceis de manipular, porém pra gravar o conteúdo do Edit os arquivos .txt ficaram mais organizados, ainda assim vou tentar encaixar o arquivo ini por causa da sua eficiência.

 

Eu ainda vou usar o arquivo.ini pra guardar informações do programa que o usuário digitou pra quando o programa for aberto novamente, as informações estejam lá.

 

Obrigado pela dica.

Share this post


Link to post
Share on other sites

@joelson0007

 

Uhm... Entendi! Não tinha pensando nisso. Vlw pelo esclarecimento :D

 

 

@JScript

Vc tb me convenceu... vou largar o FileWrite() e usar funçoes .ini rs

A proposito, uso bastante o FileWriteLog() p controlar a acesso e execução de funções nos meus progs. Vc teria alguma sugestão p eu fazer isso usando funções ini?

 

Pensei em usar o _Date_Time_EncodeFileTime para registrar na ini a data/hora mas ainda não testei.

Share this post


Link to post
Share on other sites

Pra evitar a manobra sugerida pelo @Joelson0007 e que eu também fazia uso, pode criptografar as frases que elas se tornarão uma única linha!!!

Simples assim:

_StringEncrypt()

Abraços,

 

João Carlos.

Share this post


Link to post
Share on other sites

V!c†o®

 

É uma boa opção também, só testando mesmo e dependendo do que vai ser gravado...

 

Abraços,

 

João Carlos.

Share this post


Link to post
Share on other sites

Esse topico veio em boa hora rsrsrn, so que me deu uma duvida tipo teria como eu bloquear um arquivo .ini,

asssim eu pretendo salvar nele usuario e senha so que o usuario mais experiente teria acesso a essas informações né.

Teria como protejer pelo menos a senha?

Share this post


Link to post
Share on other sites

Nossa muitissimo obrigado!

irei estudar ele mas pelo que eu pude notar nem precisarei fazer grandes mudanças

vlw msm :ILAP: :ILA2:*-*

Share this post


Link to post
Share on other sites

queria fazer um script com uma imputbox para colocar uma senha e que na mesma janela mostre o serial do hd será que é possivel?

Edited by amaral

Share this post


Link to post
Share on other sites

queria fazer um script com uma imputbox para colocar uma senha e que na mesma janela mostre o serial do hd será que é possivel?

Olá amigo!

 

Percebi que sua dúvida não se encaixa muito bem no tópico, correto?

Quando abrir seu próprio tópico eu apagarei essas mensagens...

 

JS

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×