Como gravar um TstringList em arquivo .ini

Delphi

16/01/2014

Olá bom dia!
Desejaria saber como gravar e ler uma variável tipo StringList em um arquivo .INI ?

100+

ANT.CARLOS/SP
Antonio Jesus

Antonio Jesus

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

16/01/2014

Basta usar o método SaveToFile da StringList. Exemplo:
minhaTStringList.SaveToFile('arquivo.ini');
GOSTEI 0
Antonio Jesus

Antonio Jesus

16/01/2014

Olá boa noite e obrigado pela atenção.
Mas não foi isto q eu quis dizer.

Ex:
Tenho uma var cc : TString;
nome : String.
numero : Integer;
IniFile : String;
Ini : TIniFile;
StreamMemo : TMemoryStream;

Begin

cc:=TstringList.Create;
cc.add('aaaaaaaaaaaaaa');
cc.add('bbbbbbbbbbbbbb');
cc.add('cccccccccccccccc');


Ini.WriteString( 'Email','Nome' ,nome);
Ini.WriteInteger( 'Email','Numero' ,numero);

StreamMemo := TMemoryStream.Create;
mmEmailMsg.Lines.SaveToStream(StreamMemo);
StreamMemo.Seek(0,soFromBeginning);
Ini.WriteBinaryStream( 'Email','Mensagem',StreamMemo); //gravando um campo memo

Então como gravaria o cc, q é um StringList ?
E como faria sua leitura ?

A quem puder ajudar, desde já meus agradecimento.

100+

ANT.CARLOS/SP
















GOSTEI 0
Marco Salles

Marco Salles

16/01/2014

Isto se consegue com as propriedades


Para Gravar
Values

Para ler
Names ****** ReadOnly
ValueFromIndex *** ReadOnly

Para Separar

NameValueSeparator // Padrão é o Sinal de Igual .. Pode ser alterado



Estude os códigos :

procedure TForm4.Button1Click(Sender: TObject);
var
sl:Tstrings;
begin
  sl:=TStringList.Create;
  try
  Sl.Values['Email']:='Um email';
  Sl.Values['Cidade']:='Uma Cidade';
  Sl.SaveToFile('Teste.ini');
  finally
    sl.Free;
  end;


  sl:=TStringList.Create;
  try
  Sl.LoadFromFile('Teste.ini');
  Showmessage(Sl.Names[0]+Sl.NameValueSeparator+Sl.ValueFromIndex[0]+sLineBreak+
              Sl.Names[1]+Sl.NameValueSeparator+Sl.ValueFromIndex[1]);

 Memo1.Lines.LoadFromFile('teste.ini');
  finally
    sl.Free;
  end;
end;


[]sds
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/01/2014

Cara, vá desculpando. Eu juro que li você perguntar como salvar uma TStringList em arquivo, por isso sugeri o SaveToFile. Só agora li direitinho e vi o que você realmente precisa.
GOSTEI 0
Marco Salles

Marco Salles

16/01/2014

Isto se consegue com as propriedades


Para Gravar ou Para Ler Tb *** Desculpe esqueci de mencionar isto no meu Post anterior
Values

Para ler
Names ****** ReadOnly
ValueFromIndex *** ReadOnly

Para Separar

NameValueSeparator // Padrão é o Sinal de Igual .. Pode ser alterado



Estude os códigos :

procedure TForm4.Button1Click(Sender: TObject);
var
sl:Tstrings;
begin
  sl:=TStringList.Create;
  try
  Sl.Values['Email']:='Um email';
  Sl.Values['Cidade']:='Uma Cidade';
  Sl.SaveToFile('Teste.ini');
  finally
    sl.Free;
  end;


  sl:=TStringList.Create;
  try
  Sl.LoadFromFile('Teste.ini');
  Showmessage(Sl.Names[0]+Sl.NameValueSeparator+Sl.ValueFromIndex[0]+sLineBreak+
              Sl.Names[1]+Sl.NameValueSeparator+Sl.ValueFromIndex[1]);

//utilizando o Values para Ler
  Showmessage(Sl.Names[0]+Sl.NameValueSeparator+Sl.Values['Email']+sLineBreak+
              Sl.Names[1]+Sl.NameValueSeparator+Sl.Values['Cidade']);;



 Memo1.Lines.LoadFromFile('teste.ini');
  finally
    sl.Free;
  end;
end;


[]sds
GOSTEI 0
Antonio Jesus

Antonio Jesus

16/01/2014

Obrigado pela atenção + uma vez.
Bom eu já sei manipular arquivos .INI, só não sei manipular um StringList.

Ex:
Tenho uma var cc : TString;
nome : String.
numero : Integer;
IniFile : String;
Ini : TIniFile;
StreamMemo : TMemoryStream;

Begin

cc:=TstringList.Create;
cc.add('aaaaaaaaaaaaaa');
cc.add('bbbbbbbbbbbbbb');
cc.add('cccccccccccccccc');


Ini.WriteString( 'Email','Nome' ,nome);
Ini.WriteInteger( 'Email','Numero' ,numero);

StreamMemo := TMemoryStream.Create;
mmEmailMsg.Lines.SaveToStream(StreamMemo);
StreamMemo.Seek(0,soFromBeginning);
Ini.WriteBinaryStream( 'Email','Mensagem',StreamMemo); //gravando um campo memo



Eu consigo gravar e ler arquivos .ini e vi que para campos MEMO tenho um tratamento diferenciado para gravar, String/Integer/Booleam ok.

Me refiro ao campo tipo StringList (no caso cc), qual o procedimento para gravar e ler no arquivo .INI ?


100+

ANT.CARLOS/SP

GOSTEI 0
Marco Salles

Marco Salles

16/01/2014

Hummmm

Eu não testei , mas acredito que deva ser como se fosse um STRING com a Propriedade TXT da classe TStringList

cc.text

SuaStringList.TEXT


ps) não testei

[]sds
GOSTEI 0
Alan Souza

Alan Souza

16/01/2014

A propriedade Lines do Memo e a StringList são ambas derivadas de TStrings, e os métodos de leitura e gravação por Stream são iguais:

StreamStringList := TMemoryStream.Create;
cc.SaveToStream(StreamStringList);
StreamStringList.Seek(0,soFromBeginning);
Ini.WriteBinaryStream( 'Email','StringList',StreamStringList);
GOSTEI 0
Marco Salles

Marco Salles

16/01/2014

A propriedade Lines do Memo e a StringList são ambas derivadas de TStrings, e os métodos de leitura e gravação por Stream são iguais:

StreamStringList := TMemoryStream.Create;
cc.SaveToStream(StreamStringList);
StreamStringList.Seek(0,soFromBeginning);
Ini.WriteBinaryStream( 'Email','StringList',StreamStringList);


Acho que vc entendeu realmente a necessidade do amigo ...

[]sds
GOSTEI 0
POSTAR