quinta-feira, 2 de junho de 2016

Arquivo - copiando conteúdo

Neste post mostro um bom exemplo de como copiar o conteúdo de um arquivo em outro,
coisa muito fácil de fazer e entender para os que tem envolvimento com Linguagem C.
Isto pode ser feito em poucas linhas de código, más como gosto das coisas bem
organizadas, criei funções para deixar tudo  mais claro.
Breve descrição:
A função int Abre_Arq_Um ( ); abre um arquivo existente contendo alguns nomes de
pessoas e imprime no vídeo, onde usei as funções mais usadas para isto.
A função  int Abre_Arq_Dois ( ); abre um arquivo vazio criado previamente por mim
e não pelo programa, a causa é só para mostrar que o arquivo está mesmo vazio
antes de receber a cópia.
A função int Abre_E_Copia ( ); abre o arquivo principal novamente, aqui criamos dois
ponteiros para arquivo e um vetor de char para armazenamento das string do arquivo principal.
Temos um laço while(); que varre os arquivos enquanto fputs(); faz a cópia dos dados
que estão no vetor de char para o arquivo II, vindo então o fechamento dos dois arquivos.
Quero que entenda que não cabe a mim detalhar o funcionamento dos comandos usados
por este programa, isto fica a cargo dos interessados pelo código.


Veja abaixo uma imagem do programa em execução:




Veja abaixo o código do programa:



 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void got_color ( int tam_lin_ini, int tam_lin_fim, int tam_ini_col,
         int tam_fim_col, int a, int b ) {
     int i, c;
     if ( a >= 1 && a <= 16 ) {
         textcolor ( a );
     }
     if ( b >= 1 && b <= 16 ) {
         textbackground ( b );
     }
     for ( i = tam_lin_ini; i < tam_lin_fim; i++ ) {
         for ( c = tam_ini_col; c < tam_fim_col; c++ ) {
              gotoxy ( c, i );
              printf ( " " );
         }
     }
}
int Abre_Arq_Um ( ) {
     textcolor ( LIGHTRED );
     gotoxy ( 28, 3 );
     printf ( "ARQUIVO - COPIANDO CONTEÚDO" );
     textcolor ( LIGHTBLUE );
     gotoxy ( 8, 7 );
     printf ( "Arquivo I" );
     char nome [ 11 ] [ 17 ] = { 0 };
     int i = 0;
     FILE *arq;
     if ( ( arq = fopen ( "C:\\Users\\SAMUEL 64SP1\\Desktop\\"
              "Arquivos\\Nomes.txt", "r" ) ) == NULL ) {
         gotoxy ( 20, 7 );
         printf ( "Houve um erro na abertura do arquivo" );
         getche ( );
         exit ( 1 );
     }
     while ( feof ( arq ) == 0 ) {
         fgets ( nome [ i ], 20, arq );
         ++i;
     }
     fclose ( arq );
     textcolor ( BLACK );
     for ( i = 0; i < 10; i++ ) {
         gotoxy ( 5, i + 9 );
         printf ( "%s", nome [ i ] );
     }
     Sleep ( 1800 );
     textcolor ( LIGHTRED );
     gotoxy ( 30, 23 );
     printf ( "PRESSIONE QUALQUER TECLA" );
     getche ( );
     return ( 0 );
}
int Abre_Arq_Dois ( ) {
     textcolor ( LIGHTBLUE );
     gotoxy ( 28, 5 );
     printf ( "Abaixo a leitura do arquivo" );
     char nome [ 11 ] [ 17 ] = { 0 };
     int i = 0;
     FILE *arq;
     if ( ( arq = fopen ( "C:\\Users\\SAMUEL 64SP1\\Desktop\\"
              "Arquivos\\No_m_es.txt", "r" ) ) == NULL ) {
         gotoxy ( 20, 7 );
         printf ( "Houve um erro na abertura do arquivo" );
         getche ( );
         exit ( 1 );
     }
     while ( feof ( arq ) == 0 ) {
         fgets ( nome [ i ], 20, arq );
         ++i;
     }
     int len = strlen ( *nome );
     if ( len == 0 ) {
         gotoxy ( 28, 7 );
         printf ( "Arquivo II vazio" );
     }
     if ( len != 0 ) {
         gotoxy ( 54, 7 );
         printf ( "Cópia do I mo II" );
     }
     fclose ( arq );
     textcolor ( BLACK );
     for ( i = 0; i < 10; i++ ) {
         gotoxy ( 55, i + 9 );
         printf ( "%s", nome [ i ] );
     }
     Sleep ( 1800 );
     textcolor ( LIGHTRED );
     gotoxy ( 30, 23 );
     printf ( "PRESSIONE QUALQUER TECLA" );
     getche ( );
     return ( 0 );
}
int Abre_E_Copia ( ) {
     FILE *arq, *ar_q;
     char Arq [ 256 ];
     if ( ( arq = fopen ( "C:\\Users\\SAMUEL 64SP1\\Desktop\\"
              "Arquivos\\Nomes.txt", "r" ) ) == NULL ) {
         gotoxy ( 20, 7 );
         printf ( "Houve um erro na abertura do arquivo" );
         getche ( );
         exit ( 0 );
     } else if ( ( ar_q = fopen ( "C:\\Users\\SAMUEL 64SP1\\Desktop\\"
              "Arquivos\\No_m_es.txt", "w" ) ) == NULL ) {
         gotoxy ( 20, 7 );
         printf ( "Houve um erro na criação do arquivo" );
         getche ( );
     } else {
         while ( fgets ( Arq, sizeof ( Arq ), arq ) )
              fputs ( Arq, ar_q );
         fclose ( arq );
         fclose ( ar_q );
     }
     return 0;
}
int main ( ) {
     system ( "title ARQUIVO - COPIANDO CONTEÚDO" );
     system ( "Color D7" );
     got_color ( 2, 25, 3, 79, 2, 15 );
     Abre_Arq_Um ( );
     Abre_Arq_Dois ( );
     Abre_E_Copia ( );
     Abre_Arq_Dois ( );
     gotoxy ( 30, 23 );
     clreol ( );
     Sleep ( 1800 );
     textbackground ( WHITE );
     textcolor ( LIGHTBLUE );
     gotoxy ( 21, 19 );
     printf ( "Por: " );
     textcolor ( LIGHTMAGENTA );
     printf ( "Samuel Lima" );
     textcolor ( BLACK );
     gotoxy ( 21, 20 );
     printf ( "sa_sp10@hotmail.com" );
     Sleep ( 1800 );
     textcolor ( LIGHTRED );
     gotoxy ( 36, 23 );
     printf ( "MUITO OBRIGADO" );
     getche ( );
     exit ( 0 );
}




Nenhum comentário:

Postar um comentário

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