Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    [C++]Estrapolare dati da un file e inserirli in una struttura dati

    Ragazzi, se ho la seguente riga in un file di testo chiamato "lista.txt":
    codice:
    Candidato:	Nome: Mario, Cognome: Rossi, Data di nascita: 05/10/1950
    Adesso io ho un'array di strutture nel quale vorrei salvare tutte le righe del file, una cosa del tipo:

    codice:
    struct data{
       int giorno;
       string mese;
       int anno;
    };
    
    struct persona{
       string nome;
       string cognome;
       data data_nascita;
    };
    dovrei creare una function che salvi i nomi, i cognomi e le date di nascita, nell'array di strutture.
    Qualcuno può aiutarmi?

    io ho impostato così la function:
    codice:
    /* *candidati è l'array di tipo persona(array di strutture), mentre lista è il file(lista.txt) */
    
    void caricaInMemoria(struct persona *candidati, fstream &lista){
        while(lista.eof()){
        }
    }
    Con i sogni possiamo conoscere il futuro...

  2. #2
    usa ifstream invece che fstram
    (è molto più facile leggere linea per linea, senza fare attenzione al carriage return, la coppia di byte 13 10)
    ifstream file(char* fname)
    char buffer[1000];
    while(!file.eof())
    {
    file.getline(buffer,1000);
    }

    In questo modo puoi analizzare ogni linea del file.
    Ora dovresti analizzare la linea, per ottenere le informazioni che ti servono,
    ecco come fare:
    int c = 0;
    char carattere;
    while(buffer[c] != NULL)
    {
    carattere = buffer[c++];
    }

    Con quel ciclo leggi tutti i caratteri della linea.

  3. #3
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Si ma nel mio caso ho una cosa del tipo:

    codice:
    Candidato: Nome: Gaten, Cognome: Rossi, Data di nascita: 05/Ottobre/1958
    Devo estrapolare solamente il Nome cioè "Gaten", il cognome: "Rossi" e la data di nascita:
    "05"=giorno, "Ottobre"=mese, e l'anno "1958", e inserire tutto nella struttura.
    Questa operazione và fatta per ogni riga del file.
    Con i sogni possiamo conoscere il futuro...

  4. #4
    scrivi del codice, te lo correggo io se non funziona

  5. #5
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    mmm nn saprei come iniziare
    Con i sogni possiamo conoscere il futuro...

  6. #6
    Fatti una scaletta, la rappresentazione grafica di un algoritmo che legga nell'ordine in cui si trovano nel buffer (array di char in cui viene letta una linea per volta con il ciclo che ti ho gia scritto) le parole divise da un " ".
    In questo modo dovresti ottenere prima "Candidato:", poi "Nome:",
    in seguito "Gaten," e così via.
    Fatto questo puoi tenere a mente l'ultima parola individuata, ad esempio se è "Nome:" quella successiva sarà il nome, e la inserirai nella struttura.

  7. #7
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Candidato: è una parola che viene inserita in modo fisso ad ogni riga del file... quindi come viene ignorata ad ogni iterazione???
    Con i sogni possiamo conoscere il futuro...

  8. #8
    Sei tu che fai il codice per rintracciare le parole, sei tu che devi ignorarla.
    Noto una situazione di stallo, comincia scrivendo la funzione che ora ti descrivo:

    char* LineGetWord(char* line, int n);
    Analizza la stringa line, che può essere ad esempio "ciao come va"
    e ritorna la n-parola.
    LineGetWord("ciao come va",1) -> "come"
    LineGetWord("ciao come va",0) -> "ciao"
    Considera i caratteri di spazio vuoto ' ' come mai appartenenti ad una parola, sono da saltare
    quando si trovano, e quelli appena precedenti o appena successivi a un carattere di non spazio vuoto sono da considerarsi i limiti delle parole.
    Ad esempio:
    LineGetWord(" ciao come va",0) -> "ciao"
    e non LineGetWord(" ciao come va",0) -> " ciao"

    Se non riesci a fare questa funzione posta il codice e te lo correggo

  9. #9
    Tip: per semplificarti la vita lascia stare i char * e usa le std::string (e se necessario std::istringstream), così ti puoi concentrare sugli aspetti "veri" di parsing e non su menate di gestione della memoria.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    secondo tip: metti il numero di record come prima riga del file ASCII

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.