LucAlucard Postado Novembro 12, 2010 Denunciar Share Postado Novembro 12, 2010 (editado) Olá família ScriptBrasil. Hoje venho mais uma vez até vocês para pedir ajuda... (rsrs)Gostaria de saber se vocês sabem como juntar vários arquivos .Dat em um único arquivo em memória. Por exemplo:begin whitecomponentresfile('Dat1.dat'+'Dat2.dat'+'Dat3.Dat', ComponenteQualquer); end;muito obrigado pela ajuda, qualquer dúvida por favor entrem em contato, ou respondam esse fórum q responderei assim q possível. Editado Novembro 12, 2010 por LucAlucard Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Novembro 12, 2010 Denunciar Share Postado Novembro 12, 2010 o arquivo .Dat é um texto ?se for .. use:var f:TextFile; Linha:String; begin AssignFile(f, 'Caminho do Arquivo.Dat'); Reset(f); While not Eof(f) do Readln(f, Linha); CloseFile(f); end;faça isso para arquivo ... que podera ser jogado tudo em um memo e depois salvoou pode abrir o primeiro deles como escrita e ir lendo os outros e jogando os dados no primeiroabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Novembro 17, 2010 Autor Denunciar Share Postado Novembro 17, 2010 o arquivo .Dat é um texto ?Como assim? "o arquivo dat é um arquivo Texto?" Não entendi.. o arquivo dat q eu uso é usado pra armazenar alguns arquivos.. no meu caso seria para armazenar imagens... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Novembro 17, 2010 Denunciar Share Postado Novembro 17, 2010 me referi ao conteudo do arquivo .... se texto , binario , etcpara saber o conteudo basta abri-lo no bloco de notas Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Novembro 18, 2010 Autor Denunciar Share Postado Novembro 18, 2010 hummmm.... olha.. ele abriu com o notepad++ vários caracteres estranhos.. mais ou menos assim oh :lotado de null e coisas do tipo.. Infelizmente eu não sei que tipo de arquivo é esse =/.. desculpa a minha ignorância... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Novembro 18, 2010 Denunciar Share Postado Novembro 18, 2010 OK ... este não é um arquivo texto e sim de dadosfaça o seguinte teste:unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; File1, File2 : string; implementation {$R *.DFM} procedure MyCopyFile(FromName, ToName: string); var FromF, ToF : file; NumRead, NumWritten : Integer; Buf: array[1..2048] of Char; begin Reset(FromF,1); AssignFile(ToF, Form1.SaveDialog1.Filename); Rewrite(ToF,1); repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or ( NumWritten <> NumRead); CloseFile(FromF); CloseFile(ToF); end; procedure TForm1.Button1Click(Sender: TObject); begin // abrir arquivo1 if OpenDialog1.Execute then File1 := OpenDialog1.FileName; // abrir arquivo2 if OpenDialog1.Execute then File2 := OpenDialog1.FileName; // copiar arquivo1 para arquivo2 MyCopyFile(File2, File1); end; end.Se o conteudo for texto , vai dar erro ... se for dados deve funcionar OBS: a concatenação desse tipo de arquivo pode não funcionar do jeito que voce está querendo ou pode não funcionar mais ... cuidadoabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Novembro 18, 2010 Autor Denunciar Share Postado Novembro 18, 2010 OBS: a concatenação desse tipo de arquivo pode não funcionar do jeito que voce está querendo ou pode não funcionar mais ... cuidadoabraçoOK muito obrigado Jhonas, vou fazer um teste em um arquivo teste. Se funcionar ótímo! ^^Já q eu posto aqui o resultado dos testes.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Novembro 18, 2010 Autor Denunciar Share Postado Novembro 18, 2010 (editado) OK ... este não é um arquivo texto e sim de dadosfaça o seguinte teste:unit Unit1; procedure MyCopyFile(FromName, ToName: string); var FromF, ToF : file; NumRead, NumWritten : Integer; Buf: array[1..2048] of Char; begin [color="#ff0000"] Reset(FromF,1);[/color] AssignFile(ToF, Form1.SaveDialog1.Filename); Rewrite(ToF,1); repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or ( NumWritten <> NumRead); CloseFile(FromF); CloseFile(ToF); end;Jhonas.. ele ta dando erro logo na linha "Reset(FromF,1);", o erro que ele da é o seguinte I/O Error. Nunca ví esse erro e nunca trabalhei com esse tipo de variavel pra Buf.. você pode me ajudar por favor? Vou dar uma pesquisada na internet sobre o erro mas, nunca vi ele.. se você puder me ajudar assim como você vem me ajudando agradeceria muito ^^ Editado Novembro 18, 2010 por LucAlucard Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Novembro 18, 2010 Denunciar Share Postado Novembro 18, 2010 ok ... me esqueci de um detalhe ... o comando Rewrite zera o arquivo destinoentão tente essa modificaçãounit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; File1, File2 : string; implementation {$R *.DFM} procedure MyCopyFile(FromName, ToName: string); var FromF, ToF : file; NumRead, NumWritten : Integer; Buf: array[1..2048] of Char; Ch : Char; begin AssignFile(FromF, FromName); Reset(FromF,1); AssignFile(ToF, ToName); Reset(ToF,1); Seek(ToF, FileSize(ToF)); //ReWrite(ToF,1); repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or ( NumWritten <> NumRead); CloseFile(FromF); CloseFile(ToF); showmessage('Copia efetuada com sucesso!'); end; procedure TForm1.Button1Click(Sender: TObject); begin // abrir arquivo1 if OpenDialog1.Execute then File1 := OpenDialog1.FileName; // salvar no arquivo destino if SaveDialog1.execute then MyCopyFile(File1, SaveDialog1.FileName); end; end.o procedimento é o seguinte:abra o arquivo origem exemplo : ( Arquivo1.dat ) e depois digite um nome de arquivo para ser salvo o conteudo do Arquivo1.datexemplo: Teste.datfaça isso para cada arquivo que for juntar ao arquivo Teste.databraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Novembro 18, 2010 Autor Denunciar Share Postado Novembro 18, 2010 você que montou essa rotina assim? Tão rápido o.O Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Novembro 18, 2010 Denunciar Share Postado Novembro 18, 2010 levei apenas 5 minutos para montar vai funcionar a copia, mas não tenho certeza quando voce for utilizar o arquivo concatenadoabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Novembro 18, 2010 Autor Denunciar Share Postado Novembro 18, 2010 Olha.. não sei o porque mas ele juntou os 2 arquivos (pelo menos o tamanho ficou igual)... Mas quando eu tento ler alguma imagem após ela ter juntado os arquivos .Dat ela não cosnegue ler o arquvio de algumas imagens q eu tinha... não sei o porque.. =/ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Novembro 18, 2010 Denunciar Share Postado Novembro 18, 2010 voce tem que saber qual é o tamanho maximo das linhas do arquivo .dat Buf: array[1..2048] of Char;o tamanho maximo definido é de 2048 caracteres .. se seu arquivo dat tiver mais do que isso voce deve mudar esse comando para 3072, ou 4096 ou 5210 ...etc para que ele possa ler todo o conteudo dessa linhacomo eu disse, podia ou não funcionar corretamenteabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Novembro 18, 2010 Autor Denunciar Share Postado Novembro 18, 2010 tentei tanto pelo nome da imagem quatno pelo índice.. mas nem um dos 2 funcionou.. tinha pensado q ele podia ter copiado sem copiar os nomes das imagens mas.. pelo visto parece q ele deixou os bits q ele tinha e passou a imagem pro cima.. não sei se isso é possível..tentei tanto pelo nome da imagem quatno pelo índice.. mas nem um dos 2 funcionou.. tinha pensado q ele podia ter copiado sem copiar os nomes das imagens mas.. pelo visto parece q ele deixou os bits q ele tinha e passou a imagem pro cima.. não sei se isso é possível..Não tem como deixar esse array dinâmico? porque eles crescem constantemente.. por exemplo o meu 1º aruqivo tem 15148 linhas e sei q vai crescer...É... de qualquer forma obrigado ^^... aumentei o tamanho do Buf pra 30048 mas continuou na mesma =/ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Novembro 18, 2010 Denunciar Share Postado Novembro 18, 2010 usando array diamicoprocedure MyCopyFile(FromName, ToName: string); var FromF, ToF : file; NumRead, NumWritten : Integer; //Buf: array[1..2048] of Char; Buf: array of Char; Ch : Char; begin AssignFile(FromF, FromName); Reset(FromF,1); AssignFile(ToF, ToName); Reset(ToF,1); Seek(ToF, FileSize(ToF)); SetLength(Buf, FileSize(ToF)); //ReWrite(ToF,1); repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or ( NumWritten <> NumRead); CloseFile(FromF); CloseFile(ToF); showmessage('Copia efetuada com sucesso!'); end;OBS: arquivos .dat podem ser arquivos de texto, vídeo, imagem, etc....dependendo do conteúdo, ele cria uma entrada no registro onde um programa especifico usa para abrir este tipo de arquivoao juntar 2 arquivos, o registro de entrada do outro arquivo ficará no final do primeiro... o programa que vai utiliza-lo precisa desse registro no inicio ( como se fosse um header ... cabeçalho de indice ) para poder identificar onde ele vai procurar a informação que necessita.acho que terá que pensar em outra soluçãoabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Novembro 18, 2010 Autor Denunciar Share Postado Novembro 18, 2010 É.. Meu chefe q tava faladno "tenta descobrir como q faz pra juntar 2 arquivod dat" aew fiquei matutando e sem respota... até q você me ajudou ^^. Mas então se o que você está falando for realmente o que acontece então eu teria que trabalhar com outro tipo de arquivo pois ele não consegue juntar 2 né? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Novembro 18, 2010 Denunciar Share Postado Novembro 18, 2010 como voce observou, o programa concatena 2 arquivos .dat, mas não da maneira que voce precisa ... se o conteudo fosse arquivo texto, não teria nenhum problemaacho que voce pode usar arquivo .Res do proprio delphi para armazenar imagens ... procure no forumabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Novembro 18, 2010 Autor Denunciar Share Postado Novembro 18, 2010 (editado) beleza. Vlw pela dica ^^. Vou dar uma procurada muito obrigado Jhonas. Vlw mas vlw mesmo! ^^é... acho q não vai dar muito certo.. agora q eu lembrei q usei o .Res pra fazer um compilador. Tem alguns problemas ao usar o .Res. ele funde ao exe, precisa ficar compilando. E o q eu precisava mesmo era pegar vários arquivinhos .qualquercoisa e juntar em um para ficar um .qualquercoisa grande... Editado Novembro 18, 2010 por LucAlucard Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Novembro 18, 2010 Denunciar Share Postado Novembro 18, 2010 Tem alguns problemas ao usar o .Res. ele funde ao exe, precisa ficar compilando.necessariamente não... eu tenho arquivo .res com skins diferentes, bitmaps, icones etc ... so preciso carrega-los quando for preciso exemplos:http://www.edudelphipage.com.br/dicas_text...a=10&busca=http://br.dir.groups.yahoo.com/group/delphi-br/message/6203http://www.planetadelphi.com.br/artigo/41/...s-ao-executavelOBS: Na verdade voce nem precisa compilar o arquivo .Res usando o Brcc32 , basta ir em Menu > Project > Resourcese clicar com o botão direito do mouse e clicar em New e escolher o que fara pare do arquivo de recursosabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Novembro 18, 2010 Autor Denunciar Share Postado Novembro 18, 2010 mas isso não deixa o .exe muito pesado? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Novembro 19, 2010 Denunciar Share Postado Novembro 19, 2010 mas isso não deixa o .exe muito pesado?depende do tamanho das imagensSugestões finais:voce pode baixar um programa para juntar arquivos dathttp://www.google.com.br/search?hl=pt-BR&a...q=&gs_rfai=voce pode baixar esses programas feito para o delphi 5http://kingcaio.110mb.com/Adrenaline%20Binder.ziphttp://kingcaio.110mb.com/Adrenaline%20Bin...5BSource%5D.ziphttp://www.4shared.com/file/KUFdn_BV/Adren...nderSource.htmlou de maneira bem simples usar esse comando1. Digite “cmd” no menu “executar” do windows xp, para iniciar a janela de comandos (antigo DOS)2. Digite o caminho onde estão os arquivos, por exemplo:cd “C:\Meus Documentos\Arquivos DAT”3. se os nomes dos arquivos forem por exemplo Arquivo1.dat, Arquivo2.dat, … etc, digite:type Arquivo*.dat > Novo_Arquivo.datEste comando vai criar um arquivo novo, de nome Novo_Arquivo.dat, com as partes concatenadasOBS: esse mesmo comando pode ser executado pelo delphi usando o comando Winexecabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Novembro 22, 2010 Autor Denunciar Share Postado Novembro 22, 2010 nossa cara! TE AMO rsrs... Brincadera ^^'... Vlw pela ajuda. Pensei q num tinha mais como fazer isso... vou testar eles aqui ou talvez em casa e repondo o resultado postando aqui no fórum... Jhonas muitissimo obrigado pela ajuda que você ta dando pra mim cara! Brigadão de verdade! Vou testar e posto o resultado aqui no tópico. Abração! ^^ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LucAlucard Postado Novembro 23, 2010 Autor Denunciar Share Postado Novembro 23, 2010 Bom... tente com o CMD de várias formas... ele consegue ler o arquivo mas na hora de escrever o arquivo na imagem ele da Access Violation. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Novembro 23, 2010 Denunciar Share Postado Novembro 23, 2010 testei aqui e não deu erro .... voce pode tentar as outras opções abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
LucAlucard
Olá família ScriptBrasil. Hoje venho mais uma vez até vocês para pedir ajuda... (rsrs)
Gostaria de saber se vocês sabem como juntar vários arquivos .Dat em um único arquivo em memória. Por exemplo:
muito obrigado pela ajuda, qualquer dúvida por favor entrem em contato, ou respondam esse fórum q responderei assim q possível.
Editado por LucAlucardLink para o comentário
Compartilhar em outros sites
23 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.