Sie sind auf Seite 1von 4

Stevan Rodrigues Manzan

5396360

1) Execute os dois programas da aula (registros de comprimento fixo e variável). Construa um novo
programa para a leitura de um arquivo de registros de tamanho variável e construção de outro
arquivo com saída formatada para le
leitura em editor de texto. Deve
ser entregue impresso em papel:

(a) informação sobre o tamanho de todos arquivos obtidos depois da simulação

O programa gera 2 arquivos. Um Arquivo que guarda registros de tamanhos variáveis


(“DADOS.dat”) e um arquivo de texto para visualização destes dados ((“LEITURA.txt”).

Como exemplo
mplo foram arma
armazenados alguns dados
dos em ambos os arquivos e obteve
obteve-se os seguintes
tamanhos de arquivos:

DADOS.dat = 323 bytes LEITURA.txt = 743 bytes

Ambos possuem 4KB de espa


espaço em Disco, pois o Disco Rígido no qual estão
o armazenados está
fragmentado em setores de 4KB.

(b) impressão do programa que constrói arquivo .txt

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>

#define PMODE 0755


#define DELIM_STR "|"

#define out_str(fd,s) write((fd),(s),strlen(s)); write((fd),DELIM_STR,1);

// DECLARAÇÃO DAS FUNÇÕES


void escreve_dados( char *filename );
void converte_dados_leitura( char *filename , char *filename2 );

// PROGRAMA PRINCIPAL
int main(){

char filename[15] = "DADOS.dat";


char filename2[15] = "LEITURA.txt";

escreve_dados(filename);
converte_dados_leitura(filename, filename2);

// IMPLEMENTAÇÃO DAS FUNÇÕES

// --- Função que escreve resgistro no arquivo de dados


void escreve_dados( char *filename )
{
char first[30], last[30], address[30], city[20];
char state[15], cep[10];
int fd , tamanho;
char auxstr[4] , tamstr[4];

// Cria arquivo de Dados


if ((fd=creat(filename,PMODE)) < 0) {
printf("file opening erro --- program stopped\n");
exit(1);
}

// Lê dados
printf("\n\nType in last name, or <cr> to exit\n>>>");
gets(last);
while(strlen(last) > 0) {

printf("\nFirst Name:"); gets(first);


printf("Address:"); gets(address);
printf("City:"); gets(city);
printf("State:"); gets(state);
printf("CEP:"); gets(cep);

// Calcula e transforma em String o tamanho do Registro


tamanho = strlen(last) + strlen(first) + strlen(address) + strlen(city);
tamanho = tamanho + strlen(state) + strlen(cep) + 6;
if (tamanho<100) {
tamstr[0] = '0'; tamstr[1] = '\0';
}
_itoa( tamanho , auxstr , 10 );
strcat( tamstr , auxstr );

// Salva o Tamanho do Registro será salvo


write(fd,tamstr,3);
// Salva dados do Registro - Após cada Dado há um caracter Delimitador
out_str(fd,last);
out_str(fd,first);
out_str(fd,address);
out_str(fd,city);
out_str(fd,state);
out_str(fd,cep);

printf("\n\nType in last name, or <cr> to exit\n>>>");


gets(last);
}
close(fd);
}

// ---Função que lê registro do arquivo de dados e imprime no arquivo de Texto


void converte_dados_leitura( char *filename , char *filename2 )
{
char registro[140];
char tamstr[4];
char first[30], last[30], address[30], city[20];
char state[15], cep[10];
int fd , tamanho, total_registros;
FILE *fd2;
char auxstr[4];
char *fim_de_dado, *inicio_de_dado;
// Abre arquivo de Dados
if ((fd=open(filename,O_RDONLY)) < 0) {
printf("file opening erro --- program stopped\n");
exit(1);
}

// Cria arquivo de Texto


if ((fd2=fopen(filename2,"w"))==NULL) { //criar arquivo texto
printf("file opening erro --- program stopped\n");
exit(1);
}

total_registros = 0;
while ( read(fd,tamstr,3) > 0)
{
total_registros++; //Número do Registro
tamanho = atoi(tamstr); //Tamanho do Registro (3 primeiros Caracteres)
read(fd,registro,tamanho); //Lê o registro em uma String
inicio_de_dado = registro;

//Fragmentação da String com o Registro nos Dados

//Sobrenome
fim_de_dado = strstr(inicio_de_dado,DELIM_STR);
*fim_de_dado = '\0';
strcpy(last, inicio_de_dado);

//Nome
inicio_de_dado = fim_de_dado + 1;
fim_de_dado = strstr(inicio_de_dado,DELIM_STR);
*fim_de_dado = '\0';
strcpy(first , inicio_de_dado);

//Endereço
inicio_de_dado = fim_de_dado + 1;
fim_de_dado = strstr(inicio_de_dado,DELIM_STR);
*fim_de_dado = '\0';
strcpy(address , inicio_de_dado);

//Cidade
inicio_de_dado = fim_de_dado + 1;
fim_de_dado = strstr(inicio_de_dado,DELIM_STR);
*fim_de_dado = '\0';
strcpy(city , inicio_de_dado);

//Estado
inicio_de_dado = fim_de_dado + 1;
fim_de_dado = strstr(inicio_de_dado,DELIM_STR);
*fim_de_dado = '\0';
strcpy(state , inicio_de_dado);

//CEP
inicio_de_dado = fim_de_dado + 1;
fim_de_dado = strstr(inicio_de_dado,DELIM_STR);
*fim_de_dado = '\0';
strcpy(cep , inicio_de_dado);

// Escreve no arquivo de Texto


fprintf(fd2,"# REGISTRO NUMERO: %d\n ", total_registros);
fprintf(fd2," - NOME: %s %s\n - ENDERECO: %s\n", first , last , address);
fprintf(fd2," - CIDADE: %s\n - ESTADO: %s\n", city , state);
fprintf(fd2," - CEP: %s\n\n", cep);
}

close(fd);
fclose(fd2);
}
(c) impressão do arquivo .txt da simulação.

DADOS.dat
051Manzan|Stevan|Rua Caboclo, 13|Uberaba|MG|380687000|074Bordignon|Gabriela|Rua
Major Julio Sales, 937, ap7|Sao Carlos|SP|13561010|061Rodrigues|Katia|Rua Delfim
Moreira, 1372|Uberaba|MG|38067000|063Bordignon|Loredania|Rua Salim Chaib, 76|Mogi
Mirim|SP|13800038|059Manzan|Nilson|Av. Elias Cruvinel, 1400|Uberaba|MG|38060100|

LEITURA.txt

# REGISTRO NUMERO: 1
- NOME: Stevan Manzan
- ENDERECO: Rua Caboclo, 13
- CIDADE: Uberaba
- ESTADO: MG
- CEP: 380687000

# REGISTRO NUMERO: 2
- NOME: Gabriela Bordignon
- ENDERECO: Rua Major Julio Sales, 937, ap7
- CIDADE: Sao Carlos
- ESTADO: SP
- CEP: 13561010

# REGISTRO NUMERO: 3
- NOME: Katia Rodrigues
- ENDERECO: Rua Delfim Moreira, 1372
- CIDADE: Uberaba
- ESTADO: MG
- CEP: 38067000

# REGISTRO NUMERO: 4
- NOME: Loredania Bordignon
- ENDERECO: Rua Salim Chaib, 76
- CIDADE: Mogi Mirim
- ESTADO: SP
- CEP: 13800038

# REGISTRO NUMERO: 5
- NOME: Nilson Manzan
- ENDERECO: Av. Elias Cruvinel, 1400
- CIDADE: Uberaba
- ESTADO: MG
- CEP: 38060100

Das könnte Ihnen auch gefallen