Ir ao conteúdo

Posts recomendados

Postado

Preciso desenvolver um programa chamado FORMARQ em linguagem C, cujo objetivo é converter tipos de arquivo, isto é, um arquivo é lido, e é gerado um segundo arquivo, cujo conteúdo é função do conteúdo do primeiro, mas em outro formato. O FORMARQ deverá dar suporte a 3 tipos de conversão:

TIPO: NOME: DESCRIÇÃO:

1 Invert CN = ~CV (Caracter novo é o complemento de um do caracter velho)

2 Cript O usuário fornece uma palavra para funcionar como chave, isto é, o código ASCII de cada caracter da chave é máscara para uma operação XOR (ou exclusivo) com o byte lido do arquivo lido. Por exemplo:

Conteúdo do arquivo de entrada: BOM DIA, PESSOAL.

Chave: GAVETA.

Arquivo de saída:

´B´ ^ ´G´,

´O´ ^ ´A´,

´M´ ^ ´V´,

´ ´ ^ ´E´,

´D´ ^ ´T´,

´I´ ^ ´A´,

´A´ ^ ´G´, (volta ao 1º caracter da chave)

´,´ ^ ´A´,

´ ´ ^ ´V´,

´P´ ^ ´E´,

´E´ ^ ´T´,

´S´ ^ ´A´,

´S´ ^ ´G´,

´O´ ^ ´A´,

´A´ ^ ´V´,

´L´ ^ ´E´

´.´ ^ ´T´.

O caminho de volta é simples: o usuário fornece a chave e as mesmas operações serão feitas, fazendo com que o arquivo original seja recuperado.

3 Unix To DOS Arquivos texto no DOS, o ‘\n’ é representado pelo par de caracteres CR/LF, isto é, 0x0D seguido por 0x0A, enquanto que no UNIX, basta o caracter LF, isto é, 0x0A. Neste modo, os arquivos texto para UNIX deverão ser convertidos para o padrão DOS, ou seja, sempre que for lido um 0x0A, inserir antes um 0x0D. Pode-se desejar também a conversão oposta, isto é, de DOS para UNIX.

O FORMARQ deve ser chamado pela linha de comando pela seguinte sintaxe:

FORMARQ <nome_do_arquivo> [C][D] [chave]

I: O tipo de conversão deve ser o Invert.

C: O tipo de conversão deve ser o Cript.

D: Arquivo texto UNIX, gerar arquivo texto DOS.

U: Arquivo texto DOS, gerar arquivo texto UNIX.

Obs.: A chave só deverá ser exigida para a conversão Cript. Levar isso em consideração na hora de consistir os parâmetros de entrada. O usuário deve escolher somente um dos métodos de conversão.

Conversão Invert:

É um tipo de conversão que se for feita duas vezes, o arquivo volta à forma original. Assim, adotaremos o seguinte critério: o arquivo resultante da 1ª conversão deverá ter como extensão “.INV”. Se for invertido o arquivo “dados.dat”, deverá ser gerado o arquivo “dados.inv”. Se for invertido o arquivo “dados.inv”, será gerado o arquivo “dados.dnv”, igual ao original (“.DNV” é a extensão do arquivo “desinvertido”).

Conversão Cript:

Deve gerar um arquivo com extensão “.CRP”. O caminho inverso pode ser feito: criptografar o criptografado com a mesma chave.

Ex.: foi criptografado o arquivo “dados.dat”, gerando assim o arquivo “dados.crp”. Para descriptografar, vamos criptografar novamente”dados.crp” com a mesma chave, gerando assim o arquivo “dados.drp”. (“.DRP” é a extensão do arquivo “descriptografado”).

Obs.: a chave é como uma senha para o usuário.

Unix To Dos:

Seja qual for a extensão do arquivo texto para UNIX,, o arquivo para DOS deverá ter como extensão “.DOS”. Ao se fazer o processo inverso, o arquivo para UNIX deverá ter a extensão “.UNX”.

Todas essas características devem ser checadas antes de proceder qualquer conversão, e sempre que for constatada qualquer anormalidade, o programa FORMARQ deve ser cancelado, notificando o usuário com mensagens. Ex.: o arquivo de entrada não existe.

O usuário deve escolher um único tipo de conversão, caso contrário, cancelar o programa, notificando o usuário com mensagens. Além disso, o tipo de conversão escolhido deve estar entre os citados. Ex.:

FORMARQ dados.dat G

O tipo de conversão G não existe, portanto, o programa deve ser cancelado.

  • 7 anos depois...
Postado

Fiz assim, mais ainda não consegui rodar e não encontro o erro. Conseguem me auxiliar?

 

 

#include<stdio.h>
#include<conio.h>
#include<locale.h>

void invert(FILE* Arquivo)      // Conversao INVERT
{
     char c;
     do{
          c = getc(Arquivo);
          printf("%c", c!='\n' ? 0x100-c : c);     // Inverte o char
     }while(c!=EOF);
     printf("\nEOF");
     return;
}

void cript(FILE* Arquivo, char Chave[])   // Conversao CRIPT
{
     char c;
     do{
          c = getc(Arquivo);
          printf("%c", c);
     }while(c!=EOF);
     printf("\nEOF");
     return;
}

void u2d(FILE* Arquivo)                // Conversao UNIX to DOS
{
     char c;
     do{
          c = getc(Arquivo);
          printf("%c", c==0x0A ? 0x0D : c);
     }while(c!=EOF);
     printf("\nEOF");
     return;
}

void d2u(FILE* Arquivo)               // Conversao DOS to UNIX
{
     char c;
     do{
          c = getc(Arquivo);
          printf("%c", c);
     }while(c!=EOF);
     printf("\nEOF");
     return;
}     

int main()
{
    char Nome, Tipo, Chave[8];               //chave que vai dizer qual conversao sera usada / se C, Chav é a Senha
    FILE *Arquivo;                           // Declara o ARQUIVO
    printf("\n\tFORMARQ <dados.DAT> [I][C][D][U]\n\nI: Conversao Invert.\nC: Conversao Cript. [escrever chave]\nD: Conversao UNIX to DOS.\nU: Conversao DOS to UNIX.\n");
    Arquivo = fopen("DADOS.dat", "r");       // Abre ARQUIVO
    scanf("%c", &Tipo);                      // Recebe a conversao
    if(Tipo=='c') scanf(" %s", &Chave);      // Recebe a Chave, se a conversao for Cript
    switch(Tipo){                            // Define, partindo da letra, qual conversao sera¡ usada
                 case'i': invert(Arquivo); break;
                 case'c': cript(Arquivo, Chave); break;
                 case'd': u2d(Arquivo); break;
                 case'u': d2u(Arquivo); break;
                 default: printf("O arquivo de entrada não existe.");
    }
    fclose(Arquivo);
    getch();
    return 0;
}

Postado
  Em 11/11/2021 às 14:03, ARTHUR GUILHERME ESTEVES MARTINS disse:

 

int main()
{

Expandir  

 

Como vai ler os parâmetros assim ????

 

Precisa da lógica para tratar a entrada antes de tudo. E não acho que deva passar um ponteiro para o arquivo. Passe apenas o nome e deixe todo a lógica na função correspondente. Assim fica mais fácil de testar as funções...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...