Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 250520
            [titulo] => TFileStream (Arquivo TXT)
            [dataCadastro] => DateTime Object
                (
                    [date] => 2004-09-15 00:00:00
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 235914
            [status] => A
            [isExample] => 
            [NomeUsuario] => Aroldo Zanela
            [Login] => forum.Aroldo Zanela
            [Apelido] => 
            [Foto] => 
            [Conteudo] => Colega,

Falta criar o objeto TFileStream. Acredito também que você deveria substituir por TStringList, pois é mais apropriado para o que você está se propondo.

No seu caso, a ordem correta é:

[code:1:5d7471670d]var Arquivo: TFileStream;
Registro: String;
begin
Registro := ´´;

Arquivo := TFileStream.Create(´C:\TEMP\ARQUIVO.TXT´, fmCreate);

Arquivo.Write(registro[1&93;, 402);

Arquivo.Free;[/code:1:5d7471670d]


) )

TFileStream (Arquivo TXT)

Diegus
   - 15 set 2004

Bom dia...

Gostaría de saber como que eu faço pra gravar um arquivo txt nesse FileStream...

Vejam o q fiz quando mando gerar um arquivo....


#Código

procedure TfCb042.tbImprimiClick(Sender: TObject);
var Arquivo : TFileStream;
registro,
temp,
sAux, //variavel temporaria para CPF ou CGC
temp1: string; //variável temporária
Soma : Real;
cont,max: integer; //contador de linhas
flag : boolean; //True = CGC;
//False = CPF;
sData : String;
ValidaArquivo : Boolean;
nCounter, banco : Integer;
Dia, Mes, Ano : Word;
Dtvenc: TDateTime;

teste : String;
begin
// inherited;

try
if MessageDlg(´Deseja gerar o arquivo de Boleta Registrada agora?´,
mtConfirmation, [mbNo, mbYes], 0) = mrNo then
Exit
else
begin
gArquivo.Progress := 0;
cont := 1;
Soma := 0;
ValidaArquivo := True;

with qArquivo Do
begin
Close;
Sql.Clear;
Sql.add (´SELECT TOP ´+QuantGerar.text+´ * ´);
Sql.add (´FROM CBCSERCO LEFT JOIN (CBYCONTA RIGHT JOIN CBBCONTR ON CBYCONTA.CBYIDENT = CBBCONTR.CBYIDENT) ON CBCSERCO.CBBIDENT = CBBCONTR.CBBIDENT´);
// Sql.Add (´CBYCONTA right join CBBCONTR on (CBBCONTR.CBYIDENT = CBYCONTA.CBYINDET) ´);
Sql.Add (´Where (CBBGERAD = False) and (CBBMESCO = ´+#39+CB_Mes.Text+39+´) ´);
Open;
if qArquivo.RecordCount = 0 then
begin
ShowMessage(´Não existe nenhuma boleta gerada para envio.´);
exit;
end else
begin
showmessage (´há dados!´);// dsFinanceiro.DataSet.Insert;


end;

DateTimeToString(sData,´ddmmyy´,Now);

banco := 21;

if banco = 21 then
begin
qArquivo.First;

gArquivo.MinValue := 0;
gArquivo.MaxValue := qArquivo.RecordCount;

while not qArquivo.Eof do
begin
inc(cont);
registro := ´´;
temp := ´´;
temp1:= ´´;
Soma := Soma + qValorCBDVLSER.asFloat;
registro := registro + ´1´;
registro := registro + ´02´;
if not fCb001.ValidaCGC(´27400100000161´) then
begin
raise ERangeError.CreateFmt(´Favor verificar o CNPJ do Cristo Rei.´, []);
end;
registro := registro + ´27400100000161´;

registro := registro + ´00001828078´+ StringOfChar(´ ´, 9);
sAux := IntToStr(dsFinanceiro.DataSet.fieldByName(´CBHIDENT´).AsInteger + 2000);
sAux := StringofChar (´0´, 8 - length(sAux))+ sAux;
registro := registro + Calcula_Nosso_Numero(sAux) + StringOfChar(´ ´, 10) + StringOfChar(´ ´, 6) + StringOfChar(´0´, 2) + StringOfChar(´0´, 2);
registro := registro + StringOfChar(´ ´, 15);
registro := registro + ´1´;
registro := registro + ´76´;
registro := registro + inttostr(dsFinanceiro.DataSet.fieldByName(´CBHIDENT´).AsInteger);
registro := registro + DateToStr (dsFinanceiro.DataSet.fieldByName(´CBHDTVEN´).AsDateTime);
registro := registro + FloatToStr (dsFinanceiro.DataSet.fieldByName(´CBHVALOR´).asFloat);
registro := registro + Mensagem.text;
registro := registro + StringOfChar(´0´, 6 - Length(inttostr(cont)))+inttostr(cont);
registro := registro + #1310;
[b]Arquivo.Write (registro[1], 402); [/b]//ERRO AQUI... Está dando ACCESS VIOLATION

gArquivo.progress := qArquivo.recno;
qArquivo.Next;

end; //final do while

end;
end;
end;
Except
ValidaArquivo := False;
Arquivo.Free;
end;

if ValidaArquivo then
begin
with fcb001.qConsulta do
begin
Close;
SQL.Clear;
SQL.Add(´UPDATE CBHFINAN SET CBHQTHAC = :Valor, ´);
SQL.Add(´ CBHBOLEN = True ´);
SQL.Add(´ WHERE CBHCONCI = FALSE ´);
SQL.Add(´ AND CBYIDENT = :Conta ´);
SQL.Add(´ AND CBHBOLEN = False ´);
SQL.Add(´ AND CBHINBRG = True ´);
SQL.Add(´ AND CBHDTVEN BETWEEN :Dtatual AND :Dtvencimento ´);
SQL.Add(´ AND CBHQTHAC = 0 ´);

fcb001.qConsulta.Parameters.ParamByName(´Valor´).Value := max;
fcb001.qConsulta.Parameters.ParamByName(´Conta´).Value := fCb001.qContaCBYIDENT.AsInteger;
fcb001.qConsulta.Parameters.ParamByName(´Dtvencimento´).value := DateTimeToStr(Dtvenc);
fcb001.qConsulta.Parameters.ParamByName(´Dtatual´).value := DateTimeToStr(Now);
fcb001.qConsulta.ExecSQL;
fcb001.qConsulta.Filtered := False;
ShowMessage(´O arquivo foi gerado com sucesso. Favor enviar ao banco.´);
SaveDialog.FileName := ´Cristo Rei´+ sData + ´.txt´;
if SaveDialog.Execute then
Arquivo := TFileStream.Create(ExpandFileName(SaveDialog.FileName), fmCreate)
else
exit;

Arquivo.Free;
end;
end
else
begin
ShowMessage(´ATENÇÃO: Por algum motivo o arquivo não pode ser gravado. Favor informar aos responsáveis pelo sistema.´);
end;
end;



Se alguém puder me ajudar.... desde já agradeço...


Post mais votado

Aroldo Zanela
   - 15 set 2004

Colega,

Falta criar o objeto TFileStream. Acredito também que você deveria substituir por TStringList, pois é mais apropriado para o que você está se propondo.

No seu caso, a ordem correta é:

#Código

:1:5d7471670d]var  Arquivo: TFileStream;
Registro: String;
begin
Registro := ´´;

Arquivo := TFileStream.Create(´C:\TEMP\ARQUIVO.TXT´, fmCreate);

Arquivo.Write(registro[1&93;, 402);

Arquivo.Free;
:1:5d7471670d]


Marcelo Saviski
   - 15 set 2004

Declare a variável registro como registro: string[402]
talvez funcione


Martins
   - 15 set 2004

Valeu, estava precisando de algo parecido....