500 likes | 612 Views
CSC 107 – Programming For Science. Lecture 33: Using File I/O. Today’s Goal. Get familiar with opening & closing files Declaring variables for use with files Using variables to open files for reading & writing Closing files and understand why you should do so
E N D
CSC 107 – Programming For Science Lecture 33: Using File I/O
Today’s Goal • Get familiar withopening & closing files • Declaring variables for use with files • Using variables to open files for reading & writing • Closing files and understand why you should do so • Understand what it means: ALL I/O is file I/O • Common bugs to avoid when coding with files in C++ • Get a better understanding of what >> & << do • cin, cout are variables: know what their types are
Image To Sharpen • I have a (fuzzy) 1024 x 768 picture to sharpen • Only 786,432 numbers to type in to yesterday's lab • Will also need to click each pixel to update with result
More Data Entry Positions • Testing improved jet designs for oeingB-ay • Using program to simulate designs' lift & drag • 5 possible designs (each 150MB) to test this iteration • Once results available, will tweak & retest designs • Need room of touch typists for all this data entry
This Is (Semi-Real) Problem • Large hadron collider eventuallywork as designed • No black hole when smashing particles at high speeds • Creates 28.5 GB/minfor nerds seeking truth & beauty
This Is (Semi-Real) Problem • Large hadron collider eventuallywork as designed • No black hole when smashing particles at high speeds • Creates 28.5 GB/minfor nerds seeking truth & beauty • Hired trained monkeys to type all 244,813,135,872 bits
This Is (Semi-Real) Problem • Large hadron collider eventuallywork as designed • No black hole when smashing particles at high speeds • Creates 28.5 GB/minfor nerds seeking truth & beauty • Hired trained monkeys to type all 244,813,135,872 bits college students
Yeah, Right • Real world demands we use files for most I/O • Data files used to start and/or end most projects • May contain: game levels, analysis results, CCD pics • Way to read & write files needed to be useful
Program Basics For Files • All built-in file I/O code means adding to header #include <fstream> • Place with other #includes to use files in program • Even if no files are used, no cost to adding this line • Must specify namespace of file I/O code, also • If you really want, this can do this individually but… using namespace std; …much easier and probably habit by now anyway
Opening a File • To use file, we need variable to use in program • Numbers, cStrings, and booleansmixed in the file • Previous type (& arrays) do not make sense to use • C++ provides new types to refer to file itself
Types Used For Files • Within program, may use file in 2 possible ways • To read file, ifstream variables will be needed • Need variable of type ofstreamto write to file
File Variable Declaration • Types are new, but still just declaring variables • Requires type &name of variable being declared • Names for human use; normal scoping rules apply • Cannot assign variablesbut can use as parameters • Cannot use in equations: files are NOT numbers ofstreamfout; ifstream fin; ofstream bob, bill, babs, barb; ifstreamthisIsAFileVariable; ofstream monkey = "foo.txt"; ifstreamfourFile = 4;
File Variable Declaration • Types are new, but still just declaring variables • Requires type &name of variable being declared • Names for human use; normal scoping rules apply • Cannot assign variablesbut can use as parameters • Cannot use in equations: files are NOT numbers ofstreamfout; ifstream fin; ofstream bob, bill, babs, barb; ifstreamthisIsAFileVariable; ofstream monkey = "foo.txt"; ifstreamfourFile = 4;
File Variable Declaration • Types are new, but still just declaring variables • Requires type &name of variable being declared • Names for human use; normal scoping rules apply • Cannot assign variablesbut can use as parameters • Cannot use in equations: files are NOT numbers ofstreamfout; ifstream fin; ofstream bob, bill, babs, barb; ifstreamthisIsAFileVariable; ofstream monkey = "foo.txt"; ifstreamfourFile = 4;
Name That File • Two ways to open a file once we have the name • No matter which used, must know name of file • Defaults to current directory, if only a name specified • By including in name, can use other directories • No standard way to do this – depends on the OS
Name That File • Two ways to open a file once we have the name • No matter which used, must know name of file • Defaults to current directory, if only a name specified • By including in name, can use other directories • No standard way to do this – depends on the OS
Opening the File • Can open file when variable declared char nameLoc[] = "bobbobbob";char sndName[] = "csi.txt";ifstreamfin("image.dat");ofstreamfout(nameLoc);ifstreambobism(sndName);ofstreamcookies(“nomnomnom.txt"); • Even after declaration, files can be opened ifstreambecause;ofstreamisaidso;because.open("mightMakes.right");cin >> sndName;isaidso.open(sndName);
Did I Do Good? • May not always be successful opening a file • Cannot open and read file that does not exist • May not have permission to access a certain file • Cannot do impossible & write to nonexistent drive • Use built-in is_open function to check this • Called in manner similar to cout functions like setf • If variable attached to open file, function returns true • Returns false if variable not used to open file, yet • If attempt to open file fails, will also return false
Examples of is_open char sndName[];ifstreambecause, foo("foo.txt");ofstreamisaidso, bar("snafu");cout << because.is_open() << endl;cout << foo.is_open() << endl;cout << bar.is_open() << endl;because.open("mightMakes.right");cin >> sndName;isaidso.open(sndName);cout << because.is_open() << endl;cout << isaidso.is_open() << endl;
Upon Opening The Location Is… • Once open, read & write from start of file • As logical a choice as any other location to start at • If reading, can start getting all data from file • When writing to existing file what will happen?
Opening a File • Within program, may use file in 2 possible ways • To read file, ifstream variables will be needed • Need variable of type ofstreamto write to file
Opening a File 3 • Within program, may use file in 2 possible ways • To read file, ifstream variables will be needed • Need variable of type ofstreamto write to file • Open ofstream 2 different ways depending on use ofstreamnukeIt("byebye.txt");ofstreambegone;begone.open("erasedOld.dat");ofstreamkeepIt("saved", ios::app);ofstreamfaithAlone;faithAlone.open("preserve", ios::app);
Closing File • Important to close files once you are done • Program will delay saving data to make it faster • Crashes cause data loss if saves had been waiting • Until file is closed may be locked from other uses • Immediately saved on close, so insures data is safe • Can open more files if limit of open files reached ofstreamgiants("nlChamp");ifstreamyankees("evilEmpire");phillies.close();yankees.close();
Today's Key Point • Because of its history, all C++ I/O is file based • Obvious when file is source of data or target of write • But also true when reading from keyboard • Writing to screen also considered file I/O
Today's Key Point You've been coding with files since day 1
What Are cin & cout? • Statement needed for most file I/O #include <fstream> • To use cin & coutwe must have statement: #include <iostream>
What Are cin & cout? • Statement needed for most file I/O #include <fstream> • To use cin & coutwe must have statement: #include <iostream> • There is a method: similarity not an accident • cin & cout are file variables defined by system
What Are cin & cout? • Statement needed for most file I/O #include <fstream> • To use cin & coutwe must have statement: #include <iostream> • There is a method: similarity not an accident • cin & cout are file variables defined by system
Deep in Bowels of iostream • In iostream find 2 lines to be included in code: ifstreamcin( ); ofstreamcout( ); • Already written code reading from a file • Use ifstream like cinto read ASCII text in a file • Also know how to write ASCII text to a file • As with cout,ofstreamswrites text to a file
Read User's Typing With cin • Used to read one or more values at once: cin >> variable;cin >> variable1 >> variable2; • Starts where last read stopped reading input • Automatically skips past whitespace • Data type of variable determines what is read • Stops at first non-usable value found in the input • If input is not usable, will set variable equal to 0
Read File W/ifstreamVariable • Used to read one or more values at once: ifstreammyFile;myFile >> variable;myFile >> variable1 >> variable2; • Starts where last read stopped reading input • Automatically skips past whitespace • Data type of variable determines what is read • Stops at first non-usable value found in the input • If input is not usable, will set variable equal to 0
Print to Screen Using cout • Easy to output: print text using cout cout << “Hello World” << endl; • Prints out whatever is placed between quotes • Value of variable printed if variable not in quotes • Use escape sequences for fancier text output \n newline (move to start of next line)\t tab (go to next column that is multiple of 8) • Output using #include <iomanip>fancier
Print to File With ostream • Easy to output: output via ostreamvariable ofstreamoutFile;outFile << “Hello World” << endl; • Prints out whatever is placed between quotes • Value of variable printed if variable not in quotes • Use escape sequences for fancier text output \n newline (move to start of next line)\t tab (go to next column that is multiple of 8) • Output using #include <iomanip>fancier
See How Easy It Is? #include <iostream>#include <fstream>using namespace std;intmain(void) {int sum = 0;intval;cout<< "-1 to quit or sum nums typed" << endl;cin>> val; while (val != -1) { sum += val;cout<< val << endl;cin>> val; } return 0;}
See How Easy It Is? #include <iostream>#include <fstream>using namespace std;intmain(void) {ifstream fin;ofstreamfout;int sum = 0;intval;fout<< "-1 to quit or sum nums typed" << endl;fin >> val; while (val != -1) { sum += val;fout<< val << endl;fin >> val; } return 0;}
And When We Run It? #include <iostream>#include <fstream>using namespace std;intmain(void) {ifstream fin;ofstreamfout;int sum = 0;intval;fout<< "-1 to quit or sum nums typed" << endl;fin >> val; while (val != -1) { sum += val;fout<< val << endl;fin >> val; } return 0;}
Must Open File Before Using • How file opened unimportant, just that is open • Open when declared, by giving file name as cStringifstreambobIn("file.txt");ofstreamwhyNot(stringFromUser); • Open open later in program using open() routinebobIn.open(nameOfDataFile);whyNot.open("averagesWeCompute"); • Variable must refer to open file or else it crashes • Often add check with is_open() to protect from crashs
See How Easy It Is? #include <iostream>#include <fstream>using namespace std;intmain(void) {int sum = 0;intval;cout<< "-1 to quit or sum nums typed" << endl;cin>> val; while (val != -1) { sum += val;cout<< "Sum: " << val << endl;cin>> val; } return 0;}
See How Easy It Is? #include <iostream>#include <fstream>using namespace std;intmain() {intsum = 0;intval;cout<< "-1 to quit or sum nums typed" << endl;cin>> val; while (val != -1) { sum += val;cout<< "Sum: " << val << endl;cin>> val; }return 0;}
See How Easy It Is? #include <iostream>#include <fstream>using namespace std;intmain() {ifstreammyFile("numbers.txt");ofstreamyNot("sums.out");if (myFile.is_open() && yNot.is_open()) {int sum = 0;intval;yNot<< "-1 to quit or sum nums typed" << endl;myFile>> val; while (val != -1) { sum += val;yNot<< "Sum: " << val << endl;myFile>> val; } }return 0;}
See How Easy It Is? #include <iostream>#include <fstream>using namespace std;intmain() {ifstreammyFile("numbers.txt");ofstreamyNot("sums.out");if (myFile.is_open() && yNot.is_open()) {int sum = 0;intval;cout<< "-1 to quit or sum nums typed" << endl;myFile>> val; while (val != -1) { sum += val;yNot<< "Sum: " << val << endl;myFile>> val; } }return 0;}
Variables are Variables • Like all variables, can use files as parameters • Argument must also be file variable for it to compile • Reading & writing continues through the function • Can only go forward in file no matter what • Within the function, "file position marker" continues • Cannot unring bell, does not overwrite file on return • As with cin to read, will not reread after function
But… • Like all variables, can use files as parameters • Argument must also be file variable for it to compile • Reading & writing continues through the function • Can only go forward in file no matter what • Within the function, "file position marker" continues • Cannot unring bell, does not overwrite file on return • As with cin to read, will not reread after function
But… • Like all variables, can use files as parameters • Argument must also be file variable for it to compile • Reading & writing continues through the function • Can only go forward in file no matter what • Within the function, "file position marker" continues • Cannot unring bell, does not overwrite file on return • As with cin to read, will not reread after function
Butt… • Like all variables, can use files as parameters • Argument must also be file variable for it to compile • Reading & writing continues through the function • Can only go forward in file no matter what • Within the function, "file position marker" continues • Cannot unring bell, does not overwrite file on return • As with cin to read, will not reread after function
Variables are Variables • Like all variables, can use files as parameters • Argument must also be file variable for it to compile • Reading & writing continues through the function • Can only go forward in file no matter what • Within the function, "file position marker" continues • Cannot unring bell, does not overwrite file on return • As with cin to read, will not reread after function PARAMETER MUST BE PASS-BY-REFERENCE
Your Turn • Get into your groups and try this assignment
For Next Lecture • Another use of data files in Section 17.1-17.3 • Must we use text or are there faster approaches? • What was the point of learning binary numbers? • Could we predict size of file we read/write in program? • Weekly Assignment uses Xcode this week • Submit via e-mail; CloudCoder cannot use files • Programming Assignment #3available Friday