segunda-feira, 12 de janeiro de 2015

Arquivo - extraindo linhas para leitura

Apesar de está sem tempo para programar, resolvi
criar este código onde mostro como imprimir determinadas
quantidades de linhas de um arquivo aleatoriamente,
isto mesmo, você escolhe
de onde quer que seja feita a leitura do arquivo, o programa
ainda exige que o total de linhas que serão lidas seja um múltiplo
da quantidade de cada vez imprimida, fazendo isto automaticamente,
más colocando uma mensagem para o usuário.
Foi usado como texto no arquivo, o hino nacional brasileiro.

Veja imagens do programa em execução:






Veja abaixo o código do programa:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define SI_ZE 70
#define re_al  real
void Janela5(){
    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 ( ){
    system ("title ARQUIVO - EXTRAINDO LINHAS PARA LEITURA");
    int nr; do{system("cls");Janela5();
    textcolor(LIGHTRED);gotoxy(25,5);    printf("ARQUIVO - EXTRAINDO LINHAS PARA LEITURA");
    textcolor(BROWN);gotoxy(25,7);printf("Programa desenvolvido por:");
    textcolor(WHITE);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 Veri_fica_mult( int ini, int fim, int pause, int real ){
    system("cls");Janela5();
    textcolor(LIGHTRED);gotoxy(25,3);
    printf("ARQUIVO - EXTRAINDO LINHAS PARA LEITURA");
    printf ("\n\n");
    int i, a = 0;
    for ( i = ini; i <= real; i++ )
        if ( ! ( i % pause ) ){
            a = i;
        }
        else{
            if ( ! ( i % real ) ){
                textcolor(LIGHTBLUE);gotoxy(7,5);printf("O número ");
                textcolor(LIGHTRED);printf(" %d ", real );
                textcolor(LIGHTBLUE);printf("não é um múltiplo de ");
                textcolor(LIGHTRED);printf(" %d ", pause );
                textcolor(LIGHTBLUE);gotoxy(7,6);printf("Usaremos o próximo múltiplo de ");
                textcolor(LIGHTRED);printf(" %d ", pause );
                textcolor(LIGHTBLUE);gotoxy(7,7);printf("depois de ");
                textcolor(LIGHTRED);printf(" %d ", real );
                textcolor(LIGHTBLUE);printf("que é ");
                textcolor(LIGHTRED);printf(" %d ", a + pause );
                getche();return( a + pause );
            }
        }
    return pause;
}
int main(){continuando ( );
FILE *file;
file = fopen("C:\\Users\\Lima 32 SP1\\Desktop\\Arquivos\\HINO NACIONAL BRASILEIRO.txt","r+b");
if ( !file ){
    printf("Houve um erro na abertura do arquivo\n");
    getche();
    return 0;
}
char **line;
line  = ( char** ) malloc ( SI_ZE *sizeof ( char* ) );
int c = 0, i, ini, fim, pause, real, j;
system("cls");Janela5();
textcolor(LIGHTRED);gotoxy(25,3);
printf("ARQUIVO - EXTRAINDO LINHAS PARA LEITURA");
textcolor(LIGHTBLUE);gotoxy(7,5);
printf("Digite a posição para inicio da extração : ");
textcolor(LIGHTRED);scanf ("%d", &ini );fflush ( stdin );
while (ini < 0 || ini > 60 ){
    textcolor(LIGHTBLUE);gotoxy(25,7);printf("\aO Número inicial não Pode Ser Negativo");
    textcolor(LIGHTBLUE);gotoxy(25,8);printf("Nem Maior que 60 ");Sleep(1000);
    gotoxy(25,10);textcolor(AMARELO);printf("PRESSIONE QUALQUER TECLA");
    getche();system ("cls");main( );
}
textcolor(LIGHTBLUE);gotoxy(7,7);
printf("Digite o total de linhas a correr : ");
textcolor(LIGHTRED);scanf ("%d", &pause );fflush ( stdin );
while (pause < 2 || pause > 10 ){
    textcolor(LIGHTBLUE);gotoxy(25,9);printf("\aO Número de pausa tem que Ser");
    textcolor(LIGHTBLUE);gotoxy(25,10);printf("Acima de 2 e menor que 10");Sleep(1000);
    gotoxy(25,12);textcolor(AMARELO);printf("PRESSIONE QUALQUER TECLA");
    getche();system ("cls");main( );
}
textcolor(LIGHTBLUE);gotoxy(7,9);
printf("Digite a posição para o fim da extração : ");
textcolor(LIGHTRED);scanf ("%d", &fim );fflush ( stdin );
while ( fim < ini + 10 || fim > SI_ZE ){
    textcolor(LIGHTBLUE);gotoxy(7,11);
    printf("\aO Número final tem que ter no mínimo 10 linhas a mais que o inicial");
    textcolor(LIGHTBLUE);gotoxy(7,12);printf("e tem que ser menor que %d", SI_ZE );Sleep(1000);
    gotoxy(25,14);textcolor(AMARELO);printf("PRESSIONE QUALQUER TECLA");
    getche();system ("cls");main( );
}
real = ( fim - ini );
textcolor(LIGHTBLUE);gotoxy(7,11);
printf("Você está extraindo ");
textcolor(LIGHTRED);printf(" %d ", re_al);
textcolor(LIGHTBLUE);printf(" Linhas do arquivo " );
Sleep(1000);textcolor(LIGHTRED);
gotoxy(30,23);printf("PRESSIONE QUALQUER TECLA");getche();
j = Veri_fica_mult( ini, fim, pause, real );
for ( i = 0; i <= fim + 1; i++ ) {
    line [ i ] = ( char* ) malloc ( SI_ZE *sizeof ( char* ) );
    fgets ( line [ i ], 160, file );
}system ("cls");Janela5();
textcolor(LIGHTRED);gotoxy(25,3);
printf("ARQUIVO - EXTRAINDO LINHAS PARA LEITURA");
textcolor(LIGHTBLUE);gotoxy(25,5);
printf("Imprimindo abaixo as linhas extraídas");
do{
    printf("\n\n");
    for ( i = ini; i < pause + ini; i++ ){
        c = i;
        textcolor(LIGHTRED);
        printf(" %d", c + 1 );
        textcolor(LIGHTBLUE);
        printf ("  %s",line [ i ] );
    }getche();
    ini = ini + pause;
}while ( ( i <= ( j + 1 ) || i <= ( fim + 1 ) - pause ) );
fclose(file);
free( line );
textcolor(LIGHTRED);gotoxy(37,23);printf("MUITO OBRIGADO");
getche();
return 0;
}

Nenhum comentário:

Postar um comentário

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