Aravash
Aravash

Reputation: 39

Set integer variable through file read

I know how to pass in strings from a text file. In a previous project I read in strings and then tested them on either being "t" or "f", which the result of would set a variable to true or false.

Now I am wondering if it is efficiently possible to read numbers from a text file and pass them into an int? All I can think of is checking for the string "1" and returning 1 in a function, but that would have to be done for every possible integer I could expect in my program, which is not an effective solution.

For context, I am trying to make a save system for a game, and ints/floats that are read in would be variables such as player health, how much of an item they have, etc.

Upvotes: 0

Views: 1199

Answers (2)

Christophe
Christophe

Reputation: 73396

If you already know how to read a string str from a text file, reading numbers is not that difficult: jsut read the string as you did and use stoi() to convert the string into an int, or stof() into float.

int i; double d; 
i=stroi(str); d=strod(str2);

Another technique is to use file streams to read or write from a file exactly as you would do from cin and cout:

ifstream file("mytext.txt"); 
file>>i>>d;  

The previous method doesn't care so much about lines. So still another technique is to read a string, convert it into a string stream and use the stringstream as you would with cin:

if (getline(file, str)){   // read a full line 
    stringstream sst(str); 
    sst>>i>>d;
} 

Upvotes: 1

Dnarok
Dnarok

Reputation: 21

Using std::fstream. You can open a file, and stream input or output based on how you opened the file.

Example:

#include <iostream>
#include <fstream>

int main(int argc, char** argv)
{
    // Pretend we are passed the file location as a command-line argument to our program:

    std::fstream file { argv[1], std::ios::in };

    if (file.is_open())
    {
        int value;
        file >> value;

        std::cout << value << std::endl;
    }
    else
    {
        std::cout << "Could not open file " << argv[1] << std::endl;
    }
}

Provided that the information is correctly formatted in the file, this should work.

I didn't run it, so there might be syntax errors, but the basics are there. Check out cppreference for some help, they will have further examples.

Upvotes: 0

Related Questions