Text File Reading Issue in C+

I have designed a linklist based BookStore in which book's attributes will be stored in a node & so on. Plus at the end of program, I have to save all database into text file *(I tried binary reading but damn I got me killed & couldn't do it)* & then reload all info, of each book one by one & store it in nodes & re-make the LinkList.

Now saving is done & no issue at all.
But Im having issues in reading from text file.

Saving structure in file is:::

BookID(int) - BookName(string) - Author(string) - BookType(string) - Copies(long) - Price(long) - '\n' (to go to next line)

EXAMPLE:
1 ObjectOrientedParadigm R.Lafore Coding 5 900
2 ObjectOrientedParadigm R.Lafore Coding 5 900
and so on......

Here is the saving function.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    bool BookStoreDataBase<mytype>::save_all_data()
    {
    	if(!is_Empty()) //if list is not empty
    	{
    		BOOK<mytype> *temp = head;   //created a copy of head
    		ofstream file("database.txt", ios_base::app); //created file, to write at the end (append)
    		while(temp != tail) //while list ends
    		{
    			file<<temp->ID<<' '<<temp->bookName<<' '<<temp->author<<' '<<temp->book_type<<' '<<temp->copies<<' '<<temp->price<<' ';  //write all info
    			temp = temp->next; //move temp to next node
    		}
    		file<<temp->ID<<' '<<temp->bookName<<' '<<temp->author<<' '<<temp->book_type<<' '<<temp->copies<<' '<<temp->price<<' '; //for last book's info
    		return true; //to confirm sucessfull writing
    	}
    	else //if list is empty
    	{
    		return false; //to confirm error in writing
    	}
    }


PROBLEM:: When I start reading, first line is read fine & stored in list, but for the next time, I can't make file to read from the next line, hence '\n'. & that creates the problem. File again reads the first line & 2nd node is created with same data.

Loading Function:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    void BookStoreDataBase<mytype>::load_all_data()
    {
    	int ID;			//variable to store ID of a book
    	string bookName;//string to store name of a book
    	string author;	//string to store name of author of book
    	string book_type;//string to store type of a book
    	long copies;	//variable to store no. of copies a book
    	long price;		//variable to store price of a book
    	string status;	//to store status of a book, either its in stock or not
    
    
    	ifstream file("database.txt");
    	while(file) //I have tried file.eof but its not working, don't know why
    	{
    		file>>ID>>bookName>>author>>book_type>>copies>>price>>status; //read file
    
    		BOOK<mytype> *temp = new BOOK<mytype>(0, 0, bookName, author, book_type, copies, price);  //create a new node in memory and save all the data
    
    		if(is_Empty()) //if list is empty, then make 1st node
    		{
    			head = tail = temp;
    		}
    		else //other wise make the next node
    		{
    			tail->next = temp;
    			temp->prev = tail;
    			tail = temp;
    		}
    	}
    }


MOREOVER
Reading is done 1 time less than the real record. i.e. If .txt has record of 4 books, then 3 nodes are created, (& info of only 1st is repeated in every node), whereas it should read & create 4 nodes!

Im a beginner, any good help will be much appreciated. Luv All!
The strings can have spaces.

When you read the string in, you'll get the first word, not the strings you wrote out.
Its solved. & Im not using getline to input strings, just cin>> .

1. I used stringstream mystr (#include<sstream>)
2. I was trying to read bookstatus in load function which was WRONG.
3. correct while condition -> while(file>>ID>>bookName>>author>>book_type>>copies>>price)
4. Into while, correct reading ->> mystr>>ID>>bookName>>author>>book_type>>copies>>price;
Topic archived. No new replies allowed.