Para criar este programa utilizei pelo menos cinco funções e duas macros
fundamentais para o bom desempenho, que foram as funções:
fseek(); Para posicionar o ponteiro de arquivo num byte específico
fscanf(); É para o arquivo o que scanf é para o console
putc(); Escreve um caracter em um arquivo
fgets(); pega uma linha inteira de um arquivo
feof();retorna verdadeiro se o final de arquivo foi atingido;
E as macros: SEEK_SET, SEEK_CUR.
Estas funções e estas macros estão no arquivo de cabeçalho stdio.h.
Estas macros trabalham como parâmetros na função fseek(); e são
perfeitas para posicionamentos, isto é, acesso aleatórios de dados.
SEEK_SET ==> Marca um início no arquivo
SEEK_CUR ==> Ponto corrente no arquivo
SEEK_END ==> Não foi utilizado neste programa,
marca o fim do arquivo.
A lógica para posicionar a leitura no início dos nomes das candidatas
foi um pouco confusa, note que estes nomes começam na linha seis do arquivo,
que começa em zero ( 0 ) e segue até a linha quinze ( 15 ).
Então, calculei o tamanho do arquivo e a posição de início dos nomes
como já citei acima, e coloquei como condição dentro de um laço while();
A cada ciclo do while(); a variável de controle é incrementada e um novo
valor é adicionado, este valor, corresponde ao total de caracteres de cada linha
contando com espaços, que obviamente o ciclo pula para a linha mais abaixo,
até que o arquivo chegue em sua última linha.
Más isto tudo foi porque teimei em fazer esta leitura da coluna dos nomes com fscanf();
Com fgets(); isto teria sido bem mais simples.
Um novo arquivo é criado, e recebe escritas dos caracteres dos nomes
com a função putc(); agora o arquivo é fechado e aberto novamente como leitura.
Esta foi uma breve descrição do funcionamento deste programa, que é indicado
a estudantes mais avançados em c.
Veja abaixo imagens do programa em execução:
Veja abaixo o código do programa:
fundamentais para o bom desempenho, que foram as funções:
fseek(); Para posicionar o ponteiro de arquivo num byte específico
fscanf(); É para o arquivo o que scanf é para o console
putc(); Escreve um caracter em um arquivo
fgets(); pega uma linha inteira de um arquivo
feof();retorna verdadeiro se o final de arquivo foi atingido;
E as macros: SEEK_SET, SEEK_CUR.
Estas funções e estas macros estão no arquivo de cabeçalho stdio.h.
Estas macros trabalham como parâmetros na função fseek(); e são
perfeitas para posicionamentos, isto é, acesso aleatórios de dados.
SEEK_SET ==> Marca um início no arquivo
SEEK_CUR ==> Ponto corrente no arquivo
SEEK_END ==> Não foi utilizado neste programa,
marca o fim do arquivo.
A lógica para posicionar a leitura no início dos nomes das candidatas
foi um pouco confusa, note que estes nomes começam na linha seis do arquivo,
que começa em zero ( 0 ) e segue até a linha quinze ( 15 ).
Então, calculei o tamanho do arquivo e a posição de início dos nomes
como já citei acima, e coloquei como condição dentro de um laço while();
A cada ciclo do while(); a variável de controle é incrementada e um novo
valor é adicionado, este valor, corresponde ao total de caracteres de cada linha
contando com espaços, que obviamente o ciclo pula para a linha mais abaixo,
até que o arquivo chegue em sua última linha.
Más isto tudo foi porque teimei em fazer esta leitura da coluna dos nomes com fscanf();
Com fgets(); isto teria sido bem mais simples.
Um novo arquivo é criado, e recebe escritas dos caracteres dos nomes
com a função putc(); agora o arquivo é fechado e aberto novamente como leitura.
Esta foi uma breve descrição do funcionamento deste programa, que é indicado
a estudantes mais avançados em c.
Veja abaixo imagens do programa em execução:
Veja abaixo o código do programa:
#include <conio.h>
#include <stdio.h>
void Janela ( ) {
int lin, col;
for ( lin = 1; lin <= 26 ; lin++ ) {
for ( col = 1; col <= 80 ; col++ ) {
gotoxy ( col , lin );
if ( lin == 2 ) {
textattr ( 200 );
printf ( " " );
}
if ( col == 1 ) {
textattr ( 200 );
printf ( " " );
}
if ( col == 80 ) {
textattr ( 200 );
printf ( " " );
}
}
}
}
void Moldura ( int a , int c , int b , int d , int e , int f ) {
textbackground ( WHITE );
for ( a = e; a <= c ; a++ )
for ( b = f; b <= d ; b++ ) {
gotoxy ( b , a );
textbackground ( WHITE );
printf ( " " );
}
}
int main ( ) {
system ( "title ARQUIVO
- EXTRAINDO E SALVANDO COLUNA" );
char *vet;
vet = ( char* ) malloc ( 100 * sizeof(char) );
char nomes [ 11 ] [ 17 ];
int i, j, l, r = 165;
FILE *fp;
if ( ( fp = fopen (
"C:\\Users\\Lima
32 SP1\\Desktop\\Arquivos\\arquivo.txt" , "w" ) )
== NULL ) {
printf ( "Houve um erro
na abertura do arquivo" );
getche ( );
exit ( 1 );
}
FILE *arq;
if ( ( arq =
fopen (
"C:\\Users\\Lima
32 SP1\\Desktop\\Arquivos\\Concurso Belas da informática.txt" ,
"r" ) ) == NULL ) {
printf ( "Houve um erro
na abertura do arquivo" );
getche ( );
exit ( 1 );
}
textcolor ( LIGHTRED );
gotoxy ( 23 , 4 );
printf ( "ARQUIVO -
EXTRAINDO E SALVANDO COLUNA" );
textbackground ( BLACK );
textcolor ( WHITE );
gotoxy ( 1 , 6 );
for ( i = 0; i < 17 ; i++ ) {
fseek ( arq , 0 , SEEK_CUR );
for ( j = 1; j < 51 ; j++ ) {
fscanf ( arq , "%c" , &nomes [ i ] [ j ] );
printf ( "%c" , nomes [ i ] [ j ] );
}
}
textcolor ( LIGHTRED );
gotoxy ( 31 , 23 );
printf ( "PRESSIONE
QUALQUER TECLA" );
Janela ( );
getche ( );
system ( "cls" );
Moldura ( 2 , 24 , 2 , 78 , 2 , 3 );
i = 0;
r = 165;
l = 15;
textcolor ( LIGHTRED );
gotoxy ( 23 , 4 );
printf ( "ARQUIVO -
EXTRAINDO E SALVANDO COLUNA" );
textcolor ( LIGHTBLUE );
gotoxy ( 11 , 6 );
printf ( "COLUNA
EXTRAIDA" );
textcolor ( BLACK );
gotoxy ( 10 , 8 );
while ( r < 844 ) {
r = r + 65;
fseek ( arq , r , SEEK_SET );
for ( j = 0; j < 17 ; j++ ) {
fscanf ( arq , "%c" , &vet [ i ] );
printf ( "%c" , vet [ i ] );
putc ( vet [ i ] , fp );
}
gotoxy ( 10 , l - 6 );
l++;
}
fclose ( fp );
Sleep ( 1800 );
if ( ( fp = fopen (
"C:\\Users\\Lima
32 SP1\\Desktop\\Arquivos\\arquivo.txt" , "r" ) )
== NULL ) {
printf ( "Houve um erro
na abertura do arquivo" );
getche ( );
exit ( 1 );
}
while ( feof ( fp ) == 0 ) {
fgets ( nomes [ i ] , 200 , fp );
++i;
}
fclose ( fp );
textcolor ( LIGHTBLUE );
gotoxy ( 47 , 6 );
printf ( "COLUNA
SALVA" );
textcolor ( BLACK );
for ( i = 0; i < 11 ; i++ ) {
gotoxy ( 45 , i + 8 );
for ( j = 0; j < 16 ; j++ ) {
printf ( "%c" , nomes [ i ] [ j ] );
}
}
Sleep ( 1800 );
textcolor ( LIGHTBLUE );
gotoxy ( 17 , 19 );
printf ( "Por: " );
textcolor ( LIGHTMAGENTA );
printf ( "Samuel
Lima" );
textcolor ( BLACK );
gotoxy ( 17 , 21 );
printf ( "sa_sp10@hotmail.com" );
Sleep ( 1800 );
textcolor ( LIGHTRED );
gotoxy ( 36 , 23 );
printf ( "MUITO
OBRIGADO" );
getch ( );
exit ( 0 );
getche ( );
free ( vet );
return 0;
}
Nenhum comentário:
Postar um comentário
Observação: somente um membro deste blog pode postar um comentário.