Transcript PPT

CS 1620

File I/O

 So far this semester 

all input has been from keyboard

all output has been to computer screen

 these are just two examples of where to retrieve/send data

 ifstream – Input File Stream 

reads input from the location of your choice

ifstream

is a type

 declare variables of type

ifstream

 use variable for file input

 1.

2.

3.

4.

5.

Steps to read from a file: declare a variable

infile

of type ifstream call

infile.open

, and send the filename as its parameter check to see if the open command worked with

infile.fail

use

infile

to read in data call

infile.close

stream to close the

ifstream infile; infile.open("prices.dat"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } // read data from infile infile.close();

ifstream variable

 declared like any other variable ifstream infile;  can use any legal variable name that you like  I will use

infile

for all of my examples ifstream kev; // legal, but not a good choice kev.open("kev.txt");  requires #include

 .open

takes a null-terminated character array as input

 string literal: infile.open("prices.dat");  character array variable char filename[] = "prices.dat"; infile.open(filename);  will a string variable work?

string filename = "prices.dat"; infile.open(filename);

 c_str     a string variable does not hold a

null-terminated

character array string data type provides a member function called

c_str()

returns a null-terminated character array representing the string to use, just affix

.c_str()

to the variable name string filename = "prices.dat"; infile.open(filename.c_str());

.fail

 returns

true

if the file has been opened, false otherwise

if (infile.fail()) { cout << "File failed to open" << endl; exit(1); }

 

exit

terminates the program, and returns its argument value to the operating system must

#include

to use

exit

 .close

closes the current file stream

infile.close(); 

good programming practice to close files when you're done with them

 O/S only allows finite number of open files

 Example 1: Open a file called "prices.dat". If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

 Example 1: Open a file called "prices.dat". If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

#include #include #include using namespace std; int main() {

ifstream infile; infile.open("prices.dat"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } cout << "File successfully opened!" << endl; infile.close();

return 0; }

 Example 1: Open a file called "prices.dat". If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

#include #include #include using namespace std; int main() {  1.

ifstream infile; 2.

infile.open("prices.dat"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } 3.

4.

cout << "File successfully opened!" << endl; 5.

infile.close(); return 0; } Steps to read from a file: declare a variable

infile

of type ifsteam call

infile.open

, and send the filename as its parameter check to see if the open command worked with

infile.fail

use

infile

to read in data call

infile.close

to close the stream

 Example 1: Open a file called "prices.dat". If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

#include #include #include using namespace std; 

1.

int main() {

ifstream infile;

2.

infile.open("prices.dat"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } 3.

4.

cout << "File successfully opened!" << endl; 5.

infile.close(); return 0; } Steps to read from a file:

declare a variable infile of type ifsteam

call

infile.open

, and send the filename as its parameter check to see if the open command worked with

infile.fail

use

infile

to read in data call

infile.close

to close the stream

 Example 1: Open a file called "prices.dat". If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

#include #include #include using namespace std; int main() {  1.

ifstream infile;

2.

infile.open("prices.dat");

if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } 3.

4.

cout << "File successfully opened!" << endl; 5.

infile.close(); return 0; } Steps to read from a file: declare a variable

infile

of type ifsteam

call infile.open, and send the filename as its parameter

check to see if the open command worked with

infile.fail

use

infile

to read in data call

infile.close

to close the stream

 Example 1: Open a file called "prices.dat". If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

#include #include #include using namespace std; int main() {  1.

ifstream infile; 2.

infile.open("prices.dat");

if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } 3.

4.

cout << "File successfully opened!" << endl; 5.

infile.close(); return 0; } Steps to read from a file: declare a variable

infile

of type ifsteam call

infile.open

, and send the filename as its parameter

check to see if the open command worked with

infile.fail

use

infile

to read in data call

infile.close

to close the stream

 Example 1: Open a file called "prices.dat". If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

#include #include #include using namespace std; int main() {  1.

ifstream infile; 2.

infile.open("prices.dat"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } 3.

4.

cout << "File successfully opened!" << endl;

5.

infile.close(); return 0; } Steps to read from a file: declare a variable

infile

of type ifsteam call

infile.open

, and send the filename as its parameter check to see if the open command worked with

infile.fail

use infile to read in data

call

infile.close

to close the stream

 Example 1: Open a file called "prices.dat". If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

#include #include #include using namespace std; int main() {  1.

ifstream infile; 2.

infile.open("prices.dat"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } 3.

4.

cout << "File successfully opened!" << endl;

5.

infile.close();

return 0; } Steps to read from a file: declare a variable

infile

of type ifsteam call

infile.open

, and send the filename as its parameter check to see if the open command worked with

infile.fail

use

infile

to read in data

call infile.close to close the stream

 Example 2: Read a filename from the user, and open that file for reading. If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

 Read a filename from the user, and open that file for reading. If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

// included libraries: iostream, fstream, cstlib, string int main() { string filename; cout << "Please enter the name of the file: "; cin >> filename; ifstream infile; infile.open(filename.c_str()); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } cout << "File successfully opened!" << endl; infile.close(); return 0; }

Read a filename from the user

, and open that file for reading. If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

// included libraries: iostream, fstream, cstlib, string int main() {

string filename; cout << "Please enter the name of the file: "; cin >> filename;

ifstream infile; infile.open(filename.c_str()); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } cout << "File successfully opened!" << endl; infile.close(); return 0; }

 Read a filename from the user, and open that file for reading. If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

// included libraries: iostream, fstream, cstlib, string int main() { string filename; cout << "Please enter the name of the file: "; cin >> filename

; ifstream infile;

infile.open(filename.c_str()); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } cout << "File successfully opened!" << endl; infile.close(); return 0; }

 Read a filename from the user, and open that file for reading. If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

// included libraries: iostream, fstream, cstlib, string int main() { string filename; cout << "Please enter the name of the file: "; cin >> filename

;

ifstream infile;

infile.open(filename.c_str());

if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } cout << "File successfully opened!" << endl; infile.close(); return 0; }

 Read a filename from the user, and open that file for reading. If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

// included libraries: iostream, fstream, cstlib, string int main() { string filename; cout << "Please enter the name of the file: "; cin >> filename

;

ifstream infile; infile.open(filename.c_str());

if (infile.fail()) { cout << "File failed to open" << endl; exit(1); }

cout << "File successfully opened!" << endl; infile.close(); return 0; }

 Read a filename from the user, and open that file for reading. If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

// included libraries: iostream, fstream, cstlib, string int main() { string filename; cout << "Please enter the name of the file: "; cin >> filename

;

ifstream infile; infile.open(filename.c_str()); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); }

cout << "File successfully opened!" << endl;

infile.close(); return 0; }

 Read a filename from the user, and open that file for reading. If the file opens, print the message "File successfully opened!". If not, print "File failed to open".

// included libraries: iostream, fstream, cstlib, string int main() { string filename; cout << "Please enter the name of the file: "; cin >> filename

;

ifstream infile; infile.open(filename.c_str()); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } cout << "File successfully opened!" << endl;

infile.close();

return 0; }

 How to read from a file 

ifstream

is a subtype of

istream

 this means that anything you can do with an istream, you can do with an ifstream 

cin

is an istream

hence, any operation supported by cin, is also supported by

infile

 the >> operator  getline

 Example: Read in three values from a file called "data.txt", and print out the average of those three values.

 Example: Read in three values from a file called "data.txt", and print out the average of those three values.

// included libraries: iostream, fstream, cstlib int main() { ifstream infile; infile.open("test.txt"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); }

double val1, val2, val3; infile >> val1 >> val2 >> val3;

values goes here!

cout << "The average of these values is: " << (val1 + val2 + val3)/3 << endl;

infile.close(); return 0; }

 Example: Read in three values from a file called "data.txt", and print out the average of those three values.

// included libraries: iostream, fstream, cstlib int main() { ifstream infile; infile.open("test.txt"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } double val1, val2, val3; cin >> val1 >> val2 >> val3; cout << "The average of these values is: " << (val1 + val2 + val3)/3 << endl; infile.close(); return 0; } If we were reading from the keyboard, code would look like this:

 Example: Read in three values from a file called "data.txt", and print out the average of those three values.

// included libraries: iostream, fstream, cstlib int main() { ifstream infile; infile.open("test.txt"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } double val1, val2, val3;

cin

>> val1 >> val2 >> val3; cout << "The average of these values is: " << (val1 + val2 + val3)/3 << endl; infile.close(); return 0; } Replace

cin

with

infile

, and you'll read from the file, instead of the keyboard.

 Example: Read in three values from a file called "data.txt", and print out the average of those three values.

// included libraries: iostream, fstream, cstlib int main() { ifstream infile; infile.open("test.txt"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } double val1, val2, val3;

infile

>> val1 >> val2 >> val3; cout << "The average of these values is: " << (val1 + val2 + val3)/3 << endl; infile.close(); return 0; } Replace

cin

with

infile

, and you'll read from the file, instead of the keyboard.

 Example: Read in three values from a file called "data.txt", and print out the average of those three values.

// included libraries: iostream, fstream, cstlib int main() { ifstream infile; infile.open("test.txt"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } double val1, val2, val3; infile >> val1 >> val2 >> val3; cout << "The average of these values is: " << (val1 + val2 + val3)/3 << endl; infile.close(); return 0; }

 File Input: Unknown file size 

Example: read in all of the numbers from a file, and print their average.

 Example: Read in three values from a file called "data.txt", and print out the average of those three values.

// included libraries: iostream, fstream, cstlib int main() { ifstream infile; infile.open("test.txt"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } double val1, val2, val3; infile >> val1 >> val2 >> val3; cout << "The average of these values is: " << (val1 + val2 + val3)/3 << endl; infile.close(); return 0; } This accommodates exactly three values.

• if "test.txt" contains more than 3 values, they are ignored • if "test.txt" contains less than 3 values, program doesn't fill

val3.

 Solution: 

loop through all values in the file

 add each value read to a variable

total

 count the number of values read 

divide

total

by the number of values read

// included libraries: iostream, fstream, cstlib int main() { ifstream infile; infile.open("test.txt"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } double total = 0; int count = 0; infile >> val; while ( ) { total += val; count++; infile >> val; } if (count == 0) { cout << "No values to average!" << endl; } else { cout << "The average of these values is: " << total / count << endl; } infile.close(); What goes here?

 .eof() 

.eof() returns true when the file has been read past its end

 typical format for .eof() loops 

Step 1: read a value from filestream

Step 2: while ( filestream.eof() is not true)

 Step 2.1 Do something with value  Step 2.2 read another value from filestream

// included libraries: iostream, fstream, cstlib int main() { ifstream infile; infile.open("test.txt"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } double total = 0; int count = 0; infile >> val; while ( ) { total += val; count++; infile >> val; } if (count == 0) { cout << "No values to average!" << endl; } else { cout << "The average of these values is: " << total / count << endl; } infile.close(); Step 1: read a value from filestream Step 2: while ( filestream.eof() is not true) Step 2.1 Do something with value Step 2.2 read another value from filestream

// included libraries: iostream, fstream, cstlib int main() { ifstream infile; infile.open("test.txt"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } double

val

, total = 0; int count = 0;

infile >> val;

while ( ) { total += val; count++; infile >> val; } if (count == 0) { cout << "No values to average!" << endl; } else { cout << "The average of these values is: " << total / count << endl; } infile.close();

Step 1: read a value from filestream

Step 2: while ( filestream.eof() is not true) Step 2.1 Do something with value Step 2.2 read another value from filestream

// included libraries: iostream, fstream, cstlib int main() { ifstream infile; infile.open("test.txt"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } double val, total = 0; int count = 0; infile >> val;

while ( !infile.eof() ) {

total += val; count++; infile >> val;

}

if (count == 0) { cout << "No values to average!" << endl; } else { cout << "The average of these values is: " << total / count << endl; } infile.close(); Step 1: read a value from filestream

Step 2: while ( filestream.eof() is not true)

Step 2.1 Do something with value Step 2.2 read another value from filestream

// included libraries: iostream, fstream, cstlib int main() { ifstream infile; infile.open("test.txt"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } double val, total = 0; int count = 0; infile >> val; while ( !infile.eof() ) {

total += val; count++;

infile >> val; } if (count == 0) { cout << "No values to average!" << endl; } else { cout << "The average of these values is: " << total / count << endl; } infile.close(); Step 1: read a value from filestream Step 2: while ( filestream.eof() is not true)

Step 2.1 Do something with value

Step 2.2 read another value from filestream

// included libraries: iostream, fstream, cstlib int main() { ifstream infile; infile.open("test.txt"); if (infile.fail()) { cout << "File failed to open" << endl; exit(1); } double val, total = 0; int count = 0; infile >> val; while ( !infile.eof() ) { total += val; count++;

infile >> val;

} if (count == 0) { cout << "No values to average!" << endl; } else { cout << "The average of these values is: " << total / count << endl; } infile.close(); Step 1: read a value from filestream Step 2: while ( filestream.eof() is not true) Step 2.1 Do something with value

Step 2.2 read another value from filestream

File Output

 so far, all of our information has gone to the screen  we can redirect this to a file, in a similar manner as redirecting input from a file  use

ofstream

variable 

ofstream

is a type, of subtype

ostream

  

cout

is an ostream variable anything you can do with cout, you can do with an ofstream variable this includes <<, and all formatting flags

 1.

2.

3.

4.

5.

Steps to write to a file: declare a variable

outfile

of type ofstream call

outfile.open

, and send the filename as its parameter check to see if the open command worked with

outfile.fail

use

outfile

to output data call

outfile.close

to close the stream

ofstream outfile; outfile.open("prices.dat"); if (outfile.fail()) { cout << "File failed to open" << endl; exit(1); } // write data to outfile outfile.close();

 Example: Write your name, address, and phone number to a file called "name.txt"

// included libraries: iostream, fstream, cstlib int main() { ofstream outfile; outfile.open("name.txt"); if (outfile.fail()) { } cout << "File failed to open" << endl; exit(1); If we were writing to the screen, we would do this.

cout << "Kevin Grant" << endl; cout << "1234 Main Street" << endl; cout << "Disneyland, California, 90210" << endl; cout << "(123) 456-7890" << endl; outfile.close(); return 0; }

// included libraries: iostream, fstream, cstlib int main() { ofstream outfile; outfile.open("name.txt"); if (outfile.fail()) { cout << "File failed to open" << endl; exit(1); } Replace

outfile

cout cout cout cout

<< "Kevin Grant" << endl; << "1234 Main Street" << endl; << "Disneyland, California, 90210" << endl; << "(123) 456-7890" << endl; outfile.close();

cout

with return 0; }

// included libraries: iostream, fstream, cstlib int main() { ofstream outfile; outfile.open("name.txt"); if (outfile.fail()) { cout << "File failed to open" << endl; exit(1); }

outfile outfile outfile outfile

<< "Kevin Grant" << endl; << "1234 Main Street" << endl; << "Disneyland, California, 90210" << endl; << "(123) 456-7890" << endl; outfile.close(); return 0; }

name.txt

Kevin Grant 1234 Main Street Disneyland, California, 90210 (123) 456-7890

 Example: Copy the contents of a file called "input.txt" to a file called "output.txt"  Steps: 

1) Open a file called

input.txt

for reading

2) Open a file called

output.txt

for writing

3) Write each line in

input.txt

to

output.txt

4) Close files

// included libraries: iostream, fstream, cstlib, string int main() {

1) Open a file called

input.txt

for reading 2) Open a file called

output.txt

for writing 3) Write each line in

input.txt

to

output.txt

4) Close files

} return 0;

// included libraries: iostream, fstream, cstlib, string int main() {

1) Open a file called input.txt for reading

2) Open a file called

output.txt

for writing 3) Write each line in

input.txt

to

output.txt

4) Close files

} return 0;

// included libraries: iostream, fstream, cstlib, string int main() {

ifstream infile; infile.open("input.txt"); if (infile.fail()) { cout << "input.txt failed to open." << endl; exit(1); }

2) Open a file called

output.txt

for writing 3) Write each line in

input.txt

to

output.txt

4) Close files

} return 0;

// included libraries: iostream, fstream, cstlib, string int main() { ifstream infile; infile.open("input.txt"); if (infile.fail()) { cout << "input.txt failed to open." << endl; exit(1); }

2) Open a file called output.txt for writing

3) Write each line in

input.txt

to

output.txt

4) Close files

} return 0;

// included libraries: iostream, fstream, cstlib, string int main() { ifstream infile; infile.open("input.txt"); if (infile.fail()) { cout << "input.txt failed to open." << endl; exit(1); }

ofstream outfile; outfile.open("output.txt"); if (outfile.fail()) { cout << "output.txt failed to open." << endl; exit(1); }

3) Write each line in

input.txt

to

output.txt

}

4) Close files

return 0;

// included libraries: iostream, fstream, cstlib, string int main() { ifstream infile; infile.open("input.txt"); if (infile.fail()) { cout << "input.txt failed to open." << endl; exit(1); } ofstream outfile; outfile.open("output.txt"); if (outfile.fail()) { cout << "output.txt failed to open." << endl; exit(1); }

3) Write each line in input.txt to output.txt

}

4) Close files

return 0;

// included libraries: iostream, fstream, cstlib, string int main() { ifstream infile; infile.open("input.txt"); if (infile.fail()) { cout << "input.txt failed to open." << endl; exit(1); } ofstream outfile; outfile.open("output.txt"); if (outfile.fail()) { cout << "output.txt failed to open." << endl; exit(1); }

3) For each line in input.txt 3.1) Write line to output.txt

}

4) Close files

return 0;

// included libraries: iostream, fstream, cstlib, string int main() { ifstream infile; infile.open("input.txt"); if (infile.fail()) { cout << "input.txt failed to open." << endl; exit(1); } ofstream outfile; outfile.open("output.txt"); if (outfile.fail()) { cout << "output.txt failed to open." << endl; exit(1); }

3) For each line in input.txt

3.1) Write line to

output.txt

}

4) Close files

return 0; Step 1: read a value from filestream Step 2: while ( filestream.eof() is not true) Step 2.1 Do something with value Step 2.2 read another value from filestream

// included libraries: iostream, fstream, cstlib, string int main() { ifstream infile; infile.open("input.txt"); if (infile.fail()) { cout << "input.txt failed to open." << endl; exit(1); } ofstream outfile; outfile.open("output.txt"); if (outfile.fail()) { cout << "output.txt failed to open." << endl; exit(1); }

string buffer; getline(infile, buffer);

}

while ( !infile.eof() ) { }

3.1) Write line to

output.txt

getline(infile, buffer);

4) Close files return 0;

// included libraries: iostream, fstream, cstlib, string int main() { ifstream infile; infile.open("input.txt"); if (infile.fail()) { cout << "input.txt failed to open." << endl; exit(1); } ofstream outfile; outfile.open("output.txt"); if (outfile.fail()) { cout << "output.txt failed to open." << endl; exit(1); } string buffer; getline(infile, buffer); } while ( !infile.eof() ) {

3.1) Write line to output.txt

getline(infile, buffer); } 4) Close files return 0;

// included libraries: iostream, fstream, cstlib, string int main() { ifstream infile; infile.open("input.txt"); if (infile.fail()) { cout << "input.txt failed to open." << endl; exit(1); } ofstream outfile; outfile.open("output.txt"); if (outfile.fail()) { cout << "output.txt failed to open." << endl; exit(1); } string buffer; getline(infile, buffer); } while ( !infile.eof() ) {

outfile << buffer << endl;

getline(infile, buffer); } 4) Close files return 0;

// included libraries: iostream, fstream, cstlib, string int main() { ifstream infile; infile.open("input.txt"); if (infile.fail()) { cout << "input.txt failed to open." << endl; exit(1); } ofstream outfile; outfile.open("output.txt"); if (outfile.fail()) { cout << "output.txt failed to open." << endl; exit(1); } string buffer; getline(infile, buffer); } while ( !infile.eof() ) { outfile << buffer << endl; getline(infile, buffer); }

4) Close files

return 0;

// included libraries: iostream, fstream, cstlib, string int main() { ifstream infile; infile.open("input.txt"); if (infile.fail()) { cout << "input.txt failed to open." << endl; exit(1); } ofstream outfile; outfile.open("output.txt"); if (outfile.fail()) { cout << "output.txt failed to open." << endl; exit(1); } string buffer; getline(infile, buffer); } while ( !infile.eof() ) { outfile << buffer << endl; getline(infile, buffer); }

infile.close(); outfile.close();

return 0;