Jump to content

Comandos MS DOS em PASCAL - Pesquisar um Ficheiro


Recommended Posts

Posted

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

"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Posted

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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

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,

Posted

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

"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Posted

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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

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

"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Posted

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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

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 🙂

"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Posted

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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

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.

"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Posted

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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

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

"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Posted

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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

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

"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Posted

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".

http://img233.imageshack.us/img233/3394/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.

"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Posted

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?

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Posted

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

"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Posted

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...

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

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.