Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoal,
estou com um problema básico. Tenho um arquivo .txt com essa entrada (q0, 1)->(q1, X, D);(q1, 2)->(q2, 2, D); e assim vai.
Minha dúvida é, quero ler esses 'q0' '1' 'q1' 'X' 'D' e salvar numa estrutura, depois disso crio outra instancia dessa estrutura para salvar o segundo conjunto 'q1' '2' 'q2' '2' 'D' e assim vai.
Mas não tive uma idéia para isso, é para um trabalho e tal, mas até agora não rolou.
obs: eu tenho que saber que depois do ponto e vírgula, acaba a 1ª instrução. é como se ficasse assim as estruturas
estrutura 1 estrutura 2
variável 1 = q0 var 1 = q1
var 2 = 1 var 2 = 2
var 3 = q1 var 3 = q2
var 4 = X var 4 = 2
var 5 = D var 5 = D
eu tenho que 'ignorar' os ( ) - >, mas saber quem no ; acaba a 1 sentença
obrigado
>
Voce quer ler (q0, 1)->(q1, X, D);(q1, 2)->(q2, 2, D); de um arquivo texto , correto ?
Porem apenas ler o que esta dentro dos parênteses ?
quase isso amigo,
são de um arquivo .txt sim.
na primeira entrada (q0, 1)->(q1, X, D), eu quero o ' qo 1 q1 X D ', isso eu vou copiar para 5 variáveis, uma para cada. repito o processo para a segunda entrada (q1, 2)->(q2, 2, D), pegando ' q1 2 q2 2 D ' e copiando para as variáveis. Essas variáveis são de um typedef que eu criei.
obs: tenho que saber que no ' ; ' acaba a primeira entrada e assim sucessivamente
>
são de um arquivo .txt sim.
na primeira entrada (q0, 1)->(q1, X, D), eu quero o ' qo 1 q1 X D ', isso eu vou copiar para 5 variáveis, uma para cada. repito o processo para a segunda entrada (q1, 2)->(q2, 2, D), pegando ' q1 2 q2 2 D ' e copiando para as variáveis. Essas variáveis são de um typedef que eu criei.
obs: tenho que saber que no ' ; ' acaba a primeira entrada e assim sucessivamente
Manipulacao de Strings , na verdade voce nao ira armazenar em 5 variaveis , voce ira armazenar em 1 vetor e cada entrada em 1 campo do vetor.
char vet[100]
vet[0] = q0 vet[1] = 1; e assim vai.
Irei ver o que eu consigo aqui e lhe passo.
>
Manipulacao de Strings , na verdade voce nao ira armazenar em 5 variaveis , voce ira armazenar em 1 vetor e cada entrada em 1 campo do vetor.
char vet[100]
vet[0] = q0 vet[1] = 1; e assim vai.
Irei ver o que eu consigo aqui e lhe passo.
O problema é que são entradas desconhecidas, mas nesse 'padrão mesmo. Uma idéia seria então por isso em um vetor e ir associando às variáveis, dentro de um loop para as demais entradas. O problema é fazer isso, se puder ajudar, agradeço infinitamente.
estrutura 1 estrutura 2
variável 1 = q0 var 1 = q1
var 2 = 1 var 2 = 2
var 3 = q1 var 3 = q2
var 4 = X var 4 = 2
var 5 = D var 5 = D
Nao posso inserir tudo em apenas uma estrutura ?
Exemplo apenas da leitura do arquivo e sua inicialização armazenando tudo em 1 variavel vetor com tamanho 40... que e o tamanho do todo.
Nesse exemplo esta pegando tudo espaços em branco.E ele identificar q1 nao como uma strings e sim 2 caracteres.
A leitura do arquivo ele lê CARACTERE POR CARACTERE , não é possivel ler strings....Entao essa junção teria que ser feita via código.
Posso desenvolver mais depois , mais e bom voce pesquisar e tentar tambem....Assim como a adpatação da outra metade do arquivo para uma segunda variavel na estrutura.Que por hora nao pensei em um modo de fazer...
Feito no visual studio
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
using namespace System;
struct Read{
char vet[40];
}Ler;
//ler (q0, 1)->(q1, X, D);(q1, 2)->(q2, 2, D);
int leitura(void){
FILE *fp = NULL;
int i=0; // quantidade de vetores
char j; // loop de contagem de strings nos vetores
char ler; // exibe os caracteres do arquivo na tela
if(!(fp = fopen("ler.txt","r+"))){
return 1;
puts("Arquivo Inexistente");
}
else{
while (!feof(fp)){ /* Enquanto n�o se chegar no final do arquivo */
ler = getc(fp); /* Le um caracter no arquivo */
printf("%c",ler); /* e o imprime na tela */
}
for(j=0; j < 40; j++){
rewind(fp); // re le o arquivo
fscanf(fp,Ler.vet); // adiciona o conteudo do arquivo na matriz
Ler.vet[j] = strlen(Ler.vet); // conta....
Ler.vet[j] = getc(fp); // adiciona na matriz
printf("\nVet[%d]:%c",i+1,Ler.vet[j]);
i++;
}
}
fclose(fp); /* Fecha o arquivo */
return 0;
}
int main() {
Ler.vet[40] = 0;
leitura();
puts("\n");
system("pause");
return 0;
}
Veja um exemplo de retirando espaços em branco de uma string : http://www.geeksbr.com/2010/12/programacao-em-c-retirar-espacos-em.html
obrigado Asskiller, amanha irei testar essa solução com mais calma, já quebrei muito a cabeça por hoje.
Voce quer ler (q0, 1)->(q1, X, D);(q1, 2)->(q2, 2, D); de um arquivo texto , correto ?
Porem apenas ler o que esta dentro dos parênteses ?