Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - leggere linea file di testo
Forum - C/C++ - leggere linea file di testo

Avatar
crybot (Normal User)
Rookie


Messaggi: 43
Iscritto: 11/04/2011

Segnala al moderatore
Postato alle 22:06
Martedì, 03/05/2011
salve, ancora...

ho, stavolta, un problema che non riesco a risolvere, una mia applicazione ha bisogno di leggere una stringa da un file di testo, contenente spazi. prima usavo le funzioni del C come fopen() e fgets(), ma adesso ho deciso di passare a funzioni piu` efficenti come le funzioni di fstream. quando arrivo pero` ad utilizzare getline in questo modo:

char Window[100];
fstream in("mio file.txt", ios::in);

in.getline(Window, 100);

la variabile Window risulta sempre vuota... questo perche`? grazie ;)

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 23:18
Martedì, 03/05/2011
controlla se il file è stato correttamente aperto:

Codice sorgente - presumibilmente C/C++

  1. if (!in)
  2.     cout << "Errore apertura file" << endl;




PM Quote
Avatar
crybot (Normal User)
Rookie


Messaggi: 43
Iscritto: 11/04/2011

Segnala al moderatore
Postato alle 23:47
Martedì, 03/05/2011
si... avevo gia` provato, ho diversi manuali di c++, uno trall'altro recentissimo uscito ad aprile, tutti pero` usano getline nel modo in cui l'ho descritto prima. non riesco a capire perche` non funzioni... in oltre non posso usare il tipo string perche` devo passare la variabile char alla funzione FindWindow() per trovare l'handle della finestra dato il titolo, e necessita di un parametro char. domani posto tutto il codice, cosi` vediamo se sono io che sbaglio qualcosa...

PM Quote
Avatar
crybot (Normal User)
Rookie


Messaggi: 43
Iscritto: 11/04/2011

Segnala al moderatore
Postato alle 22:05
Mercoledì, 04/05/2011
ok, la mia necessita` e questa:
utilizzare le funzioni di fstream per leggere una stringa (anche del tipo string, convertendola poi in char con c_str() ) da un file, ma con lo stream cin da file registro soltanto la stringa fino al carattere di spaziatura, ma ho bisogno di leggere il nome di una finestra, quindi... con fopen ero piu` semplice utilizzavo fgets ed era ok, ma cosi` non so proprio come rigirarmi e su google dopo due giorni di ricerca non ho trovato niente, tanto meno su tutti e 7 i libri di c++ che ho in casa...


il codice che uso attualmente e` questo:

Codice sorgente - presumibilmente C#

  1. void FinestraCheck()
  2.         {
  3.                 char Window[100];
  4.                 fstream in;
  5.                 in.open("finestra.txt", ios::in);
  6.                 if (!in)
  7.                 {
  8.  
  9.                         cerr << "\n\nerrore!!" << endl;
  10.                         system("pause");
  11.                 }
  12.  
  13.                 in >> Window; // legge soltato fino al carattere di spaziatura
  14.          /* ho bisogno che legga un'intera stringa di parole */
  15.  
  16.        /* questa e` una prova per vedere se la stringa ha letto dal file */
  17.           cout << endl << endl << Window << endl;
  18.                 system("pause");
  19. /* questa e` una prova per vedere se la stringa ha letto dal file */
  20.  
  21.  
  22.                 HwndWindow=FindWindow(NULL, Window); // trova handle finestra
  23.                 if (HwndWindow == NULL)
  24.                 {
  25.                         MessageBox(NULL, " \n Finestra non trovata.", "Crybot ",MB_ICONERROR | MB_TOPMOST);
  26.                         WindowCalibration();
  27.                 }
  28.                 else
  29.                 {
  30.                         MessageBox(NULL, " \n Finestra trovata!", "Crybot ",MB_ICONINFORMATION | MB_TOPMOST);
  31.                 }
  32.         }




se qualcuno sa aiutarmi, lo prego di farlo, altrimenti devo tornare a fopen e fgets ;)

Crybot

Ultima modifica effettuata da crybot il 04/05/2011 alle 22:07
PM Quote
Avatar
frank87 (Normal User)
Newbie


Messaggi: 20
Iscritto: 10/03/2011

Segnala al moderatore
Postato alle 23:34
Lunedì, 09/05/2011
Io di solito faccio cosi:
Codice sorgente - presumibilmente C++

  1. #include <cstdlib>
  2. #include <iostream>
  3. #include<fstream>
  4. using namespace std;
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.        string parola;
  9.        fstream file;
  10.  
  11.       file.open("nomefile", ios::in);
  12.  
  13.       if(file.fail())
  14.        {
  15.         cerr << "Errore nell'apertura dei file" << endl;
  16.         system("PAUSE");
  17.         return -1;
  18.        }
  19.  
  20.       while(!file.eof())
  21.       {
  22.      
  23.       file>> parola;
  24.  
  25.       }
  26.  
  27.   file.close();
  28.  
  29.  
  30.     system("PAUSE");
  31.     return EXIT_SUCCESS;
  32. }


Ultima modifica effettuata da frank87 il 09/05/2011 alle 23:36
PM Quote
Avatar
crybot (Normal User)
Rookie


Messaggi: 43
Iscritto: 11/04/2011

Segnala al moderatore
Postato alle 14:34
Martedì, 10/05/2011
ho risolto utilizzando getline, prima mi dava errore, ma adesso non so perche` funziona nuovamente... in ogni caso la tua soluzione non puo` funzionare, io devo leggere diverse linee di testo ognuna contenente spazi, tu riesci a leggere tutto parola per parola ma non puoi sapere quando finisce una linea di testo...
grazie mq ;)

PM Quote