Jump to content

Guardar e abrir dados no disco


Luis Santos
 Share

Recommended Posts

Luis Santos

Tenho um programa para a faculdade e está a funcionar perfeitamente, o meu único problema e não sei por onde começar é como guardar as informações armazenadas ao abrir novamente o programa, é através de um ciclo em que puxo o ficheiro?

 

Edited by Luis Santos
demasiada informção do código e receio de fraude
  • Thanks 1
Link to comment
Share on other sites

maluco-123

Viva,

Presumo que estejas a guardar com um "fwrite" ou algo do género,

Para ler, é só alocar uma lista e ler com "fread" ateu o ficheiro acabar,

Podes também guardar no início do ficheiro o tamanho do array (ou dos dados em geral),

Novamente, presumo que seja um (ou mais) array de alguma estrutura,

Boa sorte

  • Thanks 1
Link to comment
Share on other sites

Creio que a forma mais simples no teu caso será serializar / deserializar.
Basicamente escreves o conteúdo que tens em memória para um ficheiro e depois lês desse ficheiro para memória.

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

 

Link to comment
Share on other sites

rbsrbs_dev

Olá Luis, 

Como os users em cima disseram corretamente, para poderes reutilizar informação entre execuções deves usar ficheiros. Tens é uma grande decisão entre usares um ficheiro binário ou ficheiro de texto. Isto vai depender um pouco dos teus requisitos se por exemplo queres poder facilmente editar a informação manualmente (ficheiro de texto) ou não.
Mas no geral: ficheiro de texto dá muito mais trabalho porque requer fazer deserialização (decidires a ordem e cabeçalhos para cada unidade de informação) e depois a serialização (lexing e parsing). Ficheiro binário não tens grande parte deste trabalho caso seja possível fazeres literalmente "dump" da memória da tua informação.

Para ambos os casos a rotina habitual é: o programa inicia por verificar se esse ficheiro existe. Se não existir fazes um init básico, caso exista fazes o tal upload do ficheiro para memória. No final do programa (ou por decisão do user wathever) fazes a escrita da informação para esse tal ficheiro com nome conhecido.
 

Deixo algumas observações ao teu código (tenho notificações por email deste sub, por isso consegui ver o teu OP): 

  • O nome das macros é norma e aconselhado usar full capslock, entre várias razões é uma forma simples de identificar que aquele símbolo é algo constante/macro.
  • O teu array global de meses só é utilizado/acedido uma única vez, por isso é aconselhado moveres para a própria função.
  • Tens uma grande quantidade de printfs que imprimem só uma string constante do tipo "\nString exemplo". É aconselhado moveres o '\n' para o final da string. Isto é completamente implemented defined e system dependent mas tem um pouco a ver com a forma como o output é buffered e flushed. Uma outra razão que acho mais importante que é algo filosófico, tem a ver com cada linha (geralmente um printf) é responsável pela sua própria linha. Imagina por exemplo que tens um printf ao teu estilo que escreve algo tipo "\nTarefa x foi executada." e depois mais à frente é chamada uma função que imprime informação de uma estrutura do género:
void print_my_struct(my_struct_t * foo)
{
    printf("ID: %s\n", foo->id);
    printf("Value: %d\n", foo->value);    
}

           Esta função não tem obrigação nenhuma de saber que deveria ter imprimido um '\n' para apresentar a informação numa nova linha. Por isso é recomendado manteres o "cursor" no início de uma nova linha por default para evitares esta incerteza.
           Para além disto, podes passar estes printfs para puts, mas não é muito importante, o compilador trata dessa otimização.

  • Um outro conselho é no teu switch em vez de usares os valores [1, 2, 3, 4, etc] para as tuas opções de menu, podes usar um enum para ser mais fácil ler os teus vários cases e evitares confundir-te. Por exemplo:
enum menu_opcao {
    OPCAO_ALTERAR_CATEGORIA = 1,
    OPCAO_INSERIR_DESPESA,
    // complete me
}

 

  • Vote 1
Link to comment
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
 Share

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