domingo, 18 de maio de 2014

Lendo Arquivo e copiando numa String


Algumas vêzes trabalhando com arquivos, somos obrigados a
copiá-los num vetor de string, para facilitar algumas operações.
Por exemplo: ordenação das string do arquivo, contagem de caracteres, de espaços, vogais, consoantes etc...
Fazer estas operações fica muito fácil quando se obtém uma cópia exata do arquivo em mãos.
E neste código mostro como isto pode ser feito.

Funcionamento básico:

A leitura ocorre normalmente, só que aqui usei um laço for, quebrando quase que uma regra, que na verdade não é, más a maioria prefere usar um laço while(); para esta operação.
No laço for();, se determina a quantidade de linhas que pode ser lida, pela função fgets();, para ser armazenados no vetor de char para string de nome "buffer".
O MODIFICADOR const int TAM = 17;determina a quantidade de caracteres por linha a ser lidos por fegets(); que neste exemplo,17 caracteres por linha foi o suficiente.
A função strcpy(); copia o texto com os nomes que estão no vetor de char "buffer[];", para o vetor de char nome[];
E que são lidos posteriormente por printf(); num laço for.
Código simples e muito útil aos aprendizes de linguagem c.

Veja as imagens do programa em execução;




Veja o código do programa abaixo:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
/*
 Éder Costa 
Caroline Silva
Humberto Gomes
Dijalma Lacerda
Igor Gonçalves
Bruna Carla 
Fábio Quadros
Geany Barros
Jaqueline Vega
Ana Célia
 */
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 ARQUIVO E COPIANDO NUMA STRING");
    textcolor(LIGHTRED);gotoxy(25,3);printf("LENDO ARQUIVO E COPIANDO NUMA STRING");
    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(24,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;
}
const int TAM = 18;
int main(){continuando( );system("cls");Janela5();
char nome [ 10 ] [ TAM ];char buffer [ 10 ] [ TAM ];
int i = 0;FILE *arq;
arq = fopen("C:\\Users\\SAMUEL 64SP1\\Desktop\\Arquivos\\Nomes.txt","r + b");
textcolor(LIGHTRED);gotoxy(25,3);printf("LENDO ARQUIVO E COPIANDO NUMA STRING");
textcolor(LIGHTBLUE);gotoxy(6,5);printf("ARQUIVO TXT");
if(arq != NULL){
    textcolor(WHITE);
    for ( i = 0; i < 10; i++ ) {
        gotoxy(5, i  + 7);
        fgets(*buffer, TAM, arq);
        strcpy( nome [ i ], *buffer);
        printf(" %s ", *buffer );
    }
    fclose(arq);
    getche();
}
else{
    printf("Nao foi possível abrir o arquivo.");
    getche();
}
textcolor(LIGHTBLUE);gotoxy(46,5);printf("CÓPIA DO ARQUIVO ");
textcolor(WHITE);
for(i = 0; i < 10; i++ ){
    gotoxy(45, i  + 7);
    printf(" %s ", nome [ i ] );
}
Sleep(1800);
textcolor(LIGHTRED);gotoxy(35,21);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.