Arquivos binários
Tenho uma aplicação que usa arquivos de texto para buscar informações de configuração.
Estes arquivos estão em texto e gostaria de trabalhar com binários.
Só não sei como.
Se alguem puder informar um tutorial ou uma dica...
Valeu!
Estes arquivos estão em texto e gostaria de trabalhar com binários.
Só não sei como.
Se alguem puder informar um tutorial ou uma dica...
Valeu!
Koplin
Curtidas 0
Respostas
Beppe
06/10/2003
Que tipos de dados vc pensa em gravar?
GOSTEI 0
Koplin
06/10/2003
Texto simples - Na verdade eu uso arquivos de texto para salvar consultas SQL e algumas linhas de comando - um script. Mas quero no formato binário.
Fiz uma pesquisa e achei algumas dicas e vou analisar, mas sua colaboração será muito bem vinda.
Valeu sua atenção.
Fiz uma pesquisa e achei algumas dicas e vou analisar, mas sua colaboração será muito bem vinda.
Valeu sua atenção.
GOSTEI 0
Beppe
06/10/2003
Por quê a necessidade de binário? Para encriptar?
Os textos são de tamanho fixo? Quantos são?
Os textos são de tamanho fixo? Quantos são?
GOSTEI 0
Koplin
06/10/2003
Em verdade, sim e também para conhecer o uso dos binários. O texto resolve, mas se amanha eu precisar do binário, esta é uma boa chance de estudá-los.
Não os textos são de tamanhop variável. Mas posso dizer que nenhum arquivo terá mais do que 100k (formato texto)
Não os textos são de tamanhop variável. Mas posso dizer que nenhum arquivo terá mais do que 100k (formato texto)
GOSTEI 0
Beppe
06/10/2003
Tá usando TStream ou file of ...
GOSTEI 0
Koplin
06/10/2003
Não saquei...
Coloco as informações de texto em uma TStringList e salvo como .txt
Se a pergunta é sobre binários o que eu tenho e vou analizare usa AssignFile, read e reWrite.
Coloco as informações de texto em uma TStringList e salvo como .txt
Se a pergunta é sobre binários o que eu tenho e vou analizare usa AssignFile, read e reWrite.
GOSTEI 0
Beppe
06/10/2003
Para ler:
Para escrever:
Reset: abre para leitura
Rewrite: limpa e abre para escrita
var F: File of Char; S: String; begin AssignFile(F, ´data.dat´); try Reset(F); SetLength(S, FileSize(F)); Read(F, Pointer(S)^, Length(S)); finally CloseFile(F); end; end;
Para escrever:
var F: File of Char; S: String; begin AssignFile(F, ´data.dat´); try Rewrite(F); Write(F, Pointer(S)^, Length(S)); finally CloseFile(F); end; end;
Reset: abre para leitura
Rewrite: limpa e abre para escrita
GOSTEI 0
Koplin
06/10/2003
Nunca obtive uma resposta tão rápida.
Exato o que preciso.
Obrigado, Ataliba. Precisando...
Exato o que preciso.
Obrigado, Ataliba. Precisando...
GOSTEI 0
Flavio Sanches
06/10/2003
engraçado....
comigo num deu certo
retornou oseguinte erro:
[Error] Unit1.pas(49): Incompatible types: ´Char´ and ´procedure, untyped pointer or untyped parameter´[Error] Unit1.pas(49):
comigo num deu certo
retornou oseguinte erro:
[Error] Unit1.pas(49): Incompatible types: ´Char´ and ´procedure, untyped pointer or untyped parameter´[Error] Unit1.pas(49):
GOSTEI 0
Beppe
06/10/2003
o problema é em cima de qual linha?
GOSTEI 0
Ipc$
06/10/2003
BlockRead, BlockWrite
GOSTEI 0
Fórum Vini
06/10/2003
Beppe,
realmente o seu código tava dando um erro de sintaxe porque o arquivo era of Char.. eu fiz umas mudanças nele.. funcionou, mas não sei se está da forma como deveria ser:
T+,
Vinicius;
realmente o seu código tava dando um erro de sintaxe porque o arquivo era of Char.. eu fiz umas mudanças nele.. funcionou, mas não sei se está da forma como deveria ser:
var F: File; S: String; begin AssignFile(F, ´C:\data.dat´); try Rewrite(F, Length(S)); Write(F, Pointer(S)^); finally CloseFile(F); end; end;
T+,
Vinicius;
GOSTEI 0
Fórum Vini
06/10/2003
Beppe,
realmente o seu código tava dando um erro de sintaxe porque o arquivo era of Char.. eu fiz umas mudanças nele.. funcionou, mas não sei se está da forma como deveria ser:
T+,
Vinicius;
realmente o seu código tava dando um erro de sintaxe porque o arquivo era of Char.. eu fiz umas mudanças nele.. funcionou, mas não sei se está da forma como deveria ser:
var F: File; S: String; begin AssignFile(F, ´C:\data.dat´); try Rewrite(F, Length(S)); Write(F, Pointer(S)^); finally CloseFile(F); end; end;
T+,
Vinicius;
GOSTEI 0
Beppe
06/10/2003
Realmente Vini, tem um problema sim. isto pq Write escreve um componente(unidade) por vez. No caso de File of Char, o tamanho em bytes a ser escrito é SizeOf(Char) = 1.
Write toma uma lista de argumentos do tipo Char. Uma string poderia ser impressa com:
Write(F, S[1], S[2], S[3], S[4], S[5], ...)
Mas é mais útil a rotina
BlockWrite(F, Pointer(S)^, Length(S))
O mesmo acontece com Read e BlockRead. BlockRead/BlockWrite recebe como argumento a largura do buffer passado, em cada invocação. Diferente de Read/Write.
Um detalhe a ser cuidado é a diferença no tratamento de arquivos tipados(file of ...;) e não-tipados(file;). O tamanho do registo destes últimos é definido no tempo de abertura do arquivo com Reset/Rewrite, parâmetro RecSize.
Write toma uma lista de argumentos do tipo Char. Uma string poderia ser impressa com:
Write(F, S[1], S[2], S[3], S[4], S[5], ...)
Mas é mais útil a rotina
BlockWrite(F, Pointer(S)^, Length(S))
O mesmo acontece com Read e BlockRead. BlockRead/BlockWrite recebe como argumento a largura do buffer passado, em cada invocação. Diferente de Read/Write.
Um detalhe a ser cuidado é a diferença no tratamento de arquivos tipados(file of ...;) e não-tipados(file;). O tamanho do registo destes últimos é definido no tempo de abertura do arquivo com Reset/Rewrite, parâmetro RecSize.
GOSTEI 0