CS215 - Lec 3 single record operations


Published on

File organization course: operations for reading and writing a single record on disk

Published in: Technology, Education
1 Like
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

CS215 - Lec 3 single record operations

  1. 1. Writing and reading data back from a file. Extraction operator VS getline function. Write a single record on a file. Read a single record from a file. Build Company class. Overload operators for the Company class. Build template for programs. Dr. Hussien M. Sharaf 2
  2. 2. What is the problem with reading data from files? Since we are reading from files in form of streams of bytes therefore we can not differentiate between tokens. Fortunately, the extraction operator in C++ can tokenize streams. But some fields could include more than one token. Dr. Hussien M. Sharaf 3 Hussien M. Sharaf dr.sharaf@from-masr.com811 CS215 Name EmailID Course
  3. 3. Dr. Hussien M. Sharaf 4
  4. 4. ofstream: Stream class to write on files ifstream: Stream class to read from files fstream: Stream class to both read and write from/to files. Dr. Hussien M. Sharaf 5
  5. 5. Write the previous data into a text file then try reading using: 1. Method: .get (buf,'n'); 2. Method: .getline (buf,'n'); 3. Function: getline (ifstream, string_Line,'n');
  6. 6. // Write a text file #include <iostream> #include <fstream> #include <string> using namespace std; int main () { string line,token; char buf[1000]; ofstream myfilePut ("example.txt",ios::trunc); if (myfilePut.is_open()) { myfilePut<<"Hussien M. Sharafn"; } Dr. Hussien M. Sharaf 7 myfilePut.close(); ifstream myfileGet ("example.txt"); if (myfileGet.is_open()) { while (! myfileGet.eof()) { //myfileGet >>token; myfileGet.get (buf,'n'); line=buf; myfileGet.seekg(0,ios::beg); myfileGet.getline (buf,'n'); line=buf; cout << line<< endl; }
  7. 7. //clear flags any bad operation myfileGet.clear(); myfileGet .seekg(0,ios::beg ); getline (myfileGet,line,'n'); cout << line<< endl; //clear flags any bad operation myfileGet.clear(); myfileGet .seekg(0,ios::beg ); //use exttaction op to read into buf while (! myfileGet.eof()) { myfileGet>>buf; cout << buf<< endl; } Dr. Hussien M. Sharaf 8 //clear flags any bad operation myfileGet.clear(); myfileGet .seekg(0,ios::beg ); //use exttaction op to read into string while (! myfileGet.eof()) { myfileGet>>line; cout << line<< endl; } myfileGet .close(); } else cout << "Unable to open file"; system("Pause"); return 0;}
  8. 8. Try reading using: 1. Extraction op. 2. Function: getline (ifstream,string_Line,'n'); myfileGet>>line; getline (myfileGet,line,'n'); Does the extraction op. identify separators other then space?
  9. 9. Dr. Hussien M. Sharaf 10 It was noticed that the extraction operator “>>” reads until first token separator [space, “,”, “;”, TAB, “r” ] What are your suggestions for reading a collection of fields?
  10. 10. #include <iostream> #include <fstream> #include <string> using namespace std; string ExtendstringLength(string In, int requiredSize, string appendchar) { while (In.length()<requiredSize ) In=In.append(appendchar); return In; } int main () { string line,token; int ID; string FullName,Course,Email; char buf[1000]; ID=811; Dr. Hussien M. Sharaf 11 Course="CS215"; FullName ="Hussien M. Sharaf"; Email="dr.sharaf@from-masr.com"; Course.append("@"); FullName=ExtendstringLength(FullNam e,20,"@"); Email = ExtendstringLength(Email,50,"@"); ofstream myfilePut ("example.txt",ios::trunc); if (myfilePut.is_open()) { myfilePut<<ID<<Course<<FullName<< Email ; } myfilePut.close();
  11. 11. ifstream myfileGet ("example.txt"); if (myfileGet.is_open()) { myfileGet>>ID; cout << ID<< endl; myfileGet>>Course ; cout << Course << endl; //clear flags any bad operation myfileGet.clear(); myfileGet .seekg(0,ios::beg ); myfileGet>>ID; cout << ID<< endl; myfileGet.get( buf,7) ; Course=buf; Dr. Hussien M. Sharaf 12 Course=Course.substr(0,5); cout << Course << endl; myfileGet.get( buf,21) ; FullName=buf; FullName =FullName.erase(FullName.find("@")); cout << FullName<< endl; myfileGet.get( buf,51) ; Email=buf; Email=Email.erase(Email.find("@")); cout << Email<< endl; } system("Pause"); return 0; }
  12. 12. Dr. Hussien M. Sharaf 14 What are the required fields? And what are their types? 1. CompanyName 2. ContactName 3. TitleofBusiness 4. Address 5. City 6. ZipCode 7. Phone 8. Fax 9. Email 10. WebSite 11. CompanyCode 12. CompanyDescription
  13. 13. Each field is qualified by double quotes “. A screen shot of a file sample
  14. 14. #include <iostream> using namespace std; class Company{ string CompanyCode, CompanyDescription ,CompanyName, ContactName, TitleofBusiness, Address,City, ZipCode, Phone, Fax, Email, WebSite; }; 1. Write default constructor, copy constructor. 2. Overload “=” operator and “==” [optional] 3. Overload “<<” and “>>” for ostream and istream. 4. Write a driver that uses the above class to read a single line that contain all fields of a company. Each field is quoted by double quotes “field_Value” and separated from the next field by a comma , Example: "155","All",“A-z Maintenance",“Malek",“-","902 Bestel Avenue - Garden Grove“,.. Dr. Hussien M. Sharaf 16
  15. 15. Dr. Hussien M. Sharaf 17 User Interface Classes containing any processing of data
  16. 16. //Declarations while (ExitProgram!=true) { //take user choice switch (UserChoice) { case 'I': case 'i': //handle user Choice case'E': case'e':ExitProgram=true; break; } } system("pause"); Dr. Hussien M. Sharaf 18
  17. 17. 1. Start by determining Output. 2. List the inputs. 3. Think about processing.
  18. 18. Check Ex 3: Continue building a class for CompanyInfo: 1. Write default constructor, copy constructor. 2. Overload “=” operator and “==” [optional] 3. Overload “<<” and “>>” for ostream and istream and use the delimiter method for reading and writing each field. Each field is required to be enclosed inside two double quotes i.e “…..” Write a driver to use this class based on the template Menu. Dr. Hussien M. Sharaf 20
  19. 19. Next week is the deadline. No excuses. Don’t wait until last day. I can help you to the highest limit within the next 3 days. Dr. Hussien M. Sharaf 21
  20. 20. 1. Delete the “bin” and “obj” folders. 2. Compress the solution folder using winrar. 3. Rename the compressed file as follows: StudentName_ID_A3.rar 4. Email to: n.abdelhameed@fci-cu.edu.eg with your ID in the subject. 5. With subject: “FO – Assignment#3 -ID” Dr. Hussien M. Sharaf 22