Archived

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

File handling

Recommended Posts

This is supposed to look for an object(string of text) (the string is called Object) in a text file. First of all (using geline) I look for the room. Then I take in the object name (which stands under the room name in the textfile). If Object = objecttxt, then I take in the object info and print it to the screen. I can compile it without an error, but it does''t work when I run it (or rather, it does nothing). I''ve checked all the strings and they contain the correct information when the code that I''ve included here is initiated. What am I doing wrong? (ifstream fhi) while (GetInfoCheck == true){ getline(fhi, temp, ''\n''); if (temp == currentroom){ fhi >> objecttxt; if (objecttxt == Object){ GetInfoCheck = false; getline(fin, temp, ''*''); system("cls"); cout << room.strRoomDescription; cout << "\n\n\n\n" << temp; }

Share on other sites
You cannot compare two strings by using == operator, it only compares the addresses of those strings, which aren''t the same even if the string are identical.

Use strcmp(string1, string2) function, which compares the strings. If it returns zero, string1 and string2 are identical.

Share on other sites
 #include <string>

STL rocks!
Beside that, I''ve also had the same problem and I think I solved it this way:

Store the "initial data" of each room before the actual room-description or whatever.
01 03 06 01 01 00 00 00|  |  |  |  ||  |  |  |__|_ Offset in bytes to next room|  |  ||  |  |_ Number of objects in this room|  ||__|_ Room id flag

Then you don''t need to compare strings, which takes more CPU time than comparing a unsigned short. Ofcourse you''ll have to write your own converter that will remake your "source" textfiles and store them in a binary "world" file. Use fixed dimension arrays to store object names and description, then you can fit them into a struct or something similar and just read in the whole chunk of data. Saves a lot of time. You could also use a slightly more dynamic approach, when you store the lenght of each string/name before the string appears in the file and then allocate memory before reading it.

The second way (the dynamic one) is a bit harder to code, but will produce a slighly smaller world-file.

#define MAX_OBJECTS 10typedef struct OBJECT_DATA{   char name_of_object[16];   unsigned char object_id;   char object_description[128];}object;typedef struct ROOM_DATA{   char name_of_room[16];   char room_description[255];   object objects[MAX_OBJECTS];}room;

This way is the easiest, but the world-file will eventually become very large, since you write about 1700 bytes for every room (if you use byte aligned structs ) Some basic math tells you that 50 room will yield a 83 kb roomfile, which then will take some time to search through.

Share on other sites
Use strstreams.

Reality Makes Me XiC
I don''t do talk, I code: passion is my feul. Use my programs, experience beauty.
http://www.x-i-c.com/

Share on other sites
Thanx guys! I really appreciate it!

Share on other sites
Thanx guys! I really appreciate it!

• Forum Statistics

• Total Topics
628390
• Total Posts
2982412

• 10
• 9
• 19
• 24
• 11