Presentation is loading. Please wait.

Presentation is loading. Please wait.

CSC 107 – Programming For Science. Today’s Goal  Get familiar with opening & closing files  Declaring variables for use with files  Using variables.

Similar presentations


Presentation on theme: "CSC 107 – Programming For Science. Today’s Goal  Get familiar with opening & closing files  Declaring variables for use with files  Using variables."— Presentation transcript:

1 CSC 107 – Programming For Science

2 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 ALL  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

3 Image To Sharpen  I have a (fuzzy) 1024 x 768 picture to sharpen 786,432  Only 786,432 numbers to type in to yesterday's lab  Will also need to click each pixel to update with result

4 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

5 This Is (Semi-Real) Problem  Large hadron collider eventually work as designed  No black hole when smashing particles at high speeds 28.5 GB/min  Creates 28.5 GB/min for nerds seeking truth & beauty

6 This Is (Semi-Real) Problem  Large hadron collider eventually work as designed  No black hole when smashing particles at high speeds 28.5 GB/min  Creates 28.5 GB/min for nerds seeking truth & beauty  Hired trained monkeys to type all 244,813,135,872 bits

7 This Is (Semi-Real) Problem  Large hadron collider eventually work as designed  No black hole when smashing particles at high speeds 28.5 GB/min  Creates 28.5 GB/min for nerds seeking truth & beauty  Hired trained monkeys to type all 244,813,135,872 bits college students

8 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

9 Program Basics For Files  All built-in file I/O code means adding to header #include #include  Place with other #include s 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

10 Opening a File  To use file, we need variable to use in program  Numbers, cStrings, and booleans mixed in the file  Previous type (& arrays) do not make sense to use  C++ provides new types to refer to file itself

11 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 ofstream to write to file

12 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 variables  Cannot assign variables but can use as parameters files are NOT numbers  Cannot use in equations: files are NOT numbers ofstream fout; ifstream fin; ofstream bob, bill, babs, barb; ifstream thisIsAFileVariable; ofstream monkey = "foo.txt"; ifstream fourFile = 4;

13 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 variables  Cannot assign variables but can use as parameters files are NOT numbers  Cannot use in equations: files are NOT numbers ofstream fout; ifstream fin; ofstream bob, bill, babs, barb; ifstream thisIsAFileVariable; ofstream monkey = "foo.txt"; ifstream fourFile = 4;

14 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 variables  Cannot assign variables but can use as parameters files are NOT numbers  Cannot use in equations: files are NOT numbers ofstream fout; ifstream fin; ofstream bob, bill, babs, barb; ifstream thisIsAFileVariable; ofstream monkey = "foo.txt"; ifstream fourFile = 4;

15 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

16 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

17 Opening the File  Can open file when variable declared char nameLoc[] = "bobbobbob"; char sndName[] = "csi.txt"; ifstream fin("image.dat"); ofstream fout(nameLoc); ifstream bobism(sndName); ofstream cookies(“nomnomnom.txt");  Even after declaration, files can be opened ifstream because; ofstream isaidso; because.open("mightMakes.right"); cin >> sndName; isaidso.open(sndName);

18 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

19 Examples of is_open char sndName[]; ifstream because, foo("foo.txt"); ofstream isaidso, bar("snafu"); cout > sndName; isaidso.open(sndName); cout << because.is_open() << endl; cout << isaidso.is_open() << endl;

20 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?

21 Oops!

22 Opening a File  Within program, may use file in 2 possible ways  To read file, ifstream variables will be needed  Need variable of type ofstream to write to file

23 Opening a File  Within program, may use file in 2 possible ways  To read file, ifstream variables will be needed  Need variable of type ofstream to write to file  Open ofstream 2 different ways depending on use ofstream nukeIt("byebye.txt"); ofstream begone; begone.open("erasedOld.dat"); ofstream keepIt("saved", ios::app); ofstream faithAlone; faithAlone.open("preserve", ios::app); 3

24 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 ofstream giants("nlChamp"); ifstream yankees("evilEmpire"); phillies.close(); yankees.close();

25 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

26 Today's Key Point

27 What Are cin & cout ?  Statement needed for most file I/O #include  To use cin & cout we must have statement: #include

28 What Are cin & cout ?  Statement needed for most file I/O #include  To use cin & cout we must have statement: #include  There is a method: similarity not an accident  cin & cout are file variables defined by system

29 What Are cin & cout ?  Statement needed for most file I/O stream #include  To use cin & cout we must have statement: stream #include  There is a method: similarity not an accident  cin & cout are file variables defined by system

30 Deep in Bowels of iostream  In iostream find 2 lines to be included in code: ifstream cin( ); ofstream cout( );  Already written code reading from a file  Use ifstream like cin to read ASCII text in a file  Also know how to write ASCII text to a file  As with cout, ofstream s writes text to a file

31 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

32 Read File W/ ifstream Variable  Used to read one or more values at once: ifstream myFile; 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

33 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 fancier

34 Print to File With ostream  Easy to output: output via ostream variable ofstream outFile; 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 fancier

35 See How Easy It Is? #include #include using namespace std; int main(void) { int sum = 0; int val; cout > val; while (val != -1) { sum += val; cout > val; } return 0; }

36 See How Easy It Is? #include #include using namespace std; int main(void) { ifstream fin; ofstream fout; int sum = 0; int val; fout > val; while (val != -1) { sum += val; fout > val; } return 0; }

37 And When We Run It? #include #include using namespace std; int main(void) { ifstream fin; ofstream fout; int sum = 0; int val; fout > val; while (val != -1) { sum += val; fout > val; } return 0; }

38 And When We Run It?

39 Must Open File Before Using  How file opened unimportant, just that is open  Open when declared, by giving file name as cString ifstream bobIn("file.txt"); ofstream whyNot(stringFromUser);  Open open later in program using open() routine bobIn.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

40 See How Easy It Is? #include #include using namespace std; int main(void) { int sum = 0; int val; cout > val; while (val != -1) { sum += val; cout > val; } return 0; }

41 See How Easy It Is? #include #include using namespace std; int main() { int sum = 0; int val; cout > val; while (val != -1) { sum += val; cout > val; } return 0; }

42 See How Easy It Is? #include #include using namespace std; int main() { ifstream myFile("numbers.txt"); ofstream yNot("sums.out"); if (myFile.is_open() && yNot.is_open()) { int sum = 0; int val; yNot > val; while (val != -1) { sum += val; yNot > val; } } return 0; }

43 See How Easy It Is? #include #include using namespace std; int main() { ifstream myFile("numbers.txt"); ofstream yNot("sums.out"); if (myFile.is_open() && yNot.is_open()) { int sum = 0; int val; cout > val; while (val != -1) { sum += val; yNot > val; } } return 0; }

44 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

45 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

46 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

47 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

48 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

49 Your Turn  Get into your groups and try this assignment

50 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 #3 available Friday


Download ppt "CSC 107 – Programming For Science. Today’s Goal  Get familiar with opening & closing files  Declaring variables for use with files  Using variables."

Similar presentations


Ads by Google