• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Ziwdon

Comandos MS DOS em PASCAL - Pesquisar um Ficheiro

22 mensagens neste tópico

Boas.

Eu gostava de saber se é possivel utilizar comandos do ms dos no pascal e se sim como utiliza-los.

Comandos do genero "find", "replace", "delete"...e assim por ai.

Se não for possivel, que comandos se podem usar em vez desses?

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim é. Usa o comando EXEC. No entanto és capaz de ter de invocar com " COMMAND.COM /P " antes de certos comandos, isto em WINDOWS/DOS claro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Existe uma biblioteca que te permite trabalhar com Dos.

Se estiveres a usar Turbo Pascal podes fazer

Program xpto;
Uses crt,dos;
...

Caso contrário da forma anteriormente postada.

Cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desde já obrigado por responderem.

Não percebi como faço se não estiver a trabalhar com o turbo pascal?...ou seja não percebi o que disse o M6.

Podem dar um exemplo? E os comandos que usar depois no programa sao os mesmos do ms dos certo?

Obrigado e fiquem bem

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desde já obrigado por responderem.

Não percebi como faço se não estiver a trabalhar com o turbo pascal?...ou seja não percebi o que disse o M6.

Podem dar um exemplo? E os comandos que usar depois no programa sao os mesmos do ms dos certo?

Obrigado e fiquem bem

A ver se consigo explicar melhor.

O comando Pascal que procuras é o EXEC, vê a documentação do Pascal ou procura na net que vais encontrar mais informação sobre isto.

Quando ao

command.com /p

tem a ver com particularidades do próprio DOS (comandos internos, comandos externos, contexto e outras tretas), que para executares certos comandos vais ter de escrever 

command.com /p "<comando>" 

. Depende do que pretendes fazer, podes ter, ou não, necessidade de usar

command.com /p "<comando>" 

em vez de invocares simplesmente o comando.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

humm ok. Já entendi mais ou menos.

Só mais duas questões:

Os comandos que usar no programa são os mesmo que se usam no DOS certo?

Que comando posso usar para procurar um ficheiro no disco?

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

humm ok. Já entendi mais ou menos.

Só mais duas questões:

Os comandos que usar no programa são os mesmo que se usam no DOS certo?

Não. O DOS é um sistema operativo com os seus próprios comandos e o Pascal é uma linguagem de programação também com os seus próprios comandos.

Podes, através do EXEC, invocar/executar comandos de DOS a partir do Pascal, mas não vais poder usar os comandos do DOS dentro do Pascal (como se de um comando Pascal nativo se tratasse).

Que comando posso usar para procurar um ficheiro no disco?

Obrigado

Depende. Em DOS ou em Pascal?

Se queres procurar um ficheiro dentro de uma aplicação Pascal, tens de implementar a tua própria rotina de procura de ficheiros dentro de um directório e, caso não encontre, passar ao directório seguinte.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

OK. Já entendi isso do Pascal e do Dos.

O problema agora é que cria fazer um programa para pesquisar um ficheiro no disco, mas não faço ideia como fazer, uma vez que não existe nenhum comando do tipo "Find", apenas para pesquisar dentro de ficheiros.

Não me podem dar umas luzes/ideias de como o fazer...só assim umas ideias base?

Obrigado pela paciencia :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O algoritmo é simples e definido de forma recursiva:

1. saber qual o ficheiro que queres encontrar

2. começar num directório, por exemplo c:\

3. para todos os ficheiros do directório actual:

3.1. se o ficheiro actual é o que queremos encontrar então parar

3.2. senão, passar ao próximo ficheiro

4. esgotados os ficheiros do directório actual, fazer para cada sub-directório do directório actual:

4.1. mudar para o sub-directório

4.2. voltar ao passo 3.

5. pesquisados todos subdirectórios do directório inicial, parar e dizer que o ficheiro não foi encontrado

Se queres fazer isso em Pascal procura na documentação os comandos de ficheiros e directórios.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim é isso.

Mas isso é apenas um pequeno conjunto de coisas. O Pascal tem muito mais, em especial se usares o Turbo Pascal tem um conjunto vasto e extremente útil de bibliotecase funções.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Thx M6!

Agora estou com um problema...

Isto é o que já tenho:

program Find;
Uses crt, dos;


Function FileExist(Name:string):Boolean;
Var F:File;
Begin
Assign(F,Name);
Reset(F);
If IOResult=0 Then
Begin
FileExist:=True;
Close(F);
end
else
FileExist:=False;
If FileExist=True then writeln('Existe');
If FileExist=False then writeln('Nao Existe');
End;

Begin
clrscr;
FileExist('name');
readln;
end.

Supostamente o programa tentaria aceder ao ficheiro 'nome' e se conseguisse dizia 'Existe' ou caso contrário dizia 'Não Existe'.

O problema é que assim que corro o programa dá erro e fecha logo e eu não consigo saber porque.

Alguém me pode ajudar?

Obrigado

p.s. vou alterar o nome do topico uma vez que me estou a desviar um pouco do assunto original.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Thx M6!

Agora estou com um problema...

Isto é o que já tenho:

program Find;
Uses crt, dos;


Function FileExist(Name:string):Boolean;
Var F:File;
Begin
Assign(F,Name);
Reset(F);
If IOResult=0 Then
Begin
FileExist:=True;
Close(F);
end
else
FileExist:=False;
If FileExist=True then writeln('Existe');
If FileExist=False then writeln('Nao Existe');
End;

Begin
clrscr;
FileExist('name');
readln;
end.

Supostamente o programa tentaria aceder ao ficheiro 'nome' e se conseguisse dizia 'Existe' ou caso contrário dizia 'Não Existe'.

Sim é isso que faz. Mas de certo que existam outras soluções melhores do que estares a verificar se um ficheiro exite abrindo-o.

O problema é que assim que corro o programa dá erro e fecha logo e eu não consigo saber porque.

Alguém me pode ajudar?

Obrigado

p.s. vou alterar o nome do topico uma vez que me estou a desviar um pouco do assunto original.

Qual é o erro que dá?

Não sei como estás a correr isso, mas é sempre bom executar isso de forma manual numa shell de DOS em vez de dares um duplo click no Explorer do Windows.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim é isso que faz. Mas de certo que existam outras soluções melhores do que estares a verificar se um ficheiro exite abrindo-o.

Mas esta foi a unica maneira que vi. Pesquisei em vários sitios, vi programas exemplo e e foi essa a unica que vi.

É que o meu problema é dizer ao programa para ver se o ficheiro existe. Só tentanto abri-lo...

Conheces algo mais simples?

Qual é o erro que dá?

Não sei como estás a correr isso, mas é sempre bom executar isso de forma manual numa shell de DOS em vez de dares um duplo click no Explorer do Windows.

Eu estou a usar o Dev-Pascal e apenas faço "Compile and Run" e ele compila (sem erros) mas depois quando faço run ele abre e fecha tão depressa que nem se percebe o erro. Qualquer coisa como "Runtime Error" acho...

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim é isso que faz. Mas de certo que existam outras soluções melhores do que estares a verificar se um ficheiro exite abrindo-o.

Mas esta foi a unica maneira que vi. Pesquisei em vários sitios, vi programas exemplo e e foi essa a unica que vi.

É que o meu problema é dizer ao programa para ver se o ficheiro existe. Só tentanto abri-lo...

Conheces algo mais simples?

Creio que o Turbo Pascal tinha umas funções mais especificas para isso, mas não sei se não eram só do Turbo Pascal...

Qual é o erro que dá?

Não sei como estás a correr isso, mas é sempre bom executar isso de forma manual numa shell de DOS em vez de dares um duplo click no Explorer do Windows.

Eu estou a usar o Dev-Pascal e apenas faço "Compile and Run" e ele compila (sem erros) mas depois quando faço run ele abre e fecha tão depressa que nem se percebe o erro. Qualquer coisa como "Runtime Error" acho...

Obrigado

Faz assim: abre uma shell de DOS no local onde tens o executável final dessa aplicação e corre a aplicação a partir dai. Assim, quando a aplicação terminar vais ver o erro.

Antes de continuares nesta aventura, acoselho-te a leres um tutorial ou um bom livro de Pascal, senão vais andar "às cabeçadas" com coisas simples.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Faz assim: abre uma shell de DOS no local onde tens o executável final dessa aplicação e corre a aplicação a partir dai. Assim, quando a aplicação terminar vais ver o erro.

Antes de continuares nesta aventura, acoselho-te a leres um tutorial ou um bom livro de Pascal, senão vais andar "às cabeçadas" com coisas simples.

Ok vou fazer isso.

Quanto ao livro, estou a ler o "Introdução à Programação usando o PASCAL" de J. Pavão Martins.

À medida que vou lendo vou fazendo umas coisitas ;)

Fica bem e obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aqui está o erro. Não percebo porque dá erro...já tentei mudar uma data de coisas e dá sempre erro.

Penso que tem qualquer coisa a ver com o comando "Assign".

erro1hn.jpg

Mais uma vez, estive a ver o source de alguns programas de pesquisa e todos usam este método...não percebo.

Vou tentar usar outro compilador para ver.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens de fazer debug "the hard way".

Faz writelns, tipo, writeln("1"); , writeln("2");, etc. ao longo do código para saberes onde isso estoira.

Mas parece-me que isso pode ser alguma incompatibilidade entre o código gerado e o SO. O compilador é para Windows ou apenas para DOS?

Isso é 16 bits, certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok já vi onde está o problema.

O problema está no comando "Reset". Quando o programa tenta abrir o ficheiro, se o ficheiro existir, ele diz que existe, mas quando o ficheiro não existe, como o ele não o encontra dá erro ao fazer "Reset". O mesmo acontece com o comando "Close".

Não tou a ver como solucionar isto...só usando outro método. O problema é...qual?

Fica bem e obrigado pela ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não necessitas de usar outro método, basta manipulares o ficheiro só quando o mesmo existe.

Function FileExist(Name:string):Boolean;
Var F:File;
Begin
Assign(F,Name);
If IOResult=0 Then
Begin
FileExist:=True;
Close(F);
writeln('Existe');
end
else
begin
FileExist:=False;
writeln('Nao Existe');
end;
End;

Tens outras formas de apanhar os erros em Pascal, ou seja, quando uma aplicação dá erro não podes deixar estoirar, apanhas o erro e dás uma mensagem. No Turbo Pascal acho que era qualquer coisas a ver com $I ou {$A}, já não me recordo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito obrigado M6.

Finalmente consegui por isto a funcionar, fiz o que disseste...apanhei o erro e dei uma mensagem.

Aqui fica o código:

program Find;
Uses crt, dos;


Function FileExist(Name:string):Boolean;
Var F:File;
Begin
Assign(F,Name);
{$I-}Reset(F);{$I+}
If IOResult=0 Then
begin
FileExist:=True;
Close(F);
writeln('Existe');
end
else
begin
FileExist:=False;
writeln('Nao Existe');
end;
End;

Begin
clrscr;
FileExist('ola');
readln;
end.

Mais uma vez muito obrigado pela ajuda M6!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

De nada. :)

É para isso que os fóruns servem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora