sexta-feira, 5 de dezembro de 2014

Pesquisando string em arquivo III


Este já é o terceiro programa onde mostro como pesquisar string dentro de um arquivo, nos outros dois programas antes deste eu usei a função strstr();
da biblioteca string.h, más neste, onde considero mais evoluído as comparações são feitas no braço sem funções padrão e o resultado foi muito bom, teste este ótimo código indicado a estudantes em linguagem C.

Veja abaixo imagens do programa em execução:






Veja abaixo o código do programa:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define lin 15
const int TAM = 52;
void Janela5 ( ) {
     system ( "title PESQUISANDO STRING EM ARQUIVO III" );
     int l, c;
     system ( "Color F0" );
     for ( l = 0; l <= 25 ; l++ ) {
         for ( c = 0; c <= 80 ; c++ ) {
              gotoxy ( c , l );
              if ( l == 2 ) {
                   textbackground ( LIGHTGRAY );
                   printf ( " " );
              }
              if ( c == 1 ) {
                   textbackground ( LIGHTGRAY );
                   printf ( " " );
              }
              if ( l == 25 ) {
                   textbackground ( LIGHTGRAY );
              }
              if ( c == 80 ) {
                   textbackground ( LIGHTGRAY );
                   printf ( " " );
              }
         }
     }
     textbackground ( LIGHTGRAY );
}
int continuando ( ) {
     int nr;
     do {
         system ( "cls" );
         Janela5 ( );
         textbackground ( WHITE );
         textcolor ( LIGHTRED );
         gotoxy ( 27 , 5 );
         printf ( "PESQUISANDO STRING EM ARQUIVO III" );
         textcolor ( BROWN );
         gotoxy ( 25 , 7 );
         printf ( "Programa desenvolvido por:" );
         textcolor ( BLACK );
         gotoxy ( 52 , 7 );
         printf ( "Samuel Lima" );
         textcolor ( BLUE );
         gotoxy ( 34 , 9 );
         printf ( "sa_sp10@hotmail.com" );
         textcolor ( LIGHTBLUE );
         gotoxy ( 24 , 11 );
         printf ( "Digite 0 para sair ou 1 para continuar " );
         textcolor ( LIGHTRED );
         scanf ( "%d" , &nr );
         fflush ( stdin );
         fflush ( stdin );
         if ( nr == 0 ) {
              textcolor ( LIGHTRED );
              gotoxy ( 36 , 18 );
              printf ( "MUITO OBRIGADO" );
              getche ( );
              exit ( 0 );
         } else if ( nr == 1 ) {
              return 1;
         }
         textcolor ( YELLOW );
         gotoxy ( 36 , 16 );
         printf ( "\aopcão errada!" );
         getche ( );
     } while ( 1 );
     return 1;
}
int Pesq_Str ( char **str , char busca [ 20 ] ) {
     int cop = 0, i, j, k;
     system ( "cls" );
     Janela5 ( );
     textcolor ( LIGHTRED );
     gotoxy ( 25 , 3 );
     printf ( "PESQUISANDO STRING EM ARQUIVO III" );
     textcolor ( LIGHTBLUE );
     gotoxy ( 25 , 5 );
     printf ( "Digite uma string para pesquisar : " );
     textcolor ( LIGHTRED );
     gotoxy ( 62 , 5 );
     scanf ( "%20[^\n]s" , busca );
     fflush ( stdin );
     for ( i = 0; i < lin ; i++ ) {
         for ( j = 0; j < TAM ; j++ ) {
              k = 0;
              while ( str [ i ] [ j + k ] == busca [ k ] && busca [ k ] != '\0'
                        && str [ i ] [ j + k ] != '\0' ) {
                   k++;
                   if ( busca [ k ] == '\0' ) {
                        gotoxy ( 15 , cop + 7 );
                        textcolor ( LIGHTBLUE );
                        printf ( "A string " );
                        textcolor ( LIGHTRED );
                        printf ( "%s" , busca );
                        textcolor ( LIGHTBLUE );
                        printf ( " foi encontrada na linha " );
                        textcolor ( LIGHTRED );
                        printf ( "%d" , i );
                        textcolor ( LIGHTBLUE );
                        printf ( " e coluna " );
                        textcolor ( LIGHTRED );
                        printf ( "%d " , j );
                        getche ( );
                        cop++;
                   }
              }
         }
     }
     return ( cop );
}
int main ( ) {
     continuando ( );
     FILE *arq;
     char **str;
     char busca [ 20 ] = { '\0' };
     unsigned int i = 0, n;
     arq = fopen ( "Arquivo.bin" , "rb" );
     str = ( char** ) malloc ( TAM * sizeof(char*) );
     if ( arq != NULL ) {
         while ( feof ( arq ) == 0 ) {
              str [ i ] = ( char* ) malloc ( TAM * sizeof(char) );
              fgets ( str [ i ] , TAM , arq );
              i++;
         }
         fclose ( arq );
     } else {
         textcolor ( YELLOW );
         gotoxy ( 24 , 12 );
         printf ( "Não foi possível abrir o arquivo." );
         getche ( );
         exit ( 0 );
     }
     system ( "cls" );
     Janela5 ( );
     textcolor ( LIGHTRED );
     gotoxy ( 26 , 3 );
     printf ( "PESQUISANDO STRING EM ARQUIVO III" );
     textcolor ( LIGHTBLUE );
     gotoxy ( 21 , 5 );
     printf ( "Veja abaixo a leitura do arquivo de texto" );
     for ( i = 0; i < lin ; i++ ) {
         gotoxy ( 23 , i + 7 );
         textcolor ( BLACK );
         printf ( " %s " , str [ i ] );
     }
     Sleep ( 1000 );
     textcolor ( LIGHTRED );
     gotoxy ( 30 , 23 );
     printf ( "PRESSIONE QUALQUER TECLA" );
     getche ( );
     n = Pesq_Str ( str , busca );
     textcolor ( LIGHTBLUE );
     gotoxy ( 24 , 14 );
     printf ( "A string" );
     textcolor ( LIGHTRED );
     printf ( " %s" , busca );
     textcolor ( LIGHTBLUE );
     printf ( " ocorre " );
     textcolor ( LIGHTRED );
     printf ( "%d" , n );
     textcolor ( LIGHTBLUE );
     printf ( " vêzes" );
     if ( n == 0 ) {
         textcolor ( LIGHTBLUE );
         gotoxy ( 24 , 16 );
         printf ( "Esta palavra não existe na matriz " );
         Sleep ( 1000 );
         textcolor ( LIGHTRED );
         gotoxy ( 30 , 23 );
         printf ( "PRESSIONE QUALQUER TECLA" );
         getche ( );
         main ( );
     }
     if ( n >= 1 && n <= 15 ) {
         textcolor ( LIGHTBLUE );
         gotoxy ( 24 , 16 );
         printf ( "Esta palavra existe na matriz " );
         Sleep ( 1000 );
         textcolor ( LIGHTRED );
         gotoxy ( 30 , 23 );
         printf ( "PRESSIONE QUALQUER TECLA" );
         getche ( );
         main ( );
     }
     getche ( );
     return ( 0 );
}