EECE.2160 ECE Application Programming

Slides:



Advertisements
Similar presentations
Chapter 18 I/O in C. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Standard C Library I/O commands.
Advertisements

Files Programs and data are stored on disk in structures called files Examples Turbo C++ - binary file Word binary file lab1.c - text file lab1.data.
CMPE13 Cyrus Bazeghi Chapter 18 I/O in C. CMPE Standard C Library I/O commands are not included as part of the C language. Instead, they are part.
CP104 Introduction to Programming File I/O Lecture 33 __ 1 File Input/Output Text file and binary files File Input/output File input / output functions.
Chapter 18 I/O in C.
1 Lecture09: File I/O 5/6/2013 Slides modified from Yin Lou, Cornell CS2022: Introduction to C.
File IO and command line input CSE 2451 Rong Shi.
Digital Computer Concept and Practice Copyright ©2012 by Jaejin Lee C Language Part 4.
1 File Handling. 2 Storage seen so far All variables stored in memory Problem: the contents of memory are wiped out when the computer is powered off Example:
1 Lecture09: File I/O 11/19/2012 Slides modified from Yin Lou, Cornell CS2022: Introduction to C.
Files A collection of related data treated as a unit. Two types Text
Files. FILE * u In C, we use a FILE * data type to access files. u FILE * is defined in /usr/include/stdio.h u An example: #include int main() { FILE.
File Input/Output. File information Name z:\Visual Studio 2005\Projects\fileio\fileio\myinput.txt \\file-svr-1\class\ECE-160\pviall\myoutput.txt Read/Write.
ECE Application Programming
ECE Application Programming
ECE Application Programming
ECE Application Programming
Chapter 22 – part a Stream refer to any source of input or any destination for output. Many small programs, obtain all their input from one stream usually.
ECE Application Programming
ECE Application Programming
ECE Application Programming
Chapter 18 I/O in C.
CSC215 Lecture Input and Output.
Plan for the Day: I/O (beyond scanf and printf)
Computer Science 210 Computer Organization
EECE.2160 ECE Application Programming
Programming in C Input / Output.
Computer Science 210 Computer Organization
Programming in C Input / Output.
Files I/O, Streams, I/O Redirection, Reading with fscanf
CSC215 Lecture Input and Output.
File I/O in C Lecture 7 Narrator: Lecture 7: File I/O in C.
EECE.2160 ECE Application Programming
File Input and Output.
File Handling.
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
Programming in C Input / Output.
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
FILE handeling.
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
Instructor: Dr. Michael Geiger Spring 2017 Lecture 12: Exam 1 Preview
EECE.2160 ECE Application Programming
EECE.3220 Data Structures Instructor: Dr. Michael Geiger Spring 2019
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
I/O CS580U - Fall 2018.
EECE.2160 ECE Application Programming
Chapter 18 I/O in C.
Presentation transcript:

EECE.2160 ECE Application Programming Instructors: Dr. Michael Geiger Summer 2018 Lecture 12: File, character, and line I/O

ECE Application Programming: Lecture 11 Lecture outline Announcements/reminders Program 5 due today Program 6 to be posted; due Monday, 6/25 Exam 3: Monday, 7/2 Will be allowed one 8.5” x 11” note sheet Last day to submit programs: Tuesday, 7/3 Remaining programs: Two more required: 6 & 7 Program 7 this term will be Program 8 from spring Two extra credit: 8 & 9 Program 8 this term will be Program 7 from spring Today’s class PE4: Structures File, character, and line I/O 7/7/2019 ECE Application Programming: Lecture 11

ECE Application Programming: Lecture 21 Program 6 overview Read lines of text from input Use array to track # times each letter occurs in input text Use array contents to generate bar graph showing relative frequencies of each letter Gives you practice using arrays and functions 7/7/2019 ECE Application Programming: Lecture 21

Overall program structure main() should contain Array to track letter frequency: int myHist[26] Maximum value in array: int myMax Used to determine height of histogram output Program uses four commands ‘R’, ‘r’: Read a single line of input Call ReadText(myHist, &myMax); to read line ‘P’, ‘p’: Print histogram Call DrawHist(myHist, myMax); to print histogram ‘C’, ‘c’: Clear histogram (and max value) ‘Q’, ‘q’: Quit program Only error checking: invalid command All other input: reading characters, so no formatting errors You may ignore some characters, but they’re not errors 7/7/2019 ECE Application Programming: Lecture 21

ECE Application Programming: Lecture 21 ReadText() algorithm Read a single character If that character is a letter, update the appropriate entry in the histogram If that character is not a newline, return to step 1 and read another character Function should also update max value, either as it reads characters or after reading all input characters 7/7/2019 ECE Application Programming: Lecture 21

ECE Application Programming: Lecture 21 ReadText() hints <ctype.h> functions will help in ReadText() isalpha(ch): returns “true” if ch is letter, “false” otherwise Directly applies to one step on previous slide Converting each letter to same case makes it easier to find appropriate entry in histogram toupper(ch): returns uppercase letter if ch is lowercase letter; returns original ch otherwise toupper('x') = 'X'; toupper('A') = 'A' tolower(ch): returns lowercase letter if ch is uppercase letter; returns original ch otherwise tolower('x') = 'x'; tolower('A') = 'a' 7/7/2019 ECE Application Programming: Lecture 21

ReadText() hints (continued) Finding appropriate entry in histogram does not require conditional statement You shouldn’t need to compare your input character to anything to find correct array index Very basic “transformation” between ASCII value of letter and histogram index Can treat a char variable as either Character to be printed, or Integer value corresponding to printed character ASCII values Uppercase and lowercase letters separate Each set of letters is consecutive ‘A’ = 65, ‘B’ = 66, … ‘Z’ = 90 ‘a’ = 97, ‘b’ = 98, … ‘z’ = 122 7/7/2019 ECE Application Programming: Lecture 21

What not to do in ReadText() Using brute force method to find appropriate histogram index will incur -10 deduction Brute force methods basically compare input letter to all possible letters Prohibited brute force method #1: giant conditional statement switch(ch) { // ch = input char case ‘A’: case ‘a’: // modify histo[0] break; case ‘B’: case ‘b’: // modify histo[1] etc … } 7/7/2019 ECE Application Programming: Lecture 21

What not to do in ReadText() (cont) Using brute force method to find appropriate histogram index will incur -10 deduction Brute force methods basically compare input letter to all possible letters Prohibited brute force method #2: loop char test = ‘A’; for (i = 0; i < 26; i++) { if (ch == test) // modify histo[i] test++; // Change test } // to next letter 7/7/2019 ECE Application Programming: Lecture 21

ECE Application Programming: Lecture 21 DrawText() algorithm For each row of output For each entry in histogram If current entry is at least row #, print “| “ (bar & space) Otherwise, print “ “ (two spaces) Must print bar graph from top to bottom # rows based on max value in histogram Printing spaces necessary to get everything to line up 7/7/2019 ECE Application Programming: Lecture 21

Review: Nested structures Structures can contain other structures: typedef struct { char first[50]; // First name char middle; // Middle initial char last[50]; // Last name } Name; Name sname; // Student name unsigned int ID; // ID # double GPA; // Grade point } SINew; Will need multiple dot operators to access field within nested structure Given SINew s1; s1.sname  Name structure within s1 s1.sname.middle  middle initial of name within s1 7/7/2019 ECE Application Programming: Lecture 11

ECE Application Programming: Lecture 28 File information Name z:\Visual Studio 2010\Projects\fileio\fileio\myinput.txt Read/Write Type (binary or ASCII text) Access (security; single/multiple user) Position in file All above info is stored in a FILE type variable, pointed to by a file handle 7/7/2019 ECE Application Programming: Lecture 28

File i/o function calls FILE *fopen(fname, faccess) fname: name of file (e.g., "f1.txt") faccess: up to three characters, in double quotes First char: r/w/a (read/write/append) Write starts at beginning of file, append starts at end Either write or append creates new file if none exists Second (optional) char: + (update mode) Allows both reading and writing to same file Third (optional) char: b/t (binary/text) If text files, characters may be adapted to ASCII/Unicode Binary files are just raw bytes Returns FILE address if successful; NULL otherwise 7/7/2019 ECE Application Programming: Lecture 28

File i/o function calls fclose(FILE *file_handle) Closes a file Argument is address returned by fopen() Recommended for input files Required for output files O/S often doesn’t write last bit of file to disk until file is closed 7/7/2019 ECE Application Programming: Lecture 28

Example of basic file function usage void main() { FILE *fp; // Open text file for reading fp = fopen("in.txt", "r"); if (fp == NULL) { printf("Error: could not open in.txt"); return; } ... // CODE TO EXECUTE IF FILE OPENS fclose(fp); // Close file when done 7/7/2019 ECE Application Programming: Lecture 28

File i/o function calls: formatted I/O fprintf(file_handle, format_specifier, 0+ variables) file_handle: address returned by fopen() Other arguments are same as printf() Example: fprintf(fp, "x = %d", x); fscanf(file_handle, format_specifier, 0 or more variables) Other arguments are same as scanf() Example: fscanf(fp, "%d%d", &a, &b); 7/7/2019 ECE Application Programming: Lecture 29

ECE Application Programming: Lecture 29 Example: File I/O Write a program to: Read three integer values from the file myinput.txt Determine sum and average Write the original three values as well as the sum and average to the file myoutput.txt Note that: The program should exit if an error occurs in opening a file 7/7/2019 ECE Application Programming: Lecture 29

ECE Application Programming: Lecture 29 The program (part 1) #include <stdio.h> void main() { FILE *infile; // Input file pointer FILE *outfile; // Output file pointer int x, y, z, sum; // Input values and sum double avg; // Average of x, y, and z // Open input file, exit if error infile=fopen("myinput.txt","r"); if (infile==NULL) printf("Error opening myinput.txt\n"); return; } // Can actually open file as part of conditional statement if ((outfile=fopen("myoutput.txt","w"))==NULL) printf("Error opening myoutput.txt\n"); 7/7/2019 ECE Application Programming: Lecture 29

ECE Application Programming: Lecture 29 The program (part 2) // Read the three values fscanf(infile, "%d %d %d", &x, &y, &z); // Compute sum and average sum = x + y + z; avg = sum / 3.0; // print out values fprintf(outfile, "Values: %d, %d, %d\n", x, y, z); fprintf(outfile, "Sum: %d\n",sum); fprintf(outfile, "Avg: %lf\n",avg); // close the files fclose(infile); fclose(outfile); } 7/7/2019 ECE Application Programming: Lecture 29

File i/o function calls: unformatted I/O size_t fwrite(pointer, element size, # elements, file_handle) size_t fread(pointer, element size, # elements, file_handle) pointer: address of data to be read/written Typically an array, although can be scalar element size: Size of each element in array # elements: Number of elements in array file_handle: is address returned by fopen() Returns # of elements actually read/written If < # elements requested, either error or EOF 7/7/2019 ECE Application Programming: Lecture 29

Unformatted I/O (cont.) One benefit—ability to read/write entire array at once For example: Given int x[100]; Can read array from file pointed to by fp: n = fread(x, sizeof(int), 100, fp); n should equal 100 Can write array to file pointed to by fp: fwrite(x, sizeof(int), 100, fp); 7/7/2019 ECE Application Programming: Lecture 29

ECE Application Programming: Lecture 29 Generic I/O Three special I/O streams in C stdin: standard input stdout: standard output stderr: standard error stream printf(“Hello\n”) == fprintf(stdout, “Hello\n”); scanf(“%d”, &x) == fscanf(stdin, “%d”, &x); Can write generic functions that deal either with specific file or standard input/output 7/7/2019 ECE Application Programming: Lecture 29

ECE Application Programming: Lecture 29 End of file/error Two ways to check for end of file: Formatted I/O: Check if fscanf() == EOF More common: do fscanf() as part of loop condition, and continue while EOF not reached e.g. while (fscanf(fp, “%d”, &y) != EOF) Unformatted: feof(file_handle); Note: both functions indicate EOF after failed read operation Must try to read data and discover that there’s nothing to read before testing for EOF Checking for error (unformatted only): ferror(file_handle); 7/7/2019 ECE Application Programming: Lecture 29

ECE Application Programming: Lecture 30 Character I/O Output functions: send single character to output stream Not significantly different than using printf()/fprintf() int fputc(int c, FILE *stream); int putchar(int c); Macro: #define putchar(c) fputc((c), stdout) Input functions Read single character from input int fgetc(FILE *stream); int getchar(); Macro: #define getchar() fgetc(stdin) Return last character to input int ungetc(int c, FILE *stream); 7/7/2019 ECE Application Programming: Lecture 30

ECE Application Programming: Lecture 30 Common uses Read input character-by-character until EOF while ((ch = fgetc(fp)) != EOF) { … } Read character until it does not match format Example: read digits until first non-digit encountered while (isdigit(ch = fgetc(fp))) { … } ungetc(ch, fp); 7/7/2019 ECE Application Programming: Lecture 30

ECE Application Programming: Lecture 30 Line I/O Output functions Not significantly different than using printf()/fprintf() Write string + newline to stdout: int puts(const char *s); Write string (no guaranteed newline) to stream: int fputs(const char *s, FILE *stream); Input functions Could use scanf(“%[^\n]", str); Read line from stdin, up to first newline: char *gets(char *s); Read line from stream: char *fgets(char *s, int n, fgets() can limit # characters read Automatically null terminates, so it will read up to n-1 characters Will read newline 7/7/2019 ECE Application Programming: Lecture 30

ECE Application Programming: Lecture 30 Examples Show the output of the following short program Input: Test Input 1 23 4 5\n void main() { char c; char buffer[50]; int i; i = 0; while ((c = fgetc(stdin)) != '\n') { if (c != ' ') { buffer[i++] = c; } buffer[i] = '\0'; fputs(buffer, stdout); Output: TestInput12345 7/7/2019 ECE Application Programming: Lecture 30

ECE Application Programming: Lecture 30 Examples (cont.) Input: Test1 Test 2 abcdefghijklmnopqrstuvwxyz This is a test of the fgets() function void main() { char str[25]; int i; for (i = 0; i < 5; i++) { fgets(str, 24, stdin); strcat(str, "\n"); fputs(str, stdout); } Output: Test1 Test 2 abcdefghijklmnopqrstuvw xyz This is a test of the f 7/7/2019 ECE Application Programming: Lecture 30

ECE Application Programming: Lecture 30 Examples (cont.) Output: n = 1024, n * 2 = 2048 buffer = Some other stuff Input: 1024Some other stuff void main() { char c; char buffer[50]; int n = 0; // isdigit in <ctype.h> while (isdigit(c = getchar())) { n = n * 10 + (c - 48); // Hint: '0' = 48 } // (ASCII value) ungetc(c, stdin); fgets(buffer, 50, stdin); printf("n = %d, n * 2 = %d\n", n, n * 2); printf("buffer = %s\n", buffer); } 7/7/2019 ECE Application Programming: Lecture 30

ECE Application Programming: Lecture 11 Next time Bitwise operators Reminders: Program 5 due today Program 6 to be posted; due Monday, 6/25 Exam 3: Monday, 7/2 Will be allowed one 8.5” x 11” note sheet Last day to submit programs: Tuesday, 7/3 Remaining programs: Two more required: 6 & 7 Program 7 this term will be Program 8 from spring Two extra credit: 8 & 9 Program 8 this term will be Program 7 from spring 7/7/2019 ECE Application Programming: Lecture 11