Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ler um arquivo TXT e gerar vários arquivos de saída


Fernando Fontes

Pergunta

Olá, boa tarde!

Tenho um TXT com quase 5 milhoes de linhas e preciso gerar "N" arquivos de saída, baseado em 2 campos.

Ao todos, deverão ser mais de 11.600 arquivos de saída. Alguém pode me dar uma dica de como é possível fazer isso?

Os campos são de tamanho fixo: ZONA = 999 e SEÇÃO = 9999

Obrigado.

 

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Olá Jhonas,

Separei um pedaço do arquivo em que ocorrerem 4 quebras:

SEQ;ZONA;SECAO;ELEITOR;TITULO;PAGS
001;001;0001;ADELAR DOS SANTOS;000000303/53;01
002;001;0001;AIRES FRANCISCO DE OLIVEIRA;744128103/70;01
003;001;0001;ALEXANDRE FONTOURA DE OLIVEIRA;699842503/53;01
001;001;0002;ADRIANA BARBOZA XAVIER;1252645403/29;01
002;001;0002;ALAN MICHEL CASTRO DE OLIVEIRA;1225138903/45;01
003;001;0002;ALESSANDRO FERREIRA DA SILVA;1298956103/02;01
004;001;0002;ALICE MESQUITA COSTA;1578264703/37;01
001;002;0001;ABRAHAM SALEM;000050203/96;01
002;002;0001;ADAILTON SILVA REGO;727999103/96;01
003;002;0001;ADAIR DIAS DA SILVA;000050303/70;01
004;002;0001;ADERSON MONTEIRO JUNIOR;734925703/45;01
005;002;0001;ADILSON DE ALMEIDA LEMOS;000050603/10;01
001;002;0004;ADAIR DA SILVA ALMEIDA;000078903/70;01
002;002;0004;ADALBERTO GOMES DE BRITO;000079003/02;01
003;002;0004;ADELINA ALMEIDA;000079303/53;01
004;002;0004;ADELINA DA COSTA JUNQUEIRA;000079403/37;01

 

O que preciso, com os dados acima é gerar vários arquivos de saída e identificados pelos campos Zona e Seção:

Z001S0001.txt, Z001S0002.txt, Z002S001.txt e Z002S004.txt

 

Desde já agradeço!

Link para o comentário
Compartilhar em outros sites

  • 0

ok...  entendi que o nome de saida do arquivo seria assim:

Z001S0001.txt

Z001S0002.txt

agora coloque como voce quer o conteudo do arquivo txt

Separei um pedaço do arquivo em que ocorrerem 4 quebras:

001;    001;    0001;    ADELAR DOS SANTOS;    000000303/53;   01   ( seriam 6 campos )

cada quebra pode ser representada pelo ( ; ponto e virgula )

quais campos voce quer como conteudo do arquivo ?  cada linha seria um arquivo ?

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Ok, vamos lá!

O primeiro arquivo seria Z001S001.txt (quebrando no campo "Zona" = 001 e campo "Seção" = 001)

001;001;0001;ADELAR DOS SANTOS;000000303/53;01
002;001;0001;AIRES FRANCISCO DE OLIVEIRA;744128103/70;01
003;001;0001;ALEXANDRE FONTOURA DE OLIVEIRA;699842503/53;01

O segundo seria Z001S002.txt (quebrando no campo "Zona" = 001 e campo "Seção" = 002) - mudou a Seção

001;001;0002;ADRIANA BARBOZA XAVIER;1252645403/29;01
002;001;0002;ALAN MICHEL CASTRO DE OLIVEIRA;1225138903/45;01
003;001;0002;ALESSANDRO FERREIRA DA SILVA;1298956103/02;01
004;001;0002;ALICE MESQUITA COSTA;1578264703/37;01

O terceiro seria Z002S001.txt (quebrando no campo "Zona" = 002 e campo "Seção" = 001) - mudou a Zona

001;002;0001;ABRAHAM SALEM;000050203/96;01
002;002;0001;ADAILTON SILVA REGO;727999103/96;01
003;002;0001;ADAIR DIAS DA SILVA;000050303/70;01
004;002;0001;ADERSON MONTEIRO JUNIOR;734925703/45;01
005;002;0001;ADILSON DE ALMEIDA LEMOS;000050603/10;01

O quarto seria Z002S004.txt (quebrando no campo "Zona" = 002 e campo "Seção" = 004) - mudou a Zona

001;002;0004;ADAIR DA SILVA ALMEIDA;000078903/70;01
002;002;0004;ADALBERTO GOMES DE BRITO;000079003/02;01
003;002;0004;ADELINA ALMEIDA;000079303/53;01
004;002;0004;ADELINA DA COSTA JUNQUEIRA;000079403/37;01

São 6 campos separados por ; e os 3 primeiros tem tamanhos fixos (Seq=3, ZOna=3 e Seção=4)

Grato,

 
Link para o comentário
Compartilhar em outros sites

  • 0

ok ...  segue o programa

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Arquivo : TextFile;
  Arquivo1 : TextFile;
  Line : string;
  num : integer = 0;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var S, VS, LINHA : string;
    SEQ,ZONA,SECAO,ELEITOR,TITULO,PAGS : string;

begin
  Edit1.Clear;
  Edit2.Clear;

  AssignFile(Arquivo, 'C:\Arquivo.Txt');
  Reset(Arquivo);
  while not EOF(Arquivo) do
  begin

    ReadLn(Arquivo, Line);
    Memo1.Lines.add( Line ); // Usado apenas para controle
    S := trim(Line);
    LINHA := '';
    LINHA := S;
    num := 0;

    while Pos(';', S) > 0 do
       begin
          inc(num);
          S[Pos(';', S)] := '#';
          vs := copy(s,1,Pos('#', S)-1);
          delete(s,1,Pos('#', S));
          case num of
            1: SEQ := VS;
            2: ZONA := VS;
            3: SECAO := VS;
            4: ELEITOR := VS;
            5: TITULO := VS;
            6: begin
                 vs := copy(s,1,5);
                 PAGS := VS;
                 delete(s,1,5);
                 num := 0;
               end;
          end;

       end;

   if  Edit1.Text <> ZONA then
    begin
       Edit1.Text := ZONA;
       Edit2.Text := SECAO;
       Edit1.Refresh;
       Edit2.Refresh;

       if not(fileexists('C:\'+'Z'+ZONA+'S'+SECAO + '.txt')) then
          begin
             AssignFile(Arquivo1, 'C:\'+'Z'+ZONA+'S'+SECAO + '.txt');
             Rewrite(Arquivo1);
             Writeln(Arquivo1, LINHA);
             CloseFile(Arquivo1);
          end
       else
          begin
             AssignFile(Arquivo1, 'C:\'+'Z'+ZONA+'S'+SECAO + '.txt');
             Append(Arquivo1);
             Writeln(Arquivo1, LINHA);
             CloseFile(Arquivo1);
          end;
    end
  else
    begin
       Edit1.Text := ZONA;
       Edit2.Text := SECAO;
       Edit1.Refresh;
       Edit2.Refresh;

       if not(fileexists('C:\'+'Z'+ZONA+'S'+SECAO + '.txt')) then
          begin
             AssignFile(Arquivo1, 'C:\'+'Z'+ZONA+'S'+SECAO + '.txt');
             Rewrite(Arquivo1);
             Writeln(Arquivo1, LINHA);
             CloseFile(Arquivo1);
          end
       else
          begin
             AssignFile(Arquivo1, 'C:\'+'Z'+ZONA+'S'+SECAO + '.txt');
             Append(Arquivo1);
             Writeln(Arquivo1, LINHA);
             CloseFile(Arquivo1);
          end;

    end;

  end;
  CloseFile(Arquivo);

  SHOWMESSAGE('PROCESSO CONCLUIDO!');

end;

end.

 

abraço

Editado por Jhonas
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...