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!

C++: File I/O

  1. May 11, 2012 #1

    Dembadon

    User Avatar
    Gold Member

    1. The problem statement, all variables and given/known data

    I am trying to write a quick program that will let me experiment with some different file I/O functions. I want to practice taking data from a file, loading it into a 2D array, then performing some analysis on the data obtained from the file.

    I have created a .txt file with some sample data, but I am not getting output when I run the program.

    I am using Dev-C++ as my compiler.

    2. Relevant equations

    Contents of the text file, which I have named "testfile.txt":

    Code (Text):

    1, 1, 23
    0, 2, 22
    0, 3, 55
    1, 4, 10
    1, 5, 3
    1, 6, 44
    0, 7, 23
    1, 8, 25
    1, 9, 22
    0, 10, 26
    1, 11, 27
    1, 12, 99
    0, 13, 62
    1, 14, 45
     
    The first value for each line indicates whether the data values that follow are good. Zero indicates bad data, while 1 indicates good data. I am calling the second data value on each line time, and the third speed.


    3. The attempt at a solution

    Here is my program:

    Code (Text):
    // Headers ////////////////////////////////////////////////////////////////////

    #include <iostream>
    #include <fstream>

       using namespace std;

    // Global Constants //////////////////////////////////////////////////////////

       const int MAX_STR_LEN = 80;
       const int MAX_ROWS = 50;
       const int MAX_COLS = 2;
       const int TIME = 0;
       const int SPEED = 1;
       const char COMMA = ',';

    // Funtion Prototypes ////////////////////////////////////////////////////////

    /*
    name: uploadData
    process: obtains good data from file: first value for each line in the file
             indicates if the data is good or not. 1 = good, 0 = bad
    input: data array to be created, file name, number of good data lines
    output: upload success or failure, number of rows in final array (by reference)
    dependencies: fstream
    */
    bool uploadData( int data[][ MAX_COLS ], char fileName[], int &size );

    /*
    name: displayData
    process: prints data that has been stored by uploadData to the screen as it appears
             in the file
    input: data array, size of data array, time and speed values (columns)
    */
    void displayData( int data[][ MAX_COLS ], int numData, int numCols );

    // Main Function //////////////////////////////////////////////////////////////

    int main()
       {
        // initialize function/variables
        char fileName[ MAX_STR_LEN ];  
        int data[ MAX_ROWS ][ MAX_COLS ];
        int numData = 0;

        // prompt user for file name
        cout << "Please enter filename: ";
        cin >> fileName;

        // check for bad file name
        if( !uploadData( data, fileName, numData ) )
           {
            cout << "ERROR: Data upload failed - Program aborted." << endl;
            cout << "Please check the file name and try again." << endl;
            system( "pause" );
            return 0;
           }
        // output data to console
        displayData( data, numData, MAX_COLS );

        // hold screen for user
        system( "pause" );
        return 0;
       }

    // Supporting Functions ///////////////////////////////////////////////////////

    bool uploadData( int data[][ MAX_COLS ], char fileName[], int &size )
       {
        // initialize function/variables
        int rowIndex = 0, badSpeed, badTime, numData = 0, testVal;
        bool success = false;
        char dummyChar;
        ifstream fin;

        // clear and open file
        fin.clear();
        fin.open( fileName );

        // test for a good filename
        if( fin.good() )
           {
            // prime loop
            fin >> testVal >> dummyChar;

            // loop through the file
            while( fin.good() )
               {
                // test for good data value
                if( testVal == 1 )
                   {
                    // grab rest of line and assign to array postions
                    fin >> data[ rowIndex ][ TIME ] >> dummyChar;
                    fin >> data[ rowIndex ][ SPEED ];

                    // increment rowIndex
                    rowIndex++;

                    // set success flag
                    success = true;
                   }
                // otherwise skip line in the file
                else
                   {
                    fin >> badTime >> dummyChar >> badSpeed;
                   }
                // attempt to read more data
                fin >> testVal >> dummyChar;
               }
            // end loop
           }
        // set size
        numData = rowIndex;

        // close file
        fin.close();

        // return success    
        return success;
       }

    void displayData( int data[][ MAX_COLS ], int numData, int numCols )
       {
        // initialize function/variables
        int rowIndex, colIndex;

        // loop through the rows
        for( rowIndex = 0; rowIndex < numData; rowIndex++ )
           {
            // loop through the columns
            for( colIndex = 0; colIndex < MAX_COLS; colIndex++ )
               {
                // output comma-separated values to the screen
                cout << data[ rowIndex ][ TIME ] << COMMA;
                cout << data[ rowIndex ][ SPEED ] << endl;
               }
           }
       }
     
     
    Last edited: May 11, 2012
  2. jcsd
  3. May 11, 2012 #2

    Dembadon

    User Avatar
    Gold Member

    Just figured out what was going on. My reference parameter for the size of my 2D array is mislabeled. :redface:

    Edit: Also just realized the 2nd for loop in my display function is completely superfluous and causing double output. :redface:2
     
    Last edited: May 11, 2012
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: C++: File I/O
Loading...