PDA

Visualizza la versione completa : [c++]accedere a una stringa memorizzata sul file txt


enrico92
12-10-2016, 04:49
Ciao ragazzi,da poco ho ripreso a programmare e ho deciso di farlo scrivendo un software utile per il mio lavoro, ho creato quindi una lista in C++ che mi stampa le caratteristiche di un oggetto in un file txt, vorrei che sempre da un file txt mi prendesse il nome dell'oggetto.

Per fare queste due cose ho implementato le librerie string e fstream, ma fstream ho notato che non mi permette di prendere una parola nella lista a mio piacimento leggendo il file riga per riga, vorrei invece che lo facesse.

Ho pensato di memorizzare il contenuto del file in un array, ma questo avrebbe bisogno di una dichiarazione della dimensione prima e quindi mi sembra inutile.

Il codice che ho scritto è questo, abbiate pazienza se c'è qualche errore, ma non sono praticissimo, mi sto applicando.


#include <iostream>
#include <fstream>
#include <string>

using namespace std;

/* ************************************************** *
struttura dinamica dove memorizzare il risultato
*/
struct modello {
string nome;
double x;
double y;
int amount;
modello *next;
};

modello *il=NULL;

void inserisciintesta(modello *&il,modello *nuovo) {
nuovo->next=il;
il=nuovo;
}

void inserisciincoda(modello *&il,modello *nuovo) {
modello *ultimo=NULL;
if (il==NULL) {
inserisciintesta(il,nuovo);
}
else {
ultimo=il;
while (ultimo->next!=NULL) {

ultimo=ultimo->next;
ultimo->next=nuovo;
}
}
}

/* ************************************************** **************
apertura file contenente i nomi dei modelli */

int lettura_file() {
ifstream f("names.txt"); //nome del file da aprire, si può mettere anche il percorso (es C:\\file.txt)
string s;

if(!f) {
cout<<"Il file non esiste!";
return -1;
}

int i=1;
while(f.good()) //fino a quando c'è qualcosa da leggere ..
{
getline(f, s); //legge tutta la riga dal file e la mette nella variabile s
cout<<i<<"\t"<<s<<endl;
i++;
}

cout<< 2;
return 0;
}

int main () {
int b;
modello *nuovo=NULL;

string namefile;
string formato=".txt";

cout<<"come nomino il file?"<<endl;
cin>>namefile;
namefile+=formato;

ofstream SaveFile(namefile.c_str());

cout<<"inserisci numero di progetti d'aggiungere"<<endl;
cin>>b;

for (int i=0; i<b; i++) {
nuovo=new modello;
cout<<"nome"<<endl;
cout<<lettura_file();

cin>>nuovo->nome;
SaveFile<<"Modello:\t"<<nuovo->nome<<endl;
cout<<"misura lato x"<<endl;

cin>>nuovo->x;
SaveFile<<"X="<<nuovo->x<<endl;

cout<<"misura lato y"<<endl;

cin>>nuovo->y;
SaveFile<<"Y="<<nuovo->y<<endl;

cout<<"quantità"<<endl;

cin>>nuovo->amount;
SaveFile<<"quantità="<<nuovo->amount<<endl;

nuovo->next=NULL;

inserisciincoda(il,nuovo);

cout<<endl;
}
return 0;
}

oregon
12-10-2016, 09:41
La domanda qual è?

MItaly
12-10-2016, 09:59
Ho sistemato il post - e anche l'indentazione, che era abbastanza inguardabile :stordita: . Dovresti però specificare qual'è esattamente la richiesta...

:ciauz:

enrico92
12-10-2016, 15:58
La domanda qual è?
Ringrazio Mitaly, ma il forum non mi ha permesso la modifica con Chrome su debian.
La domanda è che dovrei selezionare il nome da un da un file.txt
Praticamente in questi file ho:
Gianni
Pippo
Baudo
Quindi vorrei che in modello*nome memorizzi Pippo, oppure Baudo a scelta mia. Non so mi sono spiegato?

oregon
12-10-2016, 16:51
"Selezionasse" in che senso?

Vuoi cercare un nome e leggerlo? Apri il file, lo leggi sequenzialmente confrontando con una if finché non arrivi alla fine o non trovi il nome.

Cosa non ti è chiaro?

Loading