Ajuda em C -> Manipulação de Ficheiros com strings
|
16-05-2009, 15:38
Mensagem: #1
|
|||
|
|||
Ajuda em C -> Manipulação de Ficheiros com strings
Boas, para um trabalho tenho que fazer um programa que faça uma simulação do crescimento de uma cidade...
Então é assim, eu carrego o ficheiro com o mapa da cidade, e depois supostamente tenho que carregar o ficheiro com as regras de alteração da cidade... Aqui começam os problemas, as regras são do tipo S=W:W (ou seja se a casa actual(S) for igual a W entao passa a W), esta é a regra mais básica... O problema está em como fazer com que o meu programa consiga olhar para o ficheiro e interpretar os caracteres na posição correcta, ou seja, S=casa actual, W=hipotese , W=como vai ficar.... Eu estive a olhar pra isto algum tempo e tive a tentar resolver, mas nao consigo nada, primeiro acho que é melhor ler do ficheiro, regra a regra ou seja com o fgets leio uma linha do ficheiro e depois interpreto, só que nao sei como fazer isso, já tive a ver o sscanf, strtok, etc...mas torna-se tudo muito confuso... só quero que me digam qual seria a abordagem que teriam se lhes aparece-se um problema destes... cmps... |
|||
16-05-2009, 16:07
Mensagem: #2
|
|||
|
|||
RE: Ajuda em C -> Manipulação de Ficheiros com strings
Os meus conhecimentos de C estão um bocado enferrujados mas não podias ler "aos bocados" para dentro de uma estrutura de dados?
Os dados devem ter uma organização fixa, tipo cada linha tem X caracteres e cada um faz uma coisa, se leres isso para uma estrutura de dados ficas logo com tudo no sítio para tratares, mudares e reescrever para o ficheiro .... digo eu |
|||
16-05-2009, 16:58
(Esta mensagem foi modificada pela última vez a: 16-05-2009 17:01 por zeguel.)
Mensagem: #3
|
|||
|
|||
RE: Ajuda em C -> Manipulação de Ficheiros com strings
(16-05-2009 16:07)R00KIE Escreveu: Os meus conhecimentos de C estão um bocado enferrujados mas não podias ler "aos bocados" para dentro de uma estrutura de dados? eu nao quero reescrever no ficheiro, depois tenho que implementar tudo no ficheiro da area que já recebi, mas isso depois de guardado é relativamente simples.. ironia ou não, eu faço isto Código: int loop; agora o que eu quero é interpretar e depois mandar para uma lista ligada... Código: typedef struct regras |
|||
16-05-2009, 19:29
(Esta mensagem foi modificada pela última vez a: 16-05-2009 19:34 por Ana.)
Mensagem: #4
|
|||
|
|||
RE: Ajuda em C -> Manipulação de Ficheiros com strings
Olá
Se bem percebi, tu precisas de ler um ficheiro e aproveitar de lá certos parametros, interessando-te guardá-los em variáveis. Nunca usaste o mágico fscanf? http://www.cppreference.com/wiki/c/io/fscanf http://www.manpagez.com/man/3/fscanf/ Tu lês o ficheiro da seguinte forma, certo? Código: ./executavel < ficheiro O fscanf é um scanf, ou seja, lê input formatado, mas para file descriptors. No teu caso, tu queres ler do stdin. Por isso, imagina que o teu ficheiro tinha o seguinte conteúdo: Código: 1 2 3 Fazias: Código: fscanf(stdin, "%d %d %d, &num1, &num2, &num3); Automaticamente, as variáveis num1, num2 e num3 têm os valores 1, 2 e 3 respectivamente. Podes aplicar a mesma lógia a outros tipos de dados (char, char*, float, etc.). A vantagem do fscanf é que lê o input FORMATADO, ou seja, se fazes: Código: fscanf(stdin, "Olá eu tenho %d anos e nasci no ano %d", &idade, &nascimento); Basta que o teu ficheiro possua essa mesma frase e ele "encaixa" sem problemas os parâmetros variáveis que encontrar. No teu caso, os teus parâmetros variáveis são as letras (char). Espero ter ajudado. Os meus artigos | O meu site |
|||
16-05-2009, 23:35
Mensagem: #5
|
|||
|
|||
RE: Ajuda em C -> Manipulação de Ficheiros com strings
(16-05-2009 19:29)Ana Escreveu: Olá Tens toda a razão, agora eu tou a fazer um trabalho, logo concerteza o prof vai colocar erros propositados no ficheiro, mas era apenas fazer condições para garantir isso, ok, agora as funções nao sao tão triviais... Código: s=C, C=0:C Código: s=C, C=3 : C |
|||
16-05-2009, 23:51
(Esta mensagem foi modificada pela última vez a: 16-05-2009 23:53 por Ana.)
Mensagem: #6
|
|||
|
|||
RE: Ajuda em C -> Manipulação de Ficheiros com strings
O fscanf ignora automaticamente espaços, ou seja admite número de espaços variável.
Mas se tiveres de detectar erros sintáticos... isso sim, fscanf não é boa ideia. Os meus artigos | O meu site |
|||
17-05-2009, 00:02
Mensagem: #7
|
|||
|
|||
RE: Ajuda em C -> Manipulação de Ficheiros com strings
(16-05-2009 23:51)Ana Escreveu: O fscanf ignora automaticamente espaços, ou seja admite número de espaços variável. isso d ignorar os espaços nao sabia,, for that... mas acho que a questão está em se ler com o fscanf, nao consigo ter a total noção do que me pode aparecer, não é... Código: fscanf(stdin, "%d %d %d, &num1, &num2, &num3); eu queria saber era se me aconcelham alguma técnica pa abordar isso... tipo, eu tou a avançar as a cena tá a ficar gigante, mtos if's e for's... eu pensei no inicio em usar o strtok pa dividir em pequenas strings, e apartir daí tratar com sscanf e escolher o que queria mas isso tava m a dar umas segmentation faults e abandonei a ideia, que aconcelham? |
|||
17-05-2009, 00:44
Mensagem: #8
|
|||
|
|||
RE: Ajuda em C -> Manipulação de Ficheiros com strings
Pois... se o input não é mais ou menos certinho, então esquece.
Tens a certeza que no enunciado desse trabalho não diz nada acerca de input bem formado? Já falaste com o professor? Normalmente eles não complicam muito. Uma vez fiz um parse para um ficheiro de entrada, a contar com erros e tudo e ficou gigante... Mas sim, a abordagem do strtok é a melhor nesses casos, usando para isso os delimitadores do teu enunciado. A partir daí, se tiveres a certeza cada fragmento é sintaticamente correcto, podes usar o fscanf. Os meus artigos | O meu site |
|||
17-05-2009, 01:04
Mensagem: #9
|
|||
|
|||
RE: Ajuda em C -> Manipulação de Ficheiros com strings
(17-05-2009 00:44)Ana Escreveu: Pois... se o input não é mais ou menos certinho, então esquece. olha esquece mesmo, acabei á pouco, e tenho 200 linhas .... yah o prof complica bues, tipo isto era por fases , a primeira era a propagação de fogos e a maior parte do pessoal nem se preocupou com caracters inválidos, na apresentação, levamos uma coça...mas enfim.... passando á frente... tenho esta estrutura Código: typedef struct hipotes e quero escrever lá, como invoco isto? já tentei definir uma var do tipo Regras ex: Regras var , mas dpois dá m erro já agora obrigado pelas respostas.... |
|||
17-05-2009, 02:11
Mensagem: #10
|
|||
|
|||
RE: Ajuda em C -> Manipulação de Ficheiros com strings
Tu estás por acaso a alocar os espaço para a estrutura? Sabes que quando trabalhas com estruturas não basta declarar variáveis do tipo da estrutura e escrever lá.
Para já, precisas de funções auxiliares que te aloquem e "desaloquem" espaço para cada estrutura, e para cada campo, no caso das strings. Supomos que o tamanho máximo de cada string é 1000, por exemplo. Alterei um pouco o teu código, não percebo porque colocas *Estrutura, não há necessidade, quando declarares a estrutura, aí sim, declaras como ponteiro. Aqui está o teu código original modificado (eu sou um bocado picuinhas com as normas), e acrescentei-te algumas funções. Código: #include<stdio.h> Ou aqui, para veres com cores: http://pastebin.com/f75efa66 Atenção: Eu apenas criei a função de criação e destruição da tua estrutura hipotese. Tens de fazer o mesmo para a estrutura condicao. Depois para a estrutura regra, inicializas o campo hipotese e condicao com as funções de criação de hipoteses e condições acima descritas. Se não perceberes alguma função, faz no terminal (em Linux ou Mac): man nome_da_funcao Boa sorte! (Isso deu um bocadinho de trabalho, agora vou dormir ) Os meus artigos | O meu site |
|||
« Mais Antigo | Mais Recente »
|
Utilizadores a ver este tópico: 3 Visitante(s)