290 likes | 401 Views
Fundamental File Processing Operations C++. File Processing. C++ Standard Input and Output. The stream model of text input/output. A text stream consists of a sequence of lines; A line consists of zero or more characters terminated with a newline ('<br>') character.
E N D
Fundamental File Processing OperationsC++ File Processing
C++ Standard Input and Output • The stream model of text input/output. • A text stream consists of a sequence of lines; • A line consists of zero or more characters terminated with a newline ('\n') character. • Even if the computer system does not conform to that model, the library must hide the deviations
C++ Standard Input and Output • C++ has three pre-opened streams as well: • cin • standard input • connected to keyboard • cout • standard output • connected to screen • cerr • standard output for error messages • to screen
File Access • Introduction • Writing cout (stdout) and reading from cin (stdinis) very similar to file I/O; • C++ (C) treats cin (stdin) and cout (stdout) as files. • The major difference is that cxxx (stdxxx) are already connected to the program (and opened) by the system
Input/Output Redirection • On MS-DOS and UNIX systems, prog > outfile.dat redirects all cin (stdout) output to 'outfile.dat'. • Likewise, input redirection prog1 < infile.dat • reads from 'infile.dat', for every cin (stdin) input.
Input/Output Redirection prog2 < infile.dat > outfile.dat • reads from ‘infile.dat’ and outputs to 'outfile.dat'.
File creation/replacement • In the previous examples: • if 'outfile.dat' exists, it is deleted and replaced, • if it does not exist, it is created.
File Appending • If you want to APPEND to the current 'outfile.dat', use • prog >> outfile.dat • (>> means append).
C++ header files • C • stdio.h - types and operations used for C streams • C++ • iostream.h - stream operations • fstream.h - file stream operations
C++ Stream classes • C++ streams are implemented as classes • ostream - output stream • istream - input stream • cin, cout, and cerr are three predefined instances of streams • cin - is an instance of istream • cout and cerr are instances of ostream • These streams are defined in iostream.h • File manipulation methods are defined in fstream.h
C++ Stream constructors • fstream (); • leave the stream unopened • fstream (char * filename, int mode); • open the file filename using mode mode • Mode integer defined as ios enumerators: • ios::in - open for input • ios:out - open for output • ios:trunc - (for output) discard contents • ios:app - (for output) append to the end of file • ios:nocreate - causes open to fail if file does not exist • ios:app - (for output) append to the end of file • ios:binary - opens in binary mode (text is default)
C++ Stream destructors • ~fstream(); • destroys the fstream object. File is closed of openned by the constructor or the open member function.
C++ Stream Methods • int open(char * filename, int mode); • int read(unsigned char * dest_addr, int size); • int write(unsigned char * source addr, int size) • Read and write allow for unformatted (raw) I/O
C++ Formatted Stream I/O operators • << • output to fstream • defined for all built in data types • >> • input from fstream • Also defined for all built in data types • It is important to understand that these operators format based on the passes datatype • Many modi
fstream subclasses • ifstream • for input • ios:in implied • ofstream • for output • ios:out implied • All the fstream methods are inherited.
Example: C++ File listing program #include <fstream.h> void main () { char ch; fstream file; // declare fstream unattached char filename[20]; cout <<"Enter the name of the file: " <<flush; // force output cin >> filename; file.open(filename, ios::in); file.unsetf(ios::skipws); // include white space in read while (1) { file >> ch; if (file.fail()) break; cout << ch; } file.close(); }
fstream Format manipulators • Stream I/O can be modified with the format manipulators setf and unsetf. • These functions set and clear bits in the format flags. • ios::setf(long iFlags); • ios::unsetf(lond iFlags); • Flags may be “or”ed together with the “|” operator • Example: • myfile.setf(ios::hex | ios::left);
fstream Format Flags • ios::skipws - Skip white space on input. • ios::left - Left align values; pad on the right with the fill character. • ios::right - Right align values; pad on the left with the fill character (default alignment). • ios::internal - Add fill characters after any leading sign or base indication, but before the value. • ios::dec - Format numeric values as base 10 (decimal) (default radix). • ios::oct - Format numeric values as base 8 (octal). • ios::hex - Format numeric values as base 16 (hexadecimal).
fstream Format Flags • ios::showbase - Display numeric constants in a format that can be read by the C++ compiler. • ios::showpoint - Show decimal point and trailing zeros for floating-point values. • ios::uppercase - Display uppercase A through F for hexadecimal values and E for scientific values. • ios::showpos - Show plus signs (+) for positive values. • ios::scientific - Display floating-point numbers in scientific format. • ios::fixed - Display floating-point numbers in fixed format. • ios::unitbuf - Cause ostream::osfx to flush the stream after each insertion. By default, cerr is unit buffered. • ios::stdio - Cause ostream::osfx to flush stdout and stderr after each insertion.
Seeking with C++ stream classes • Two forms: • file.seekg(long position); • file.seekg(long offset, origin); • position - position in file • offset - byte offset from origin • origin • ios::beg • ios:::cur • ios::end
C Command Line Parameters • Two values passed to main: • int argc - Number of command line arguments (including command) • char *argv[] - Array of pointers to parameter strings. • argc >=1 • *argv[0] is always a string containing the file name • *argv[1] is the first argument, and so on
String Handling • string.h definitions • char *strcat (char *dest, const char *src); • concatenate src to end of dest.
String Handling char *strncat(char *dest, const char *src, size_t maxlen); • concatenate maxlen chars of src onto dest.
String Handling char * strchr(const char *s, int c); • return pointer to first c in s, NULL if not present. char *strrchr(const char *s, int c); • return pointer to last c in s, NULL if not present.
String Handling int strcmp(const char *s1, const char *s2); • return negative if s1 lexically less than s2 • return 0 if s1==s2; • return positive if s1>s2.
String Handling int strncmp(const char *s1, const char *s2, size_t maxlen); • same as strcmp, but only uses n chars.
String Handling char *strcpy (char *dest, const char *src); • copy src to dest. char *strncpy(char *dest, const char *src, size_t maxlen); • same as strcpy, only n chars.
String Handling • size_t strlen (const char *s); • returns length of s;
Strings example main() { char name1[12],name2[12],mixed[25]; char title[20]; strcpy(name1,"Rosalinda"); strcpy(name2,"Zeke"); strcpy(title,"This is the title."); printf(" %s\n\n",title); printf("Name 1 is %s\n",name1); printf("Name 2 is %s\n",name2); if(strcmp(name1,name2)>0) /* returns 1 if name1 > name2 */ strcpy(mixed,name1); else strcpy(mixed,name2); printf("The biggest name alpabetically is %s\n",mixed); strcpy(mixed,name1); strcat(mixed," "); strcat(mixed,name2); printf("Both names are %s\n",mixed); }