projeto de escola - escrever um texto em um arquivo

1. projeto de escola - escrever um texto em um arquivo

Luis Vilo
LuisVilo

(usa Outra)

Enviado em 10/01/2020 - 17:55h

Oi, gente! Eu tô fazendo um projeto de escola em que preciso ler um texto de um arquivo, convertê-lo em morse e escrever esse texto convertido em outro arquivo diferente. Eu consegui fazer todo o programa, mas na hora de escrever o texto convertido no arquivo, as frases tão ficando todas zoadas dentro arquivo. Alguém pode me ajudar a resolver o probelma? Ficarei grato.

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

/* Constantes */
#define T_MORSE 8
#define Q_LETRAS 26
#define Q_NUMEROS 10
#define Q_MORSE (Q_LETRAS+Q_NUMEROS)
#define MAX_STRING_SIZE 100


typedef struct{
char letras[5]; /* armazena a letra. A recebe como uma string , mas só usa a primeira letra */
char letrasMorse[T_MORSE];/* armazena os respectivos simbolos morse */
}alfabeto;
alfabeto l[Q_MORSE];

void codifica(const char *linha) {
int j=0, i=0;
FILE *fp;
fp = fopen("codificado.txt", "w");
while(i<strlen(linha)-1){ //lê a a frase inteira
while((toupper(linha[i]) != l[j].letras[0]) && (j< Q_MORSE)){
j++; // aponta para a proxima letra
}
if (toupper(linha[i]) == l[j].letras[0]){
fprintf(fp,"%s ", l[j].letrasMorse);
i++;
}else if (linha[i] == ' '){
fprintf(fp, "%c", " ");
i++;
}
j=0;
}
}

int main(){
int cont=0,j;
FILE *arch;
arch = fopen("morse.txt","r");
if( arch == NULL ){
printf("ERROR");
return 0;
}
else{
while(fscanf(arch,"%s%s",l[cont].letras,l[cont].letrasMorse) != EOF){
l[cont].letras[1] = '\0'; /* elimina caracteres indesejados */
for(j=0; l[cont].letrasMorse[j]; j++){
if(l[cont].letrasMorse[j] == '*'){ /* se encontra um asterisco */
l[cont].letrasMorse[j] = '\0'; /* elimina o asterisco */
break;
}
}
cont++; /* aponta para a proxima posiçao do vetor */
}
}
fclose(arch);

FILE *fp;
char linha[MAX_STRING_SIZE];
fp = fopen("original.txt", "r");
if (arch==NULL){
printf("ERROR");}
while (fgets(linha,MAX_STRING_SIZE,fp) != NULL ) {
codifica(linha);
}
fclose(fp);

return 0;
}

Abaixo é o arquivo com as letras e o respectivo codigo morse que armazenei em uma estrutura.

A .-*
B -...*
C -.-.*
D -..*
etc...

(A exigencia dada pelo professsor é que as letras em morse devem ficar separadas por três espaços e as palavras por cinco. Tô explicando isso para que entendam algumas coisas que fiz no programa)


  


2. Re: projeto de escola - escrever um texto em um arquivo

Adriano Siqueira
adrisiq

(usa KDE Neon)

Enviado em 10/01/2020 - 22:03h

Segue uma função funcional para salvar string dentro de um arquivo:
/**
* Escreve o conteúdo da string no arquivo fornecido. Caso o arquivo não exista,
* o mesmo será criado. Todo o conteúdo do arquivo será substituído.
*
* @param nomeArquivo Arquivo onde será salva a string.
* @param conteudo String que deve ser salva.
*/
void escrever(char nomeArquivo[], char conteudo[]) {
FILE *arquivo = fopen(nomeArquivo, "w");

if (arquivo == NULL) {
printf("[ E ]: Erro ao abrir o arquivo. \n");
return;
}

fwrite(conteudo, sizeof(char), strlen(conteudo), arquivo);
fclose(arquivo);
printf("[ I ]: Escrita finalizada. \n");
}

Para usar, basta adicionar a seguinte linha no seu código:
escrever("/caminho/para/o/arquivo.txt", "Conteúdo que deve ser salvo"); 

Obs.: É necessário incluir a biblioteca string.h.


3. Re: projeto de escola - escrever um texto em um arquivo

Luis Vilo
LuisVilo

(usa Outra)

Enviado em 11/01/2020 - 08:01h

Mas veja que no código eu preciso escrever a letra em morse no arquivo e os espaços. Eu preciso entao criar duas funções?


4. Re: projeto de escola - escrever um texto em um arquivo

Adriano Siqueira
adrisiq

(usa KDE Neon)

Enviado em 11/01/2020 - 09:09h

Na linha onde o arquivo é aberto, mude o w para a. E quando for salvar passe o código morse como o segundo argumento da função.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts