Olá pessoal....
Sou novo aki no forum então primeiramente gostaria de compprimentá-los pelo bom nível de discussão( o pouco que eu lí no forum , gostei ). Vamos à minha dúvida.
Desenvolvi uma ferramenta no matlab que filtra dados de um arquivo texto e divide este arquivo em quantos o usuário desejar. No matlab, tudo certo e está quebrando um abaita galho. Agora preciso migrar o programa para o C e aí que está o problema.
Eu gostaria de ler o arquivo texto abaixo.
P1 P2 P3 P4 P5 P6
50 6 55 32 14 14
20 5 40 32 4 5
e transformá-lo nos vetores p1=[50,20] p2=[6,5] p3=[55,40]...
No matlab, usei o comando textread e tudo ficou mais fácil. Agora no C não tenho idéia de como fazer para transformar tal arquivo em vários vetores. Alguém já se deparou com algo parecido???? Alguém tem alguma sugestão???? Valeu!!!
Ler Um Arquivo Texto
Started By charles.mf, 29/09/2005, 15:55
2 replies to this topic
#1
Posted 29/09/2005, 15:55
#2
Posted 30/11/2005, 10:48
Oi, Charles! Tudo bem?
Olha... Amo programar em C++, mas dêvo dizer-lhe que vc está simplesmente migrando da mordomia para a performance.
No Matlab vc possui funções para desempenhar tudo o que precisar dentro da matemática, usando os mais variados métodos possíveis. O problema é que no Matlab vc tem um programa INTERPRETADO, que é MUITO mais lento que o programa compilado, como no C/C++. Creio que vc já deve ter sido informado sobre isto. A desvantagem do C/C++ é que vc precisará de implementar praticamente tudo o que precisar na mão!
No C/C++ padrão não possui uma função plot() que joga direto o gráfico na tela, nem uma função que já te traga a integral de uma função pelo método Newton-Hapson. Se quiser usar isto em C/C++ ou terá que penar pra procurar na Internet o código-fonte, ou terá que desenvolvê-lo na mão.
Bem.. Chega de abobrinhas e vamos responder sua dúvida!
Em primeiro lugar, como o Matlab criam-se programas interpretados, vc consegue em tempo real definir uma variável cujo nome é criado em tempo real. Mas no C isto não existe. Portanto, seria impossível vc carregar um nome de dentro de um arquivo e falar que este será o nome de uma variável. No entanto, basta vc saber que isto não é problema algum, pois em algum lugar aquela variável estará.
Algumas ressalvas:
- Não sei se vc realmente precisa de guardar os nomes P1, P2, P3, ..., P6. Mas se precisar, fale comigo. Considerarei q não devem ser importantes, portanto pularei a primeira linha.
- Este código funcionará somente para vetores de duas dimensões. Se precisar de mais dimensões, terá que reajustar o código. Não farei um código genérico, pois será mais difícil de ser compreendido e será bem mais extenso.
O código:
Espero que entenda o que o programa faz. Qualquer dúvida, é só perguntar! Precisa entender tudo, viu? Deu trabalho! Hehehehe...
Um abraço,
Thales Medeiros.
Olha... Amo programar em C++, mas dêvo dizer-lhe que vc está simplesmente migrando da mordomia para a performance.
No Matlab vc possui funções para desempenhar tudo o que precisar dentro da matemática, usando os mais variados métodos possíveis. O problema é que no Matlab vc tem um programa INTERPRETADO, que é MUITO mais lento que o programa compilado, como no C/C++. Creio que vc já deve ter sido informado sobre isto. A desvantagem do C/C++ é que vc precisará de implementar praticamente tudo o que precisar na mão!
No C/C++ padrão não possui uma função plot() que joga direto o gráfico na tela, nem uma função que já te traga a integral de uma função pelo método Newton-Hapson. Se quiser usar isto em C/C++ ou terá que penar pra procurar na Internet o código-fonte, ou terá que desenvolvê-lo na mão.
Bem.. Chega de abobrinhas e vamos responder sua dúvida!
Em primeiro lugar, como o Matlab criam-se programas interpretados, vc consegue em tempo real definir uma variável cujo nome é criado em tempo real. Mas no C isto não existe. Portanto, seria impossível vc carregar um nome de dentro de um arquivo e falar que este será o nome de uma variável. No entanto, basta vc saber que isto não é problema algum, pois em algum lugar aquela variável estará.
Algumas ressalvas:
- Não sei se vc realmente precisa de guardar os nomes P1, P2, P3, ..., P6. Mas se precisar, fale comigo. Considerarei q não devem ser importantes, portanto pularei a primeira linha.
- Este código funcionará somente para vetores de duas dimensões. Se precisar de mais dimensões, terá que reajustar o código. Não farei um código genérico, pois será mais difícil de ser compreendido e será bem mais extenso.
O código:
#include <string.h> #include <stdio.h> #include <stdlib.h> int main() { //Variável contadora unsigned int i, numVetores, indiceBuffer, indiceMatrix; //Linhas de, no máximo, 100 caracteres char linha1[100], linha2[100], buffer[100]; FILE *fp=fopen("c:\\cpp\\matriz\\debug\\arquivo.txt", "r"); if(fp==NULL) return 0; //Descartando a primeira linha: fgets(linha1, 100, fp); //Aqui lemos os 100 próximos caracteres ou uma linha e guardamos fgets(linha1, 100, fp); //Próxima linha: fgets(linha2, 100, fp); //fechando o arquivo: fclose(fp); //Contando número de vetores existentes1: for(i=0,numVetores=1;i<strlen(linha1);i++) if(linha1[i]==' ') numVetores++; //Criando uma matriz de [numVetores , 2] posições: int **matrix; matrix=(int**) malloc(numVetores); for(i=0;i<numVetores;i++) matrix[i]=(int*) malloc(2); //Preenchendo o primeiro índice dos vetores: for(i=0, indiceBuffer=0,indiceMatrix=0;i<strlen(linha1);i++) { if(linha1[i]!=' ') buffer[indiceBuffer++]=linha1[i]; if(linha1[i]==' ' || i==strlen(linha1)-1) { buffer[indiceBuffer]='\0'; matrix[indiceMatrix][0]=atoi(buffer); ++indiceMatrix; indiceBuffer=0; } } //Preenchendo o segundo índice dos vetores: for(i=0, indiceBuffer=0,indiceMatrix=0;i<strlen(linha2);i++) { if(linha2[i]!=' ') buffer[indiceBuffer++]=linha2[i]; if(linha2[i]==' ' || i==strlen(linha2)-1) { buffer[indiceBuffer]='\0'; matrix[indiceMatrix][1]=atoi(buffer); ++indiceMatrix; indiceBuffer=0; } } for(i=0;i<numVetores;i++) printf("matrix[%d][0]=%d\nmatrix[%d][1]=%d\n\n", i, matrix[i][0], i, matrix[i][1]); return 0; }
Espero que entenda o que o programa faz. Qualquer dúvida, é só perguntar! Precisa entender tudo, viu? Deu trabalho! Hehehehe...
Um abraço,
Thales Medeiros.
Sucesso é ganhar dinheiro fazendo o que você faria de graça.
#3
Posted 08/02/2011, 23:07
Olá,
você poderia me ensinar como escrever este script de matlab com o textread?
Obrigado.
Giuliano
você poderia me ensinar como escrever este script de matlab com o textread?
Obrigado.
Giuliano
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)