Vettore con numeri da file

di il
14 risposte

Vettore con numeri da file

Allora....
Sto usando da poco C++ (mi serve per la tesi) e stavo cercando di capire come creare un vettore allocandoci dei numeri che ci sono su un file (.txt).

In pratica se scrivo:

int main()
{
string s;
ifstream f;
f.open("file.txt");

if (f.fail())
{
cout << "errore\n";
return 1;
}
while (f.good())
{
getline (f,s);
cout << s <<"\n";
}
return 0;
}


mi legge i numeri (che nel file ho messo incolonnati).
Però sono stringhe... se faccio la stessa cosa dichiarando "int s" o "double s" invece che "string s", vengono fuori tutti 0.....
A me servono numeri, non stringhe e non riesco a risolvere il problema.
In realtà poi dovrei leggere una tabella e non dei numeri in colonna, e fare dei vettori paralleli "per orizzontale" per poi lavorare con quelli, ma a me non riesce nemmeno questa cosa semplice...
Potete aiutarmi?

Inoltre ho provato a sostituire a "getline(f,s)", "f>>s", ma in questo caso legge due volte l'ultimo numero. Perché?

Grazie infinite!

14 Risposte

  • Re: Vettore con numeri da file

    Ciao
    leggi il valore in una stringa di appoggio e poi usa una di queste funzioni per ricavarti il numero.
    ---------------------------------------------------------------------------------------------------
    funzioni
    ---------------------------------------------------------------------------------------------------
    double atof(char *string) - Converte una stringa in un valore in floating
    point.

    int atoi(char *string) - Converte una stringa in un valore integer.

    int atol(char *string) - Converte una stringa in un valore long integer.

    char *itoa(int value, char *string, int radix) - Converte un valore integer
    in una stringa utilizzando il "radix" dato.

    char *ltoa(long value, char *string, int radix) - Converte un valore long
    integer in una stringa in un dato "radix".

    double strtod(char *string, char *endptr) - Converte una stringa in un
    valore in floating point.

    long strtol(char *string, char *endptr, int radix) - Converte una stringa
    in un valore long integer utilizzando un dato "radix".

    unsigned long strtoul(char *string, char *endptr, int radix) - Converte
    una stringa in un valore long senza segno.

    dopo aver convertito il valore lo metti in un vettore.
    spero di esserti stato d'aiuto
  • Re: Vettore con numeri da file

    Grazie della risposta!
    ho provato ad aggiungere:

    double a=atof(s);
    cout << a <<"\n";

    ma mi dà quest'errore:

    "cannot convert 'std::string' to 'const char*' for argument '1' to 'double atof(const char*)'.......

    Cosa vuol dire?

    EDIT: adesso ho scritto "a=atof(s.c_str())" (cosa che ho trovato da qualche parte su internet, ma di cui ignoro il senso).
    In questo modo l'errore non c'è più, ma i numeri che legge sono sbagliati. Dà

    0
    6
    4
    0

    mentre dovrebbe essere:

    3
    6
    4

    Se uso f>>s invece di getline(f,s), dà:

    0
    6
    4
    4

    Mah....
  • Re: Vettore con numeri da file

    Ciao,
    questo codice dovrebbe funzionare correttamente:
    
    #include <iostream>
    #include <cstdlib>
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
        string s;
        double num;
        ifstream f;
        f.open("file.txt");
    
        if (f.fail())
        {
            cout << "errore\n";
            return 1;
        }
        while (f.good())
        {
            getline (f,s);
            num = atof(s.c_str());
            cout << "Stringa: " << s << "\n";
            cout << "Numero: " << num << "\n";
        }
        return 0;
    }
    
    Il problema era in quello che passavi alla atof: non deve essere un oggetto stringa ma un char*.
  • Re: Vettore con numeri da file

    Hai risposto mentre stavo modificando
    Quindi scrivendo quello lo trasformo in char e lo posso passare ad atof, insomma...
    Comunque il problema dei numeri persiste...
    Come stringhe mi dà 3 6 4 e nulla, come numeri 0 6 4 0....
  • Re: Vettore con numeri da file

    Ma come è fatto il tuo file? Io ne ho creato uno fatto così:
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    e non ho alcun problema.
  • Re: Vettore con numeri da file

    E' uguale... cioè, ha i numeri incolonnati anche il mio....
    Purtroppo non posso fare copia-incolla perché dall'altro pc non mi funziona internet, comunque è fatto allo stesso modo... che cosa assurda... non capisco...

    EDIT:
    Ho provato a traslare i numeri nel file verso il basso di un posto... adesso dà sempre come 0 le righe estreme, ma i numeri li legge tutti... boh...
  • Re: Vettore con numeri da file

    Hai utilizzato esattamente il codice che ho postato? Sei su Windows, Linux o Mac? Sempre ammesso che questo c'entri qualcosa...
  • Re: Vettore con numeri da file

    Sìsì, è preciso identico (a parte che ora ho creato un vettore allocandoci i numeri, vettore che ovviamente è contornato da due zeri e non dovrebbe....) -.-"
    Sono su Linux... non so davvero quale possa essere il problema...
  • Re: Vettore con numeri da file

    Io ero su Windows ma ora ho provato anche su Linux e il funzionamento è corretto. Ho caricato i file che sto utilizzando a questo indirizzo: puoi provare con questi. Altrimenti non so proprio cosa dire...

    P.S. Io ho compilato da terminale con
    
    g++ -Wall -o main main.cpp
    
    poi ho lanciato l'eseguibile.
  • Re: Vettore con numeri da file

    Ti ringrazio!! Sei davvero molto gentile.
    Non mi fa scaricare i file, perché non mi fa vedere l'immagine di cui dovrei digitare i caratteri. Comunque domani trovo il modo di avere internet anche sull'altro pc e vedo meglio. Comunque vabbè, diciamo che sicuramente va meglio di prima XD. Grazie!!
  • Re: Vettore con numeri da file

    Puoi provare a scaricare da qui oppure qui. Spero che almeno uno funzioni!
  • Re: Vettore con numeri da file

    Allora... non so cosa ci fosse di sbagliato, ma adesso funziona (ho cambiato editor, non so come possa questo avere a che fare col problema ) Comuqnue adesso funziona... ti ringrazio infinitamente
  • Re: Vettore con numeri da file

    Le interpretazioni sono due: questa o questa.
    Comunque l'importante è aver risolto.
  • Re: Vettore con numeri da file

    :
Devi accedere o registrarti per scrivere nel forum
14 risposte