#include #include #include #include #include #include using namespace std; const int NumRows = 50; const int NumCols = 7; int getDataFromFile(int [][NumCols], const string& filename); void printData(int [][NumCols], int NumRows); int getMonthNumberFromString(const string& month); string getMonthFromNumber(int num); int main() { int data[NumRows][NumCols]; int numNumRowsFromFile; string filename("appledata.txt"); numNumRowsFromFile = getDataFromFile(data,filename); printData(data,numNumRowsFromFile); } // returns number of records read into array int getDataFromFile(int data[][NumCols], const string& filename) { ifstream fin(filename.c_str()); int month, day, year; int recordCount = 0; // counter for number of records in input file float floatTemp; int intTemp; char commaBuffer[5]; if (!fin) { cerr << "Unable to open file " << filename << endl; exit(1); } // discard headings string buffer; getline(fin,buffer); while (!fin.eof()) { // get month fin >> buffer; if (fin.eof() || recordCount == NumRows) break; month = getMonthNumberFromString(buffer); // get the day of the month fin.get(commaBuffer, sizeof(commaBuffer),','); fin.get(); day = atoi(commaBuffer); // get the year fin >> year; data[recordCount][0] = 10000 * year + 100 * month + day; // Get next 5 float columns for (int i = 1; i <= 5; i++) { fin >> floatTemp; data[recordCount][i] = static_cast(round(floatTemp*100)); } // Get volume, remove commas fin.getline(commaBuffer, sizeof(commaBuffer),','); data[recordCount][6] = 1000000 * (atoi(commaBuffer) % 100); fin.getline(commaBuffer, sizeof(commaBuffer),','); data[recordCount][6] += 1000 * atoi(commaBuffer); fin >> intTemp; data[recordCount][6] += intTemp; recordCount++; } return recordCount; } // Returns the month number for month string int getMonthNumberFromString(const string& month) { if (month == "Jan") return 1; if (month == "Feb") return 2; if (month == "Mar") return 3; if (month == "Apr") return 4; if (month == "May") return 5; if (month == "Jun") return 6; if (month == "Jul") return 7; if (month == "Aug") return 8; if (month == "Sep") return 9; if (month == "Oct") return 10; if (month == "Nov") return 11; if (month == "Dec") return 12; return 0; } // Returns the month string for the month number string getMonthFromNumber(int num) { const string month[12] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep", "Oct","Nov","Dec"}; return month[num-1]; } // Prints the array values in the original format void printData(int data[][NumCols], int NumRows) { int monthNum; cout << setprecision(2) << fixed << setfill('0'); for (int i = 0; i< NumRows; i++) { // Print date monthNum = data[i][0] / 100 % 100; cout << getMonthFromNumber(monthNum) << ' ' << setw(2) << data[i][0]%100 << ", " << data[i][0] / 10000 << '\t'; // Print 5 $ floating point columns for (int col = 1; col <= 5 ; col++) cout << data[i][col]/100.f << '\t'; // Print volume data with commas cout << data[i][6]/1000000 << ',' << setw(3) << data[i][6]/1000 % 1000 << ',' << setw(3) << data[i][6] % 1000 << endl; } }