1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Print last entered date from .txt file

  1. Dec 3, 2011 #1
    1. The problem statement, all variables and given/known data
    How do I retreat the last entered data from .txt file ?
    Code (Text):
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <cstdlib>
    using namespace std;
    void menu(int *);
    void option(fstream &, int *);
    int main()
    {
        int a, p;
        while(a== 1||2||3||4||5 )
        {
        menu(&a);
        fstream myfile;
        myfile.open("music.txt" , ios::app | ios::out);
        myfile.close();
        p=a;
        option(myfile, &p);
        }
        system("pause");
        return 0;
    }
    void menu(int *e)
    {
         cout<<"\n\nMusic index list \n"
             <<"---------------- \n"
             <<"1. Add new song title to index list file \n"
             <<"2. Print most recently added song title in index list file \n"
             <<"3. Print all the items from the index list file \n"
             <<"4. Delete all of the items on the index list file \n"
             <<"5. Quit \n\n";
         cin>>*e;
         cout<<endl<<endl;
    }
    void option(fstream &myfile, int *p)
    {
         char ch;
         string line;
         int pass;
         
         switch (*p)
         {
                case 1:
                     {
                     myfile.open("music.txt", ios::app | ios::out);
                     cout<<"Please end the title with a period . \n";
                     cout<<"What is the new title ?\n ";
                     cin.get(ch);
                     while (ch != '.')
                     {
                           myfile.put(ch);
                           cin.get(ch);
                     }
                     myfile.put(ch);
                     myfile.close();
                     break;
                     }
                case 2:
                     {
                     myfile.open("music.txt", ios::out);    //Need to print the last song title from the file
                     
                     myfile.close();
                     break;
                     }
                case 3:
                     {
                     cout<<"My music: \n";
                     myfile.open("music.txt");
                     if (myfile.is_open())
                     {
                     while (myfile.good())
                     {
                     getline (myfile, line);
                     cout<<line<<endl;
                     }
                     myfile.close();
                     }
                     else cout<<"Unable to open file.\n";
                     break;
                     }
                case 4:
                     {
                     cout<<"Warning, confirm to delete.\n"
                         <<"Please press 1. \n";
                     cin>>pass;
                     if(pass==1)
                     {
                     myfile.open("music.txt", ios::out);
                     cout<<"Data deleting......\n";
                     myfile.close();
                     }
                     else
                     cout<<"Try again.\n";
                     break;
                     }
                case 5:
                     {
                     cout<<"warning, program to be closed.\n";
                      exit(0);
                      }
         }
    }
         
                     
             
         
     
     
    Last edited by a moderator: Dec 4, 2011
  2. jcsd
  3. Dec 4, 2011 #2

    Mark44

    Staff: Mentor

    Are you asking how to retrieve the last-entered song title? If so, you could write a while loop that reads and saves in a variable a line of data at a time from the file (using ifstream::getline()). The loop should run until ios::eof() returns true. When ios::eof() returns true, you have reached the end of the file, and the variable holds the last string that was read.

    Some comments on your code:
    1) a, p, and e are really dumb names for variables. It's impossible to tell what they are supposed to represent. Use longer names that are more explanatory.
    2) This code doesn't do what you think it's doing.
    Code (Text):
    while(a== 1||2||3||4||5 )
    {
       ...
    }
     
    The while loop will continue executing if a is any positive integer. You need to check the boolean expressions separately: (a == 1) || (a == 2) || etc.

    3. Why are you opening the music.txt file so many times? I count five calls to myfile.open( ... ).

    4. Your fourth menu item (delete the file) doesn't do anything useful. Maybe you just don't have that fully implemented yet.
     
  4. Dec 4, 2011 #3
    Thank you for you suggestion. Those tips really helpful. I'm still a beginner.


    Reply 1 : I agree with you. Those are really dumb variables. I apologize for giving trouble to you or whoever who read this codes.

    Reply 2 : You are right. Thank you so much.

    Reply 3 : The reason I open multiple of myfile.open(), is to put different access flag , to carry out their specific function.

    Reply 4 : The fourth menu option is to clear the entered items on .txt .
     
  5. Dec 4, 2011 #4

    Mark44

    Staff: Mentor

    I see that, but you still might be opening the file more than you need to. I don't think that you need to open the file in main() at all, since you are opening it several times in your option function.
    But it says it is deleting the items in the file, but all it really does is close the file.
    Code (Text):
    case 4:
    {
        cout<<"Warning, confirm to delete.\n"
        <<"Please press 1. \n";
        cin>>pass;
        if(pass==1)
       {
           myfile.open("music.txt", ios::out);
           cout<<"Data deleting......\n";
           myfile.close();
       }
       else
           cout<<"Try again.\n";
       break;
    }
     
     
  6. Dec 5, 2011 #5
    "I see that, but you still might be opening the file more than you need to. I don't think that you need to open the file in main() at all, since you are opening it several times in your option function."

    Reply: I was requested to do that , by my professor. ^.^ I am sorry for ambiguousness . Thank you, by the way.

    But it says it is deleting the items in the file, but all it really does is close the file.
    Code (Text):
    case 4:
    {
        cout<<"Warning, confirm to delete.\n"
        <<"Please press 1. \n";
        cin>>pass;
        if(pass==1)
       {
           myfile.open("music.txt", ios::out);
           cout<<"Data deleting......\n";
           myfile.close();
       }
       else
           cout<<"Try again.\n";
       break;
    }
     
    Reply: I thought access flag " ios::eek:ut", was supposed to erase everything on the .txt when the program runs
     
  7. Dec 5, 2011 #6

    Mark44

    Staff: Mentor

    OK, I think you're right. If you open a file for output, that effectively wipes out the previous contents of the file.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook