Archived

This topic is now archived and is closed to further replies.

XDarkScar

reading from file

Recommended Posts

void load()
{
	ifstream fin;
	fin.open("Game Data.txt");
	string data;
	if(fin.fail())
	{
		cout << "Error, Unable to find Data File\n";
		return;
	}

	fin >> data >> gold;
	getline(fin, rank);
	fin >> data >> men;
	fin >> data >> a_men;
	fin >> data >> d_men;
	fin >> data >> spys;
	fin >> data >> army_tired;
	getline(fin, aname);
	getline(fin, cname);;

	fin.close();
}
   
game data.txt gold 0 rank Private * men 50 a_men 0 d_men 0 spys 0 army_tired 0 aname army's name * cname commanders name * I want to get the full name from the * can someone help me with this code? the code I have up there dosn't work, some efforts of mine.. Easy way of programming: Code, Graphics, Swearing.... [edited by - XDarkScar on April 30, 2003 12:03:17 AM]

Share this post


Link to post
Share on other sites
Maybe I could stare at it some more, but I don''t really understand what you''re trying to do here.

Is:
quote:
gold 0
rank Private *
men 50
a_men 0
d_men 0
spys 0
army_tired 0
aname army''s name *
cname commanders name *

The content of the file you are reading? Is that with or without the asterisks?

What do you mean by saying "the full name from the *"?

Please elaborate more, and provide details. In the code you have, you don''t declare gold, rank, men, a_men etc, so it''s hard to guess what you want to happen.

If this is something simple as reading in a configuration, I suggest you try a standard .ini file instead. Their format is:

[section1]
key1=value1
key2=value2
[section2]
key1=value1
...

And Windows'' provide functions to read and write them.
Look here: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/registry_functions.asp

The list in the end of the document contains the functions of interest, eg:
GetPrivateProfileInt()
GetPrivateProfileSection()
GetPrivateProfileSectionNames()
GetPrivateProfileString()


Share this post


Link to post
Share on other sites
ok let me reword it


game data.txt

gold 0
Private *
men 50
a_men 0
d_men 0
spys 0
army_tired 0
armys name *
commanders name *

the * are not included in the file, its the lines that I want 2 take the whole name from


Easy way of programming: Code, Graphics, Swearing....

Share this post


Link to post
Share on other sites
If you decide to do your own configuration reading:

Guessing from your previous posts on the subject, you are trying to read something like:

John Smith

into a std::string object. With std::ifstream, the extraction operator reads until encountering a space. For example:


stuff.txt
-----------------

Bob McBoby




read_in.cpp
-----------------

#include <iostream>
#include <string>

int main()
{
    std::ifstream inFile("stuff.txt");
    if (inFile.fail())
    {
        std::cerr << "An error occured on opening stuff.txt";
        // handle error, e.g. return -1;
    }

    std::string word;
    while (!inFile.eof())     // while (inFile) or while (!inFile.eof())
    {
        inFile >> word;     // reads one word in and assigns it 'word'
        std::cout << "The word read is: " << word << std::endl;
    }

    // etc

    return 0;
}




As you can see, the output would be:

The word read is: Bob
The word read is: McBoby


If I understand you correctly, you want to read in a string with spaces in it. Now, remember from your previous posts about std::getline()? Well, the first parameter for this function is an input stream. We used std::cin, but you can use your own input stream object that you created, inFile. For example:


stuff.txt
-----------------

Bob McBoby




read_in.cpp
-----------------

#include <iostream>
#include <string>

int main()
{
    std::ifstream inFile("stuff.txt");
    if (inFile.fail())
    {
        std::cerr << "An error occured on opening stuff.txt";
        // handle error, e.g. return -1;
    }

    std::string line;
    while (!inFile.eof())     // while (inFile) or while (!inFile.eof())
    {
        std::getline(inFile, line, '\n');     // reads the whole line and assigns it to 'line'
        std::cout << "The line read is: " << word << std::endl;
    }

    // etc

    return 0;
}




The output will be:

The line read is: Bob McBoby

Basically, what I'm trying to tell you in my ramble, is use the std::getline() function to read in the full names. Remember, though, that if a newline character ('\n') is left in the input stream, std::getline() will stop reading straight away as it will recognise it is the delimiter - have a look through your posts that I replied to.

Edit: Just noticed a formatting problem. :/

[edited by - Lektrix on May 1, 2003 11:46:03 AM]

Share this post


Link to post
Share on other sites
ahh had a feeling I was doign it write, anyway tx, I had 2 edit it some, was taking in a lot of stuff ints strings ect, I got it working with fin.get();

Easy way of programming: Code, Graphics, Swearing....

Share this post


Link to post
Share on other sites