1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

fstream C++

Discussão em 'Programação' iniciada por OubeLa, 15 de Dezembro de 2007. (Respostas: 8; Visualizações: 1224)

  1. OubeLa

    OubeLa Power Member

    Tenho uma dúvida:

    Como é que eu importo e exporto de/para ficheiro de texto sem saber quantos elementos lá estão?

    No meu caso o ficheiro de texto é assim:

    Código:
    nome-preco|dia*mes/ano&turno#quantidade
    Por exemplo:
    Código:
    peixe-3|15*12/2007&2#3
    Basicamente tenho um prato com um nome, um preço, uma data de funcionamento e um turno, e a quantidade para essa data. mas e se eu quiser varias datas e turnos e quantidades?

    Ou seja, imagine-se 3 datas
    Código:
    nome-preco|dia*mes/ano&turno#quantidade|dia*mes/ano&turno#quantidade|dia*mes/ano&turno#quantidade
    Por exemplo:
    Código:
    peixe-3|15*12/2007&2#3|16*12/2007&1#2|17*12/2007&2#7
    Como é que eu faço para ler um numero que não sei de elementos?
     
    Última edição: 15 de Dezembro de 2007
  2. mj2p

    mj2p I'm Cool Cuz I Fold

    Se bem precebi, tens alguns caracteres no teu ficheiro que funcionam como separadores. Porque é que não fazes uma recolha selectiva a partir do teu ficheiro? Do género, recolhias a linha do ficheiro para uma string (usando cin.getline()) e depois ias varrer a tua string, eliminando caracteres que não interessam.

    Por exemplo, colocavas um ciclo for(), que fazias tantas iteracções quantos caracteres tinhas na string. Depois, dentro do ciclo for(), fazias uma selecção da informação: do caracter "|" ao caracter "&" é uma data, do caracter "&" ao "#" é o turno em que está disponível, e assim sucessivamente para as restantes informações disponíveis.

    Bom, espero ter-te respondido. Vou fazer uma aplicação que faça o mesmo que a tua, só para ter a certeza que a minha ideia funciona a 100%. Não te coloco é aqui o código-fonte, pois assim perderia toda a piada.

    Mais para a frente aprenderás, concerteza, listas e filas. Quando aprenderes estas matérias, verás que estes programas de gestão de dados se tornam mais fáceis e mais eficientes.

    Vá, cumps
     
  3. OubeLa

    OubeLa Power Member

    Já aprendi listas e filas, e estou a utiliza-las. Alias, até precisava de obter essa informação para adiconar à lista ;)
     
  4. mj2p

    mj2p I'm Cool Cuz I Fold

    Ahh, ok. Mas e então, percebes-te a minha ideia de como seleccionares a informação do ficheiro?

    Vá, cumps
     
  5. OubeLa

    OubeLa Power Member

    Sim sim, percebi :) Obrigado
     
  6. jahred

    jahred Power Member

    o que eu faço é no ficheiro de texto ter tudo dividido por ";". Depois percorro o ficheiro com getlines onde leio cada linha para uma string. Depois faço um find ao 1º ";" da string e copio tudo para uma nova string para tratar e guardar nos respectivos campos. Depois de tratar esse campo apago da string e volto a procurar o 1º ";" e sempre assim... quando já sabes como é que os dados irao estar agrupados é facil!
     
  7. greatbunzinni

    greatbunzinni Power Member

    No fundo o que precisas de fazer para importar os dados é definir uma linguagem e definires um analisador sintáctico. É obrigatório ter os vários campos separados por caracteres diferentes? Se fosse possível haver apenas um então tu fazias isso com uma máquina de estados de 3 ou 4 estados.

    Para exportar a informação tu não precisas mais do que uma linha de cout. Tipo:

    Código:
    struct Datum{    // os campos numerais devem ser guardados em formatos numéricos mas não vale a pena espetar aqui conversões
    string nome, preco, dia, mes, ano, turno, quantidade;
    };
    
    (...)
    
    Datum d;
    cout << d.nome << "-" << d.preco << "|" << d.dia << "*" << d.mes << "/" << ano << "&" << "turno" << "#" << quantidade << endl;
    (...)
    
    Aviso: não confirmei o código. Mesmo assim deve dar para ter uma ideia.
     
  8. mj2p

    mj2p I'm Cool Cuz I Fold

    Exactamente, foi o que eu disse no meu post. Mesmo tendo caracteres separadores diferentes, desde que o sir_atmc saiba o que cada um separa, é numa boa.

    Vá, cumps
     
  9. mj2p

    mj2p I'm Cool Cuz I Fold

    Se se souber classes, pelo menos na minha opinião, é preferível usá-las em vez de structs. Mas tudo bem, para programas mais simples como este, as structs são sempre bem-vindas.

    Vá, cumps
     

Partilhar esta Página