Pessoal, estou com um problemão com o código abaixo, gostaria muito da opinião de vocês para resolvê-lo.
O Programa abre o arquivo contido em uma lista de arquivos (“lista_homologos.txt”) e o trata.
Nessa lista, existe apenas um arquivo (“9998_ENSCJAT00000011695.faa”), cujo o conteúdo é este:
O programa trata apenas a primeira linha, guardando o código “ENSCJAT00000011695” na matriz de caracteres e imprimindo depois a matriz na tela e no arquivo de saída, (“results.txt”).
O problema que está ocorrendo é que no arquivo “results.txt” estão sendo impressos caracteres-lixo ao invés da string desejada. Tentei postar os caracteres aqui mais a página não comporta.
O mais impressionante é que quando abro no terminal do arquivo de saída, usando o comando “more results.txt”, ele mostra a string desejada corretamente.
Não sei onde está o erro. Estou usando Gedit para programar e abrir os arquivos de texto.
Não encontrei nenhum erro no meu programa nem no Gedit.
Preciso muito de uma direção, realmente não sei o que está acontecendo.
Segue o código:
// Programa responsavel por produzir a matriz de homologos a partir dos dados brutos oriundos do get_homologues.
# include <stdio.h>
# include <math.h>
# include <string.h>
FILE * flis; // ponteiro para a lista de grupos homologos
FILE * farq; // ponteiro para o arquivo de grupos homologos
FILE * fres; // ponteiro para o arquivo de resultados
int i = 0; // contadores gerais para o programa
int j = 0;
int l = 0;
int n = 0;
char A [50]; // buffer para captura dos codigos dos transcritos
char B [50]; // buffer para captura dos nomes das especies
char buffer1 [50]; // buffer para a captura do nome de cada arquivo listados em lista_homologos.txt
char buffer2 [100000];
char M[100][187];
LimpaMatriz (M); // limpeza e preparacao da matriz
flis = fopen ("lista_homologos.txt", "r+"); if (flis == NULL) {printf ("\nErro ao se abrir flis\n");}
while (fgets (buffer1, 50, flis) != NULL){
LimpaVetor(buffer1); // limpando o caracter de '\n' existente nos nomes dos arquivos
farq = fopen (buffer1, "r"); if (farq == NULL) {printf ("\nErro ao se abrir farq\n");}
while (fgets (buffer2, 100000, farq) != NULL){
if (buffer2[0] == '>'){
sscanf (buffer2, "%s %s", A, B);
PulaCaracter (A);
PulaCaracter (B);
Especie (M, A, B);
}
}
fres = fopen ("results.txt", "w"); if (fres == NULL){ printf ("\nErro ao se abrir fres!\n");}
ImprimeMatriz (fres, M);
fclose (farq);
}
fclose (fres);
fclose (flis);
}
// funcao que limpa e prepara a matriz para o trabalho
void LimpaMatriz (char M[100][187]){
int i;
int j;
for (i = 0; i < 100; i++){
for (j = 0; j < 187; j++){
M[i][j] = 32; //32 e o valor ascii para nulo
}
}
}
// retira o caracter '\n' do vetor, possibilitando abrir os arquivos da lista
void LimpaVetor (char buffer1[]){
int i;
for (i = 0; i < strlen(buffer1); i++){
if (buffer1[i] == '\n'){
buffer1[i] = '\0';
}
}
}
// funcao que retira os primeiros caracteres dos vetores, para melhorar a estetica dos nomes
void PulaCaracter (char A[]){
int i;
for (i = 0; i < strlen(A); i++){
A[i] = A[i+1];
}
}
// funcao que reconhece de qual especie a sequencia faz parte
void Especie (char M[100][187], char A[], char B[]){
int nA = 0; // contadores para o preenchimento das linhas da matriz
int nB = 0;
int nC = 0;
int nD = 0;
int nE = 0;
int nF = 0;
int nG = 0;
int nH = 0;
int nI = 0;
int nJ = 0;
if (strcmp ("Homo", B) == 0){ strcpy (M[nA], A); nA++;}
if (strcmp ("Pan", B) == 0){ strcpy (M[nB], A); nB++;}
if (strcmp ("Gorilla", B) == 0){ strcpy (M[nC], A); nC++;}
if (strcmp ("Pongo", B) == 0){ strcpy (M[nD], A); nD++;}
if (strcmp ("Nomascus", B) == 0){ strcpy (M[nE], A); nE++;}
if (strcmp ("Macaca", B) == 0){ strcpy (M[nF], A); nF++;}
if (strcmp ("Callithrix", B) == 0){ strcpy (M[nG], A); nG++;}
if (strcmp ("Tarsius", B) == 0){ strcpy (M[nH], A); nH++;}
if (strcmp ("Otolemur", B) == 0){ strcpy (M[nI], A); nI++;}
if (strcmp ("Microcebus", B) == 0){ strcpy (M[nJ], A); nJ++;}
//memset (B, 0, 50);
}
// funcao impressora - imprime a matriz de caracteres
void ImprimeMatriz (FILE * fres, char M[100][187]){
int i;
int j;
for (i = 0; i < 100; i++){
for (j = 0; j < 187; j++){
printf ("%c", M[i][j]);
fprintf (fres, "%c", M[i][j]);
}
printf ("%c",'\n');
fprintf (fres, "%c", '\n');
}
}