Jump to content
a3deluxe

ajudinha a elaborar um programa em pascal

Recommended Posts

a3deluxe

Boas,

Precisava de uma ajudinha a elaborar um programa em pascal.

- REGISTAR  A DATA E HORA AO CORRER UM AUTOEXEC.BAT

- CONTAR 30 DIAS, DO ULTIMO REGISTO

- CHEGANDO A 30 DIAS SEM REGISTO,APAGAR O DIRECTÓRIO OU O FICHEIRO PRETENDIDO.

precisava de umas luzes, por favor...

cumprimentos

Share this post


Link to post
Share on other sites
M6

3adeluxe, tens de ser especifico no que toca às tuas dúvidas de programação em Pascal...


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

 

Share this post


Link to post
Share on other sites
thoga31

O que já tens feito para te podermos ajudar?

O autoexec é feito por ti?


Knowledge is free!

Share this post


Link to post
Share on other sites
a3deluxe

não o autoexec.bat é de um programa.

queria adicionar a esse autoexec.bat o ficheiro exe que vou criar.

Assim quando arranca o autoexec.bat e lêe o meu ficheiro e grava a data e hora, do autoexec.bat

e começa a contar 30dias da data da ultima execução do autoexec.bat.

Chegando aos 30dias sem registo ele apaga o directorio que eu definir.

acham possível?

ainda só tenho pesquisas da net com código, queria umas dicas. 

cumprimentos

Share this post


Link to post
Share on other sites
nunopicado

Tens de dividir o programa por secções:

1. Módulo de configuração, onde defines o contador de dias e o directorio a eliminar

Onde é criado um ficheiro de configurações que indicará qual o directorio, quando começou o contador e o numero de dias, ou preferencialmente, a data de fim do contador.

2. Módulo de teste do contador

De cada vez que o programa arranca verifica a data actual contra a data de fim do contador existente na data

3. Módulo de Eliminação

Onde efectivamente é eliminada a pasta, caso haja ordem para tal

Com isto é relativamente simples avançares...

Começas por fazer módulo a módulo, com um procedure ou uma function para cada módulo. Recomendo que os faças na ordem que sugeri, pois cada um depende do anterior.

No fim, basta juntá-los todos num programa, por exemplo usando parâmetros de linha de comandos para definir se queres configurar ou executar o programa, ou mesmo para fazer toda a configuração por linha de comandos, sem necessitar recorrer a um "menu".

Claro que ninguém te disse exactamente o que fazer, nem te deu o programa feito, mas penso que será mais interessante seres tu a desenvolver o código. Caso nessa fase de programação te surjam dúvidas pelo meio, cá estamos...


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

Share this post


Link to post
Share on other sites
a3deluxe

nunopicado obrigado.

podias me dar uma ajudinha quanto as funçoes que devo usar?

por exemplo que função devo usar para registar a data e hora da bios?

função contar dias?

função apagar ficheiros ou directorio?

cumprimentos

Share this post


Link to post
Share on other sites
nunopicado

Pessoalmente a minha aproximação ao problema seria ligeiramente diferente...

Em vez de contar os dias, o que eu faria era:

Ao configurar o programa (pasta a eliminar, numero de dias), o programa calcularia imediatamente qual a data de eliminação, e seria essa data final que ele iria guardar.

Deste modo, ao arrancar em modo normal (sem ser configuração), tudo o que o programa tem de fazer

é ver se a data actual é igual ou superior à que ele tem guardada... Se for, elimina!

Assim, mesmo que um dia ou mais não liguem o PC (ou pelo menos, se o autoexec não correr), o "contador" continuará a contar (desde que a data do PC esteja sempre certa é claro).

Quanto a funções especificas depende de que compilador vais usar. Em qual estás a pensar trabalhar?


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

Share this post


Link to post
Share on other sites
a3deluxe

Vou usar o Bloodshed Dev-Pascal.

que funçoes me aconcelhas?

mais umas vez obrigado pela ajuda

;)

Share this post


Link to post
Share on other sites
a3deluxe

Obrigado pelo link

Que função posso usar para apagar uma pasta ou ficheiro?

Share this post


Link to post
Share on other sites
thoga31

Obrigado pelo link

Que função posso usar para apagar uma pasta ou ficheiro?

function DeleteFile (const FileName : String): Boolean;

// exemplo:
if not DeleteFile('C:/Exemplo/ficheiro.txt') then write('Ocorreu um erro.')
else write('Ficheiro apagado!');

Esta é a função que te permite apagar um ficheiro. Retorna True se foi apagado com sucesso e False se ocorreu um erro. ;)

Biblioteca necessária: sysutils.


Knowledge is free!

Share this post


Link to post
Share on other sites
a3deluxe

nesta parte do programa como sugeriu o amigo nunopicado

"o programa calcularia imediatamente qual a data de eliminação, e seria essa data final que ele iria guardar."

como posso passar isto para código?

Share this post


Link to post
Share on other sites
thoga31

nesta parte do programa como sugeriu o amigo nunopicado

"o programa calcularia imediatamente qual a data de eliminação, e seria essa data final que ele iria guardar."

como posso passar isto para código?

Sendo hoje dia 19 de Julho, um mês com 30 dias, podes somar 1 a 1 num total de 30 dias, e quando der "31 de Julho", que não existe, assumes que é "1 de Agosto", e continuas até ao resultado.

Não sei se existe função que calcule isso, mas presumo que sim. Deixaste-me curioso, vou já pesquisar. ;)


Knowledge is free!

Share this post


Link to post
Share on other sites
thoga31

Encontrei os códigos necessários para facilitar o trabalho. Como 30 dias = 1 mês, então temos a função IncMonth, que incrementa 1 mês por defeito. ;)

program exemplo;
uses sysutils;
var hoje : TDateTime;

begin
     hoje := Date;  // obtém a data de hoje
     Writeln ('Hoje : ',DateToStr(hoje));
     Writeln ('1 mes a partir de hoje:' ,DateToStr(IncMonth(ThisDay)));
     readln;
end.


Knowledge is free!

Share this post


Link to post
Share on other sites
a3deluxe

tive a pesquisar e a dar voltas, não sei como fazer para registar a data sempre que é executado autoexec.bat!!

será que posso acrescentar ao autoexec.bat o ficheiro que vou criar,

vou coloca-lo antes do exe do programa principal (VIA.EXE)

Quando arranca o Autoexec.bat ele lêe 1º o meu ficheiro (PASCAL.EXE) e  regista a data e hora,

em seguida segue para o programa principal(VIA.EXE)

isto será possível?

aqui fica o Autoexec.bat que vou usar:

@ECHO OFF

viaudio.com

viafmtsr.com

sndinit.exe /init /16

sndtsr.exe

set blaster=a220 i5 d1 p330

SMARTDRV.EXE 16 16

PASCAL.exe---->ficheiro que vou criar

VIA.EXE----> EXE do programa principal

podem dar mais uma ajudinha?

Share this post


Link to post
Share on other sites
pwseo

a3deluxe,

Gravas a data (e qualquer outra informação que queiras guardar) num ficheiro qualquer.

Tens que investigar a documentação sobre como trabalhar com ficheiros em pascal.

Share this post


Link to post
Share on other sites
a3deluxe

Pedro-Kun

será que posso acrescentar ao autoexec.bat o ficheiro que vou criar,

vou coloca-lo antes do exe do programa principal (VIA.EXE)

Quando arranca o Autoexec.bat ele lêe 1º o meu ficheiro (PASCAL.EXE) e  regista a data e hora,

em seguida segue para o programa principal(VIA.EXE)

isto será possível?

Share this post


Link to post
Share on other sites
pwseo

a3deluxe, eu ainda não percebi o porquê de colocares o teu pascal.exe antes do tal via.exe. Posso ser só eu, mas achei a tua explicação algo confusa.

E clarificando, o autoexec.bat não lê ficheiros nenhuns, executa comandos... e se algum programa grava data e hora, esse programa será o teu, e não o autoexec.bat como parecia implicar o teu post.

Aqui vai uma dose de pseudocódigo para te orientar naquilo que eu compreendi do teu primeiro post

Primeiro, o autoexec.bat

@echo off
...
teuprograma.exe
...

e agora o teu programa:

program meuprograma;

begin
LerUltimaData;
GravarDataNova; // só se não tiver lido nenhuma

if (Hoje - DataLida >= 30) then
  ApagarFicheiroOuPasta;

end.

Deixo a cargo da tua imaginação a criação dessas funções. Existe neste fórum (em parte até nesta thread) todo o material que precisas para o conseguires :)

Share this post


Link to post
Share on other sites
thoga31

a3deluxe, andas a dizer "ler o ficheiro pascal.exe", mas esse ficheiro não é lido, é executado!

De facto também me confundi, tal como o pedro-kun.

O AutoExe terá de executar o teu programa, e o teu programa é que vai ler o ficheiro onde estará a data!

Numa árvore de directórios:

Pasta

    - AutoExe.bat

    - Via.exe

    - Data.txt

O AutoExe.bat arranca e vai ser executado nele o teu programa Via.exe, e este é que vai ler a última data guardada no ficheiro Data.txt.


Knowledge is free!

Share this post


Link to post
Share on other sites

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.