Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida Em Passar Da Memória Para O Disco


Guest --MauricioCuri --

Pergunta

Guest --MauricioCuri --

Quero fazer uma procedure para salvar em disco(arquivo.txt) os itens ordenados da minha lista. Há possibilidade de salvar em forma de uma tabela? Também gostaria de saber como acessar um determinado item da lista e como imprimir na tela e como mandar os itens para a impressora?

Obrigado.

Segue abaixo meu código:

//Lista Encadeada ordenada
//Maurício Bainy Curi
//Sistemas de Informação - Escola Técnica da Ufrgs

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include <stdlib.h>


#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0


//Cronstrucao de estrutura de nome ListaEncadeadaOrdenada
/* struct é um grupo de variaveis dentro de um unico registro */
struct ListaEncadeadaOrdenada
{
 char nome[50];
 struct ListaEncadeadaOrdenada *elo; //declaracao de ponteiro do tipo 

estrutura
};

typedef ListaEncadeadaOrdenada defLista; /* definicao de um novo tipo.
typedef é a palavra-chave, ListaEncadeadaOrdenada é o tipo estrutura e
defLista é o identificador. */

/* Prototipo de funcoes */
int insere(char stringnome[50]);
void imprime();
int exclui(char stringnome[50]);

/* Declaracao de ponteiros(global) */
defLista *Lista;
defLista *Primeiro;

void main(void)
{
/* Declaracao de variaveis */
 char opcao;
 int resultado;
 int contador=0;
 char string[50];

 while (opcao!=5)
 {
  clrscr();
  printf("\n");
  printf("\n");
  printf("\n");
  printf("\n");
  printf("\n");
  printf("\n");
  printf("\n");
  printf("\n");
  printf("\n");
  printf("\n");
  printf("\n");
  printf("\n");
  printf("\n");
  printf("        ------------------------------------------------------\n");
  printf("\t  L I S T A   E N C A D E A D A   O R D E N A D A\n");
  printf("        ------------------------------------------------------\n");
  printf("\n");
  printf("\n");
  printf("\t      ESCOLHA UMA DENTRE AS OPCOES ABAIXO:\n");
  printf("\n");
  printf("\n");
  printf("\t\t\t 1 - INSERIR;\n");
  printf("\n");
  printf("\t\t\t 2 - LISTA;\n");
  printf("\n");
  printf("\t\t\t 3 - EXCLUSAO;\n");
  printf("\n");
  printf("\t\t\t 4 - TAMANHO DA LISTA.\n");
  printf("\n");
  printf("\t\t\t 5 - SAIR.\n");
  printf("\n");
  printf("\n");
  printf("\n");
  printf("\n\t\t\t OPCAO: ");
  scanf("%d",&opcao);
  fflush(stdin);
  switch(opcao)
  {
   case 1 :clrscr();
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\t\t  ********************************************\n");
       printf("                  *                                        

  *\n");
       printf("\t\t  *               1 - INSERCAO               *\n");
       printf("                  *                                        

  *\n");
       printf("\t\t  ********************************************\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("NOME:");
       gets(string);

       resultado=insere(string);
       if (resultado==TRUE)
       {
        printf("\n");
        printf("\n");
        printf("\n");
        printf("%s INSERIDO COM SUCESSO !",string);
       contador++;
       }
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n\n    << PRESSIONE QUALQUER TECLA PARA CONTINUAR >>");
       getch();
       break;

 case 2 :clrscr();
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\t\t   **************************\n");
       printf("                   *                        *\n");
       printf("\t\t   *        2 - LISTA       *\n");
       printf("                   *                        *\n");
       printf("\t\t   **************************\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       imprime();
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n\n     << PRESSIONE QUALQUER TECLA PARA CONTINUAR >>");
       getch();
       break;

 case 3 : clrscr();
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\t\t   **********************************\n");
      printf("                   *                                *\n");
      printf("\t\t   *         2 - EXCLUSAO           *\n");
      printf("                   *                                *\n");
      printf("\t\t   **********************************\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n\t ENTRE COM O NOME A SER EXCLUIDO: ");
      gets(string);
      resultado = exclui(string);
      if(resultado == TRUE)
      {
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n\t\t  %s EXCLUIDO COM SUCESSO\n",string);
       contador--;
      }
      else
      {
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n");
       printf("\n\t ERRO DE EXCLUSAO!\n");
      }
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n\n    << PRESSIONE QUALQUER TECLA PARA CONTINUAR >>");
      getch();
      break;

case 4 :  clrscr();
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\t\t   **********************************\n");
      printf("                   *                                *\n");
      printf("\t\t   *         4 - TAMANHO DA LISTA   *\n");
      printf("                   *                                *\n");
      printf("\t\t   **********************************\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\n");
      printf("\t Tamanho:%d elemento(s)",contador);
      printf("\n");
      printf("\n");
      printf("\n\n    << PRESSIONE QUALQUER TECLA PARA CONTINUAR >>");
      getch();
      break;

   case 5 :exit(1);
  }
 }
}

int insere(char stringnome[50])
{//1
 /* Declaracao de ponteiros */
 /* Aux e PercorreLista apontam para NULL*/
 defLista *Aux;
 defLista *PercorreLista;

 /* Alocacao de memoria para armazenar os registros */
 Aux=(defLista *)malloc(sizeof(defLista)); // Armazena endereco p/ estrutura

 if (Aux==NULL)
 {//2
  return(0);
 }//2
 else
 {//3
  strcpy(Aux->nome,stringnome);
  Aux->elo = NULL;
  if( Lista!=NULL)
  {//4
   if (Primeiro!=NULL)
   {//5
    Aux->elo = Primeiro;
    Lista=Aux;
    PercorreLista=Primeiro;
    if (stricmp(Lista->nome, Primeiro->nome) > 0)
    {//6
     Aux=Primeiro;
     PercorreLista = Primeiro->elo;
     while ((PercorreLista!=NULL) && 

(((stricmp(Lista->nome,PercorreLista->nome)) > 0)))
     {
      Aux=PercorreLista;
      PercorreLista = PercorreLista->elo;
     }
     Lista->elo = PercorreLista;
     Aux->elo = Lista;
    }//6
    else
    {
     Primeiro=Lista;
    }
   }//5
   else
   {
    if (stricmp(Aux->nome, Lista->nome) > 0)
    {
     Lista->elo = Aux;
     Primeiro=Lista;
     Lista=Aux;
    }
    if (stricmp(Aux->nome, Lista->nome) < 0)
    {
     Aux->elo = Lista;
     Lista=Aux;
     Primeiro=Lista;
    }
   }
  }//4
  else
  {
   Lista=Aux;
  }
 }//3
 return(1);
}//1

void imprime()
{//1
 defLista *Aux;

 if (Lista == NULL)
 {
  gotoxy(10,20);
  printf("Erro. Lista Vazia");
 }
 else
 {//13
  if (Primeiro == NULL)
  {
   Aux=Lista;
   printf("%s\n",Aux->nome);
  }
  else
  {
   Lista=Primeiro;
   Aux=Lista;
   while (Aux!=NULL)
   {
    printf("%s\n",Aux->nome);
    Aux = Aux->elo;
   }
  }
 }
}//1

int exclui(char stringnome[50])
{//1
 defLista *Aux;
 defLista *Espelho;
 int comparaChar;

 if(Lista == NULL)
 {//2
  return(0);
 }//2

 else
 {//3
  if (Primeiro == NULL)
  {
   Aux=Lista;
   comparaChar=stricmp(Aux->nome,stringnome);
   if (comparaChar == 0)
   {
    free(Aux);
    Lista=NULL;
    return(1);
   }
   else
   {
    return(0);
   }
  }
  else
  {//12
   Lista=Primeiro;
   Aux=Lista;
   while(Aux!=NULL)
   {//16
    comparaChar=stricmp(Aux->nome,stringnome);
    if (comparaChar == 0)
    {//4
     if (Aux == Primeiro)
     {
      if (Aux->elo == NULL)
      {
       free(Aux);
       Lista=NULL;
       return(1);
      }
      else
      {
       Primeiro = Aux->elo;
       free(Aux);
       return(1);
      }
     }
     else
     {//8
      Espelho->elo = Aux->elo;
      free(Aux);
      return(1);
     }//8
    }//4
    else
    {//5
     Espelho=Aux;
     Aux = Aux->elo;
    }//5

   }//16
  return(0);
  }//12
  return(1);
 }//3

}//1

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Opa!

Cara, dá uma olhada nesse tópico: http://scriptbrasil.com.br/forum/index.php?showtopic=108990. Dê também uma pesquisada em arquivos de acesso aleatório. Com eles você pode guardar dados contidos em uma estutura num arquivo (com fwrite) de modo que, com o auxílio das funções fseek e fread, você pode acessar uma estrutura específica dentre as armazenadas no arquivo.

Veja o exemplo:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct pessoa {
  char nome[ 30 ];
  int  idade;
};

int main(int argc, char *argv[])
{
  FILE *_file;
  int i = 0, n;
  struct pessoa p;
  
  if ( ( _file = fopen( "arq.txt", "w+" ) ) == NULL ) {
        return 0;
  }
  
  while ( i < 5 ) {
    scanf( "%s", p.nome );
    scanf( "%d", &p.idade );
    
    fwrite( &p, sizeof( p ), 1, _file );
    
    i++;
  }
  
  printf( "\n\n----------------\n\n" );
  
  printf( "Digite a ordem do elemento que quer acessar: " );
  scanf( "%d", &n );
  
  fseek( _file, ( n - 1 ) * sizeof( struct pessoa ), SEEK_SET );
  
  fread( &p, sizeof( struct pessoa ), 1, _file );
    
  printf( "Nome: %s;\nIdade: %d.\n\n", p.nome, p.idade );
  
  system("PAUSE");
  return 0;
}

A função fseek somente localiza a posição do registro a ser lido. A leitura é feita com a função fread. O primeiro argumento da função fseek é o ponteiro para a estrutura FILE, o segundo é o número de bytes que se deve percorrer, a partir de uma posição inicial indicada no terceiro argumento, para se chegar à posição do registro desejado no arquivo. A constante SEEK_SET indica que a supramencionada posição inicial deve ser o início do arquivo. SEEK_CUR e SEEK_END são outros valores possíveis, correspondendo às posições atual e final, respectivamente.

Boa sorte!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...