Whether you're a newbie or an experienced programmer, any questions, help, or just talk of any language will be welcomed here.
Moderator: Coders of Rage
lotios611
Chaos Rift Regular
Posts: 160 Joined: Sun Jun 14, 2009 12:05 pm
Current Project: Game engine for the PC, PSP, and maybe more.
Favorite Gaming Platforms: Gameboy Micro
Programming Language of Choice: C++
Post
by lotios611 » Tue Jan 05, 2010 6:06 pm
I'm trying to parse text files into an std::map. The text file is set up like this:
Hello - A word
Testing - Testing
APPLES - ANOTHER WORD
banana - a fruit
Here's some code I have written so far, it's not much though.
Code: Select all
std::fstream file;
std::string line;
file.open("File.txt");
if (file.is_open())
{
while (!file.eof())
{
while (std::getline(file, line))
{
std::string temp;
std::istringstream isstream(line);
int i = 0;
while (std::getline(isstream, temp, '-'))
{
testing[temp] = "";
std::cout << i << temp << " ";
i++;
}
std::cout << "\n";
}
}
file.close();
}
else
{
std::cout << "Unable to load file";
}
Last edited by
lotios611 on Tue Jan 26, 2010 6:56 pm, edited 1 time in total.
"Why geeks like computers: unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep." - Unknown
short
ES Beta Backer
Posts: 548 Joined: Thu Apr 30, 2009 2:22 am
Current Project: c++, c
Favorite Gaming Platforms: SNES, PS2, SNES, SNES, PC NES
Programming Language of Choice: c, c++
Location: Oregon, US
Post
by short » Tue Jan 05, 2010 9:54 pm
So..........................do you have a question...................... do you want someone to look at your code......................... is there an error? or are you simply sharing how you did it?
lotios611
Chaos Rift Regular
Posts: 160 Joined: Sun Jun 14, 2009 12:05 pm
Current Project: Game engine for the PC, PSP, and maybe more.
Favorite Gaming Platforms: Gameboy Micro
Programming Language of Choice: C++
Post
by lotios611 » Wed Jan 06, 2010 5:21 am
I can't believe I left that part out. What I'm trying to do is separate the words and store them into an std::map.
"Why geeks like computers: unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep." - Unknown
XianForce
Chaos Rift Devotee
Posts: 767 Joined: Wed Oct 29, 2008 8:36 pm
Post
by XianForce » Wed Jan 06, 2010 8:42 am
lotios611 wrote: I can't believe I left that part out. What I'm trying to do is separate the words and store them into an std::map.
And the problem is?
lotios611
Chaos Rift Regular
Posts: 160 Joined: Sun Jun 14, 2009 12:05 pm
Current Project: Game engine for the PC, PSP, and maybe more.
Favorite Gaming Platforms: Gameboy Micro
Programming Language of Choice: C++
Post
by lotios611 » Wed Jan 06, 2010 6:29 pm
I should really be more specific. My problem is that I have no idea how to separate the two words and put them into an std::map. I want only the words stored in the std::map.
"Why geeks like computers: unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep." - Unknown
dandymcgee
ES Beta Backer
Posts: 4709 Joined: Tue Apr 29, 2008 3:24 pm
Current Project: https://github.com/dbechrd/RicoTech
Favorite Gaming Platforms: NES, Sega Genesis, PS2, PC
Programming Language of Choice: C
Location: San Francisco
Contact:
Post
by dandymcgee » Wed Jan 06, 2010 9:06 pm
Code: Select all
#include <iostream>
#include <string>
#include <map>
#include <fstream>
int main()
{
std::ifstream file( "config.txt" );
std::map<std::string, std::string> dictionary;
std::map<std::string, std::string>::iterator iter;
if (file.is_open())
{
while (!file.eof())
{
//Get word
std::string word;
file >> word;
//Ignore the " - "
file.ignore( 3 );
//Get definition and store in dictionary map (max definition size 100 characters can be changed)
char def[100];
file.getline(def, 100);
dictionary[word] = def;
}
file.close();
}
else
{
std::cout << "Unable to load file";
}
//Iterating through dictionary in its entirety
for( iter = dictionary.begin(); iter != dictionary.end(); iter++ )
{
std::cout << "Word: " << iter->first << "\n"
<< "Definition: " << iter->second << "\n\n";
}
//Looking up words
std::cout << "Definition of Monkey is '" << dictionary["Monkey"] << "'.\n";
std::cin.get();
return 0;
}
Sample config file [config.txt]:
Code: Select all
Monkey - Crazy animal
Apple - Red delicious fruit
Programming - How smart people have fun
Keep in mind words are stored case sensitive, you may want to convert them all to lowercase before entering them into the map.
EDIT: Decided to put some effort into it to give you working code this time.
Last edited by
dandymcgee on Thu Jan 07, 2010 8:14 pm, edited 1 time in total.
Falco Girgis wrote: It is imperative that I can broadcast my narcissistic commit strings to the Twitter! Tweet Tweet, bitches!
lotios611
Chaos Rift Regular
Posts: 160 Joined: Sun Jun 14, 2009 12:05 pm
Current Project: Game engine for the PC, PSP, and maybe more.
Favorite Gaming Platforms: Gameboy Micro
Programming Language of Choice: C++
Post
by lotios611 » Thu Jan 07, 2010 6:32 pm
Thanks for that code man! I have one question though. What does "file.ignore(3)" do?
"Why geeks like computers: unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep." - Unknown
lotios611
Chaos Rift Regular
Posts: 160 Joined: Sun Jun 14, 2009 12:05 pm
Current Project: Game engine for the PC, PSP, and maybe more.
Favorite Gaming Platforms: Gameboy Micro
Programming Language of Choice: C++
Post
by lotios611 » Thu Jan 07, 2010 6:36 pm
I think I figured it out. First, read in the file until before the first space. Then ignore the junk. Finally, put the word and the definition into the dictionary. Right?
"Why geeks like computers: unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep." - Unknown
dandymcgee
ES Beta Backer
Posts: 4709 Joined: Tue Apr 29, 2008 3:24 pm
Current Project: https://github.com/dbechrd/RicoTech
Favorite Gaming Platforms: NES, Sega Genesis, PS2, PC
Programming Language of Choice: C
Location: San Francisco
Contact:
Post
by dandymcgee » Thu Jan 07, 2010 8:13 pm
lotios611 wrote: I think I figured it out. First, read in the file until before the first space. Then ignore the junk. Finally, put the word and the definition into the dictionary. Right?
Yup. file.ignore(3) ignores 3 characters which always happen to be the " - " between the word and the definition.
Falco Girgis wrote: It is imperative that I can broadcast my narcissistic commit strings to the Twitter! Tweet Tweet, bitches!
lotios611
Chaos Rift Regular
Posts: 160 Joined: Sun Jun 14, 2009 12:05 pm
Current Project: Game engine for the PC, PSP, and maybe more.
Favorite Gaming Platforms: Gameboy Micro
Programming Language of Choice: C++
Post
by lotios611 » Sat Jan 16, 2010 8:39 am
Alright, I'm still having troubles. If I run the program more then once, the first element in the map is a space.
"Why geeks like computers: unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep." - Unknown
lotios611
Chaos Rift Regular
Posts: 160 Joined: Sun Jun 14, 2009 12:05 pm
Current Project: Game engine for the PC, PSP, and maybe more.
Favorite Gaming Platforms: Gameboy Micro
Programming Language of Choice: C++
Post
by lotios611 » Mon Jan 25, 2010 12:12 pm
I'm almost done this project. I only have one problem. If I run the program, add a word, then close the program, run it again, then print all of the words, one of the words is a space.
"Why geeks like computers: unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep." - Unknown
dandymcgee
ES Beta Backer
Posts: 4709 Joined: Tue Apr 29, 2008 3:24 pm
Current Project: https://github.com/dbechrd/RicoTech
Favorite Gaming Platforms: NES, Sega Genesis, PS2, PC
Programming Language of Choice: C
Location: San Francisco
Contact:
Post
by dandymcgee » Mon Jan 25, 2010 12:20 pm
lotios611 wrote: I'm almost done this project. I only have one problem. If I run the program, add a word, then close the program, run it again, then print all of the words, one of the words is a space.
Don't put an empty line at the end of your dictionary file. Either that or remember to ignore it (check if word == "").
Falco Girgis wrote: It is imperative that I can broadcast my narcissistic commit strings to the Twitter! Tweet Tweet, bitches!
lotios611
Chaos Rift Regular
Posts: 160 Joined: Sun Jun 14, 2009 12:05 pm
Current Project: Game engine for the PC, PSP, and maybe more.
Favorite Gaming Platforms: Gameboy Micro
Programming Language of Choice: C++
Post
by lotios611 » Tue Jan 26, 2010 6:55 pm
Thanks! This is like the only project I've ever finished.
"Why geeks like computers: unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep." - Unknown
dandymcgee
ES Beta Backer
Posts: 4709 Joined: Tue Apr 29, 2008 3:24 pm
Current Project: https://github.com/dbechrd/RicoTech
Favorite Gaming Platforms: NES, Sega Genesis, PS2, PC
Programming Language of Choice: C
Location: San Francisco
Contact:
Post
by dandymcgee » Tue Jan 26, 2010 7:50 pm
lotios611 wrote: Thanks! This is like the only project I've ever finished.
Sure thing. Congrats on finishing.
Falco Girgis wrote: It is imperative that I can broadcast my narcissistic commit strings to the Twitter! Tweet Tweet, bitches!