Enviado em 20/09/2012 - 15:46h
Oi Pessoal,
Estou com um problema que está me dando uma tremenda dor de cabeça:
Preciso preencher com dados de arquivos uma matriz de caracteres, mas não tenho conseguido sucesso, mesmo depois de muitas tentativas.
Sou programador iniciante, não tenho muita experiência.
Estou aberto a outras abordagens para este problema, mas estou curioso para saber o que estou fazendo de errado nesta implementação para poder corrigir meu raciocínio.
Esses são os nomes dos arquivos, com seus respectivos conteúdos:
ricardo.txt
ENSG00001
ENSG00002
ENSG00003
ENSG00004
ENSG00005
ortolista.txt
ortoA.txt
ortoB.txt
ortoC.txt
ortoA.txt
ENSG00001 AAAAAAAAA
ENSG00002 AAAAAAAAA
ENSG00003 AAAAAAAAA
ENSG00004 AAAAAAAAA
ENSG00005 AAAAAAAAA
ortoB.txt
ENSG00001 BBBBBBBBB
ENSG00002 BBBBBBBBB
ENSG00003 BBBBBBBBB
ENSG00004 BBBBBBBBB
ENSG00005 BBBBBBBBB
ortoC.txt
ENSG00001 CCCCCCCCC
ENSG00002 CCCCCCCCC
ENSG00003 CCCCCCCCC
ENSG00004 CCCCCCCCC
ENSG00005 CCCCCCCCC
E este é o código:
1. Abre um arquivo de referência (ricardo.txt) e copia a primeira palavra-chave para a matriz M;
2. Abre uma lista com arquivos a serem pesquisados;
3. Abre o primeiro arquivo da lista e procura nele pela palavra-chave que esta em M;
4. Caso encontre, copia a outra palavra-chave da mesma linha para M;
5. Abre o segundo arquivo e de novo procura pela palavra-chave de M;
6. Caso encontre, copia a outra palavra-chave da mesma linha para M;
7. Abre o outro arquivo...
8. Copia a segunda palavra-chave do arquivo de referência para M;
9. Novamente busca por ela nos arquivos da lista... encontrando, copia as outras palavras da mesma linha para a matriz...
...
Até o encerramento da lista de palavras de ricardo.txt;
O meu objetivo é que a matriz final tenha o seguinte conteúdo:
ENSG00001
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
ENSG00002
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
ENSG00003
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
ENSG00004
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
ENSG00005
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
O problema é que sempre obtenho essa mesma resposta no terminal:
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
Eu já chequei a leitura dos arquivos, os loops, as comparações das palavras-chaves, a impressão dos dados... mas não consigo encontrar o problema.
Alguém saberia me dar uma luz para este código?
Grande abraço,
Ricardo.
Estou com um problema que está me dando uma tremenda dor de cabeça:
Preciso preencher com dados de arquivos uma matriz de caracteres, mas não tenho conseguido sucesso, mesmo depois de muitas tentativas.
Sou programador iniciante, não tenho muita experiência.
Estou aberto a outras abordagens para este problema, mas estou curioso para saber o que estou fazendo de errado nesta implementação para poder corrigir meu raciocínio.
Esses são os nomes dos arquivos, com seus respectivos conteúdos:
ricardo.txt
ENSG00001
ENSG00002
ENSG00003
ENSG00004
ENSG00005
ortolista.txt
ortoA.txt
ortoB.txt
ortoC.txt
ortoA.txt
ENSG00001 AAAAAAAAA
ENSG00002 AAAAAAAAA
ENSG00003 AAAAAAAAA
ENSG00004 AAAAAAAAA
ENSG00005 AAAAAAAAA
ortoB.txt
ENSG00001 BBBBBBBBB
ENSG00002 BBBBBBBBB
ENSG00003 BBBBBBBBB
ENSG00004 BBBBBBBBB
ENSG00005 BBBBBBBBB
ortoC.txt
ENSG00001 CCCCCCCCC
ENSG00002 CCCCCCCCC
ENSG00003 CCCCCCCCC
ENSG00004 CCCCCCCCC
ENSG00005 CCCCCCCCC
E este é o código:
Esse código executa o seguinte movimento:
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
int main (){
FILE * farq; // abre lista de arquivos
FILE * fref; // abre o arquivo de referencia
FILE * flis; // abre lista de arquivos a serem lidos
// Matriz de caracteres
char M[100][25];
// contadores
int i = 0;
int j = 0;
int l = 0;
// bufferes
char buffer0[100];
char buffer1[100];
char buffer2[100];
char A[30];
char B[30];
char mais[30];
// limpeza da matriz
for (i = 0; i < 100; i++){
for (l = 0; l < 25; l++){
M[i][l] = '{TEXTO}';
}
}
fref = fopen ("ricardo.txt", "r+"); // abertura do arquivo de referencias
if (fref == NULL){ printf ("\nErro ao se abrir fref!\n");}
while (fgets (buffer0, 100, fref) != NULL){ // leitura do arquivo de referencia
j++;
sscanf (buffer0, "%s", mais); // captura das palavras-chaves (alfa-numericas)
strcpy (M[j], mais); // preenchimento da matriz com as palavras capturadas acima
flis = fopen ("ortolista.txt", "rw"); // abertura da lista de arquivos a serem lidos
if (flis == NULL){printf ("\nErro ao se abrir flis!\n");}
while (fgets (buffer1, 100, flis) != NULL){ // retirando os '\n' dos nomes dos arquivos
for (i = 0; i < 100; i++){
if (buffer1[i] == '\n'){
buffer1[i] = '{TEXTO}';
}
}
farq = fopen (buffer1, "rw"); // abertura dos arquivos individuais contidos na lista
if (farq == NULL){printf ("\nErro ao se abrir farq!\n");}
while (fgets (buffer2, 100, farq) != NULL){ // leitura dos arquivos individuais
sscanf (buffer2, "%s %s", A, B); // captura das duas palavras-chaves contidas na linhas
if (strcmp (M[j], A) == 0){ // comparacao da primeira palavra-chave (alfa-numerica) com aquela da ultima linha da matriz
j++;
strcpy (M[j], B); // copia da segunda palavra-chave (apenas caracteres) do arquivo para a matriz
}
}
fclose (farq);
}
fclose (flis);
}
fclose (fref);
// -------------------------------------Impressao da Matriz-----------------------------------------//
for (i = 0; i < 100; i++){
if (M[i][0] != '{TEXTO}' && M[i][1] != '{TEXTO}' && M[i][2] != '{TEXTO}'){
printf ("MATRIZ: %s\n", M[j]);
}
}
}
1. Abre um arquivo de referência (ricardo.txt) e copia a primeira palavra-chave para a matriz M;
2. Abre uma lista com arquivos a serem pesquisados;
3. Abre o primeiro arquivo da lista e procura nele pela palavra-chave que esta em M;
4. Caso encontre, copia a outra palavra-chave da mesma linha para M;
5. Abre o segundo arquivo e de novo procura pela palavra-chave de M;
6. Caso encontre, copia a outra palavra-chave da mesma linha para M;
7. Abre o outro arquivo...
8. Copia a segunda palavra-chave do arquivo de referência para M;
9. Novamente busca por ela nos arquivos da lista... encontrando, copia as outras palavras da mesma linha para a matriz...
...
Até o encerramento da lista de palavras de ricardo.txt;
O meu objetivo é que a matriz final tenha o seguinte conteúdo:
ENSG00001
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
ENSG00002
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
ENSG00003
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
ENSG00004
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
ENSG00005
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
O problema é que sempre obtenho essa mesma resposta no terminal:
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
MATRIZ: AAAAAAAAA
Eu já chequei a leitura dos arquivos, os loops, as comparações das palavras-chaves, a impressão dos dados... mas não consigo encontrar o problema.
Alguém saberia me dar uma luz para este código?
Grande abraço,
Ricardo.