domingo, 25 de maio de 2014

Lendo uma linha específica num Arquivo


Já vi muitos iniciantes em linguagem c perguntando como fazer
pra se ler uma determinada linha em um arquivo de texto, por isso criei este simples código pra ensinar na prática como isto pode ser feito.

O programa começa chamando a função  continuando();
que contém poucas informações sobre o autor do código que sou eu mesmo, e dando duas opções, que é sair ou continuar usando respectivamente 0 ou 1.
Na continuação, o programa imprime todos os nomes contidos no arquivo de texto que são estes abaixo:

Éder Costa  
Humberto Gomes
Dijalma Lacerda
Caroline Silva
Igor Gonçalves
Bruna Carla  
Fábio Quadros
Geany Barros
Jaqueline Vega
Ana Célia

Salve com o nome de Nomes.txt, pra testar o programa.
Após pressionada qualquer tecla o programa pede pra que se escolha um número entre 1 e 9, e indicando o -1 como saída.
Está mais que claro que se for digitado um número acima de 9, será rejeitado, porque a entrada é seletiva.
Ótimo programa para os amantes em linguagem c.

Veja abaixo algumas imagens do programa em execução:







Veja abaixo este excelente código:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void Janela5 ( ) {
     int lin, col;
     for ( lin = 0; lin <= 25 ; lin++ ) {
         for ( col = 0; col <= 80 ; col++ ) {
              gotoxy ( col , lin );
              if ( lin == 2 ) {
                   textbackground ( LIGHTBLUE );
                   printf ( " " );
              }
              if ( col == 1 ) {
                   textbackground ( LIGHTBLUE );
                   printf ( " " );
              }
              if ( lin == 25 ) {
                   textbackground ( LIGHTBLUE );
              }
              if ( col == 80 ) {
                   textbackground ( LIGHTBLUE );
                   printf ( " " );
              }
         }
     }
     textbackground ( BLACK );
}
int continuando ( ) {
     int nr;
     do {
         system ( "cls" );
         Janela5 ( );
         system ( "title LENDO UMA LINHA ESPECÍFICA NUM ARQUIVO" );
         textcolor ( LIGHTRED );
         gotoxy ( 23 , 3 );
         printf ( "LENDO UMA LINHA ESPECÍFICA NUM ARQUIVO" );
         textcolor ( YELLOW );
         gotoxy ( 24 , 5 );
         printf ( "Programa desenvolvido por:" );
         textcolor ( LIGHTGRAY );
         gotoxy ( 51 , 5 );
         printf ( "Samuel Lima" );
         textcolor ( LIGHTGREEN );
         gotoxy ( 34 , 7 );
         printf ( "sa_sp10@hotmail.com" );
         textcolor ( LIGHTBLUE );
         gotoxy ( 23 , 9 );
         printf ( "Digite 0 para sair ou 1 para continuar : " );
         textcolor ( LIGHTRED );
         scanf ( "%d" , &nr );
         fflush ( stdin );
         fflush ( stdin );
         if ( nr == 0 ) {
              textcolor ( LIGHTRED );
              gotoxy ( 35 , 21 );
              printf ( "MUITO OBRIGADO" );
              getche ( );
              exit ( 0 );
         } else if ( nr == 1 ) {
              return 1;
         }
         textcolor ( YELLOW );
         gotoxy ( 36 , 16 );
         printf ( "\aopção errada!" );
         getche ( );
     } while ( 1 );
     return 1;
}
int main ( ) {
     FILE *arq;
     int i = 0, num;
     char **nomes;
     if ( ( arq = fopen ( "Nomes.txt" , "rb" ) ) == NULL ) {
         printf ( "Houve um erro na abertura do arquivo" );
         getche ( );
         exit ( 1 );
     }
     nomes = ( char** ) malloc ( 80 * sizeof(char*) );
     continuando ( );
     system ( "cls" );
     Janela5 ( );
     textcolor ( LIGHTRED );
     gotoxy ( 23 , 3 );
     printf ( "LENDO UMA LINHA ESPECÍFICA NUM ARQUIVO" );
     textcolor ( LIGHTBLUE );
     gotoxy ( 20 , 5 );
     printf ( "Lendo Primeiro o Arquivo com todos os Nomes" );
     while ( feof ( arq ) == 0 ) {
         nomes [ i ] = ( char* ) malloc ( 80 * sizeof(char) );
         fgets ( nomes [ i ] , 80 , arq );
         ++i;
     }
     textcolor ( YELLOW );
     for ( i = 0; i < 10 ; i++ ) {
         gotoxy ( 5 , i + 7 );
         printf ( " %s " , nomes [ i ] );
     }
     Sleep ( 1000 );
     textcolor ( LIGHTRED );
     gotoxy ( 32 , 22 );
     printf ( "PRESSIONE QUALQUER TECLA" );
     getche ( );
     do {
         system ( "cls" );
         Janela5 ( );
         textcolor ( LIGHTRED );
         gotoxy ( 23 , 3 );
         printf ( "LENDO UMA LINHA ESPECÍFICA NUM ARQUIVO" );
         textcolor ( LIGHTBLUE );
         gotoxy ( 15 , 5 );
         printf ( "Escolha um número entre [ 1 e 9 ] ou [ -1 Para Sair ]  " );
         textcolor ( LIGHTRED );
         scanf ( "%d" , &num );
         fflush ( stdin );
         if ( num < -1 || num > 9 ) {
              textcolor ( LIGHTRED );
              gotoxy ( 25 , 10 );
              printf ( "\aNúmero Acima de 0 e menor que 10" );
              getche ( );
              continue;
         }
         if ( num == -1 ) {
              textcolor ( LIGHTRED );
              gotoxy ( 35 , 21 );
              printf ( "MUITO OBRIGADO" );
              Sleep ( 1800 );
              exit ( 0 );
         }
         while ( feof ( arq ) == 0 ) {
              nomes [ i ] = ( char* ) malloc ( 80 * sizeof(char) );
              fgets ( nomes [ i ] , 80 , arq );
              ++i;
         }
         gotoxy ( 35 , num + 7 );
         printf ( " %s " , nomes [ num ] );
         Sleep ( 1000 );
         textcolor ( LIGHTGREEN );
         gotoxy ( 32 , 22 );
         printf ( "PRESSIONE QUALQUER TECLA" );
         getche ( );
     } while ( 1 );
     return ( 0 );
}

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.