Jump to content

Recommended Posts

Posted

Estou com um projeto chamado GDV (Gerenciamento de Viagens), que será para gerenciar viagens, exemplo, eu tenho uma viagem no qual tenho 50 passageiros, eu vou lá no GDV e anoto o nome dos passageiros, informações e tal. Até aí tudo bem, o problema é que, a pessoa que me pediu este programa quer 12 viagens com cada viagem 50 pessoas, o que dá 600 pessoas para se cadastrar, isto é, 600 arquivos para se criar (isto tirando as informações), eu uso este "estilo" de programação, um arquivo para cada coisa, pois não sei lidar muito bem com as linhas, por exemplo, não sei usar informações separadas em um arquivo só, pois não sei separar as linhas umas das outras(separar as informações), então, já que eu uso este "estilo" de programação, pensei em usar o comando For, para criar 50 arquivos em um "passe de mágica", porém não funcionou, pois o comando Assign não foi apropriado para este tipo de coisa, vejam: 

program Project1;
uses
 Crt, SysUtils;
var
  t : text;
  I : integer;
begin
  for I := 1 to 10 do begin //este é só um exemplo, mas eu teria que criar 50 desses
    I := I + 1;
    assign(t, 'nomeDoCliente',I,'.clnGDV');
    rewrite(t);
    close(t);
  end;
end.        

Não sei como vou fazer tudo isso tirando o comando For, se não existir outra maneira, vou ter que criar um arquivo por vez mesmo? Obrigado desde já!

 

11/05/2017 19:09 Brasil (Horário de Brasília)

Brenio Hallison A.M. Filho

 

Posted

Em vez de procurares forma de criar os 600 arquivos, recomendava-te que aprendesses a usar um ficheiro como base de dados.
É bastante simples, e se quiseres posso dar-te umas dicas.

Melhor ainda que isso era usares um DBMS, ou seja, um motor de banco de dados, que te facilita imenso lidar com as informações guardadas e com uma velocidade muito superior. Custa um pouquinho mais a entrares no ritmo, mas também não é dificil.

É que criares 600 ficheiros para isso é absurdamente contra todas as boas práticas.

De qualquer forma, seria possível fazer com o Assign, mas não dessa forma que tens:

  • O Assign recebe apenas dois argumentos (ou seja, só podes usar uma única vírgula
  • A propria forma como estás a usar o FOR é errada

Teria de ser algo tipo:

program Project1;
uses
 Crt, SysUtils;
var
  t : text;
  I : integer;
begin
  for I := 1 to 10 do begin 
    // Não podes atribuir valor nenhum à variável índice do FOR. O seu valor será atribuido automaticamente pelo compilador a cada iteracção
    assign(t, 'nomeDoCliente'+IntToStr(I)+'.clnGDV');
    rewrite(t);
    close(t);
  end;
end.   

 

Agora repara noutra coisa:

Se o nome do cliente tiver caracteres que o sistema operativo não suporte para nome de ficheiro, isto vai dar erro.
Terias de criar uma validação.

Ou seja, se fores mesmo por esse caminho do ficheiro para cada cliente, estás a arranjar problemas para ti mesmo.

Esquece isso, e pensa antes em usar ficheiros sequenciais binários, também conhecidos por ficheiros tipados. É de uso bem simples, e fica bem melhor (sem comparação).

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

  • 4 months later...
  • 1 month later...
Posted

@BHAMF,

No espírito da partilha de informação não queres partilhar a solução que encontraste para o teu problema? O @nunopicado levantou algumas questões relativas à tua abordagem inicial que seria interessante perceber se chegaste ou não a abordar, e de que forma.

Assim, quem tiver uma dúvida semelhante à tua acaba por ter uma ideia de como solucionaste o problema também.

  • Vote 1
Posted
Em 02/11/2017 às 16:34, pwseo disse:

@BHAMF,

No espírito da partilha de informação não queres partilhar a solução que encontraste para o teu problema? O @nunopicado levantou algumas questões relativas á tua abordagem inicial que seria interessante perceber se chegaste ou não a abordar, e de que forma.

Assim, quem tiver uma dúvida semelhante à tua acaba por ter uma ideia de como solucionaste o problema também.

Aqui está a maneira em que resolvi o meu código utilizando parte do exemplo do @nunopicado 

procedure verificacao_de_arquivos;
var
  nomeArq : string;
  nomeDir : string;
  I 	  : integer;
begin
if not FileExists('GDVDIR/VIAGEM1/vgm1.vgmGDV') then begin
  for I := 1 to 6 do begin
  nomeArq := 'GDVDIR/VIAGEM1/vgm' + intToStr(I);
  assign(t, nomeArq + '.vgmGDV');
  rewrite(t);
  close(t);
  end;
 end;
end;

Não consegui usar um gerenciador de banco de dados ainda, por enquanto,  tal programa está funcionando perfeitamente com minha gambiarra, no futuro, desejo aprender mais sobre tal. Obrigado pela dica! Se quiseres testar o programa, podes acessar o site: http://gdv.hol.es 

BHAMF, 11:32, 04/11/2017 (Horário de Brasília)

Brenio Hallison A.M. Filho

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.