Presentation is loading. Please wait.

Presentation is loading. Please wait.

CNG 140 C Programming (Lecture set 10) Spring 2006-2007 Chapter 10 Data Files.

Similar presentations


Presentation on theme: "CNG 140 C Programming (Lecture set 10) Spring 2006-2007 Chapter 10 Data Files."— Presentation transcript:

1 CNG 140 C Programming (Lecture set 10) Spring 2006-2007 http://www.ceng.metu.edu.tr/~bozyigit/cng140 Chapter 10 Data Files

2 CNG140 C Programming2 Objectives Declaring, Opening, and Closing File Streams Reading from and Writing to Text Files Random File Access Passing and Returning Filenames Case Study: Creating and Using a Table of Constants Common Programming and Compiler Errors

3 CNG140 C Programming3 Declaring, Opening, and Closing File Streams To store and retrieve data outside a C program, you need two items: –A file –A file stream

4 CNG140 C Programming4 Files File: collection of data that is stored together under a common name, usually on a disk, magnetic tape, or CD-ROM Each file has a unique filename, referred to as the file’s external name –For example, prices.dat and info.txt

5 CNG140 C Programming5 Files (continued)

6 CNG140 C Programming6 Files (continued) Most C compilers require a program file to have either the extension c or cpp There are two basic types of files –Text files (also known as character-based files): store each individual character, such as a letter, digit, dollar sign, decimal point, and so on, using an individual character code –Binary files: use the same code as your computer processor uses internally for C’s primitive data types Advantage: speed and compactness

7 CNG140 C Programming7 File Streams File stream: one-way transmission path used to connect a file stored on a physical device to a program Input file stream: receives data from a file into a program Output file stream: sends data to a file

8 CNG140 C Programming8 File Streams (continued)

9 CNG140 C Programming9 Declaring a File Stream For each file that your program uses, a file stream must be named (declared) and created (opened) Naming a file stream is accomplished by declaring a pointer type variable name to be of type FILE –FILE *inFile; Asterisk is necessary Name is selected by programmer and internal to the program The FILE data structure is declared in stdio.h

10 CNG140 C Programming10 Opening a File Stream Opening a file stream (or opening the file): –Establishes the physical communication link between the program and the data file –Equates a specific external filename to the name declared in the FILE declaration statement and known by the program to use for I/O. Use fopen() (declared in stdio.h ) to open a file: As an output file to write to –outFile = fopen("prices.bnd","w"); As output binary to write to –fileOut = fopen("prices.dat", "wb"); As input file to input –inFile = fopen("prices.bnd","r"); If a file opened for reading does not exist, fopen() returns the NULL address value

11 CNG140 C Programming11 Opening a File Stream (continued)

12 CNG140 C Programming12 Exit (1) passes its integer argument directly to the operating system and then terminates program operation; declared in stdlib.h if ((inFile = fopen("prices.dat","r")) == NULL ) Opening a File Stream (continued)

13 CNG140 C Programming13 Opening an output File Stream for an existing file Approach in Program 10.1 does not work for output files –If a file exists having the same name as the file to be opened for writing, the existing file is erased and all its data is lost –The file can first be opened in input mode, simply to see if it exists If it does, the user is given the choice of explicitly permitting it to be overwritten when it is subsequently opened in output mode

14 CNG140 C Programming14 Opening a File Stream (continued)

15 CNG140 C Programming15 Sample run 1: A file by the name prices.dat exists. Do you want to continue and overwrite it with the new data (y or n): n The existing file will not be overwritten. Sample run 2: A file by the name prices.dat exists. Do you want to continue and overwrite it with the new data (y or n): y The file has been successfully opened for output. Opening a File Stream (continued)

16 CNG140 C Programming16 Embedded and Interactive Filenames File name can be max 12 characters long

17 CNG140 C Programming17 Embedded and Interactive Filenames (continued)

18 CNG140 C Programming18 Closing a File Stream A file stream is closed using fclose() –fclose() breaks the link between the file’s external and internal names, releasing the internal file pointer name, which can then be used for another file –fclose(inFile); Because all computers have a limit on the maximum number of files that can be open at one time, closing files that are no longer needed makes good sense Open files existing at the end of normal program execution are closed by the operating system

19 CNG140 C Programming19 Reading from and Writing to Text Files (continued)

20 CNG140 C Programming20 Reading from and Writing to Text Files Prototypes in stdio.h Examples –fputc('a',outFile); –fputs("Hello world!",outFile); –fprintf(outFile,"%s %n",descrip,price);

21 CNG140 C Programming21 prices.dat : Batteries 39.25 Bulbs 3.22 Fuses 1.03 Writing to Text Files: output file

22 CNG140 C Programming22 Reading from and Writing to Text Files: EOF C appends the low-value hexadecimal byte 0x00 as the end-of-file (EOF) sentinel when the file is closed EOF sentinel is never counted as part of the file fgetc() and fscanf() return the named constant EOF when the marker is detected. The function fgets() returns a NULL(’\0’) when it detects end of the file.

23 CNG140 C Programming23 Content of a Text Files: The file is appended 0x00 to serve EOF

24 CNG140 C Programming24 Reading from a Text File Prototypes in stdio.h Examples –fgetc(inFile); –fgets(message,10,inFile); –fscanf(inFile,"%lf",&price);

25 CNG140 C Programming25 Reading from a Text File (continued)

26 CNG140 C Programming26 Reading from a Text File: use gets

27 CNG140 C Programming27 Standard Device Files When a program is run, the keyboard used for entering data is automatically opened and assigned to the internal file pointer name stdin –fscanf(stdin,"%d",&num); The output device used for display is assigned to the file pointer named stdout –fprintf(stdout,"Hello World!"); stderr is assigned to the output device used for system error messages –stderr and stdout often refer to the same device

28 CNG140 C Programming28 Standard Device Files (continued) The character function pairs listed in Table 10.2 can be used as direct replacements for each other –puts() and fputs() write all the characters in the string except end-of-string NULL, puts() automatically puts new line sequence at the end, fputs() does not. This is not true for the string-handling functions –fgets() stores new line with other characters, gets() does not store new line characters

29 CNG140 C Programming29 Standard Device Files and I/O functions

30 CNG140 C Programming30 Random file access With random access any byte from the starting of a file is access directly. To do random reading one must be able to go back and forward in a sequential file. This is possible with some special function calls. One could move backward in the file as well as forward relative to a reference point, which could be beginning, end or current position….

31 CNG140 C Programming31 Random File Access functions rewind() resets the current position to the start of the file –rewind(inFile) fseek() allows the programmer to move to any position in the file –fseek(fileName, offset, origin) –Offset has to be long integer –Origin: SEEK_SET, SEEK_CUR, and SEEK_END ftell() returns the offset value of the next character that will be read or written –ftell(inFile);

32 CNG140 C Programming32 Random File Access (continued) Examples of fseek() are –fseek(inFile,4L,SEEK_SET); /* go to the 5 th cha*/ –fseek(inFile,4L,SEEK_CUR); –fseek(inFile,-4L,SEEK_CUR); –fseek(inFile,0L,SEEK_SET); /*got start*/ –fseek(inFile,0L,SEEK_END); –fseek(inFile,-10L,SEEK_END);

33 CNG140 C Programming33 Random File Access: read a file and print a file in reverse order

34 CNG140 C Programming34 Random File Access: read and print a file in reverse order

35 CNG140 C Programming35 Passing file names as arguments The file names are not passed, actually their pointers are passed.

36 CNG140 C Programming36 Passing and Returning Filenames: open in main() pass to a function

37 CNG140 C Programming37 Passing and Returning Filenames (continued)

38 CNG140 C Programming38 Passing and Returning Filenames: use a function to open a file and pass the file pointer or descriptor as an argument to another function

39 CNG140 C Programming39 Passing and Returning Filenames (continued)

40 CNG140 C Programming40 Case Study: Check if a given date is a holiday

41 CNG140 C Programming41 Requirements Specification Objective: create a set of functions that determines if a given date is a holiday Two functions are developed –The first constructs a list of holidays, which is called a holiday table, and consists of legal holiday dates that have been previously stored in a file –The second compares any given date to the dates in the table and determines if there is a match

42 CNG140 C Programming42 Holiday Table: analysis

43 CNG140 C Programming43 Holidays table

44 CNG140 C Programming44 Code the Function Create an array capable of storing 20 integers Set a counter to 0 Open the Holidays.txt file, checking that a successful open occurred While there are dates in the file Read a date as a month, day, and year Convert date to an integer having the form yyyymmdd Assign the integer date to the Holiday array Add 1 to the counter EndWhile Close the Holidays.txt file Return the value of the counter

45 CNG140 C Programming45 Test and Debug the Function

46 CNG140 C Programming46 Test and Debug the Function (continued)

47 CNG140 C Programming47 Analysis for the Second Function: Date matching If the holiday table is empty Call getHolidays() EndIf For all Holidays in the table Retrieve the holiday from the table Compare the date being tested to the date retrieved from the array If there is a match Return 1 EndFor Return 0

48 CNG140 C Programming48 Code the Function 1 int isHoliday(int testDate) 2 { 3 int getHolidays(); /* function prototype */ 4 #define TRUE 1 5 #define FALSE 0 6 int i; 7 8 /* read the Holiday file if the Holiday array is empty */ 9 if (htable[0] == 0) 10 getHolidays(); 11 12 /* search the Holiday array for the given date */ 13 for(i = 0; i < HOLIDAYS; i++) 14 if (testDate == htable[i]) 15 return TRUE; 16 17 return FALSE; 18 }

49 CNG140 C Programming49 Test and Debug the Function

50 CNG140 C Programming50 Test and Debug the Function (continued)

51 CNG140 C Programming51 Writing and Reading Binary Files Binary files store numerical values using the computer’s internal numerical code No number-to-character conversion when writing a number to a file, and no character-to-number conversion when a value is read from the file –Resulting file frequently requires less storage space than its character-based counterpart

52 CNG140 C Programming52 Writing and Reading Binary Files (continued)

53 CNG140 C Programming53 Writing and Reading Binary Files (continued)

54 CNG140 C Programming54 Writing and Reading Binary Files (continued)

55 CNG140 C Programming55 Writing and Reading Binary Files (continued)

56 CNG140 C Programming56 Writing and Reading Binary Files (continued)

57 CNG140 C Programming57 Writing and Reading Binary Files (continued)

58 CNG140 C Programming58 how to read a word at a time. #include "/sys/stdio.h" main( ) { FILE *fp1; char oneword[100]; int c; fp1 = fopen("TENLINES.TXT","r"); do { c = fscanf(fp1,"%s",oneword); /* got one word from the file */ printf("%s\n",oneword); /* display it on the monitor */ } while (c != EOF); /* repeat until EOF */ fclose(fp1); } /*This program uses the "fscanf" function to read in a string at a time.*/

59 CNG140 C Programming59 Read a file: A working example #include "/sys/stdio.h" main( ) { FILE *fp1; char oneword[100]; char *c; fp1 = fopen("TENLINES.TXT","r"); do { c = fgets(oneword,100,fp1); /* get one line from the file */ if (c != NULL); printf("%s",oneword); /* display it on the monitor */ } while (c != NULL); /* repeat until NULL */ fclose(fp1); } /*We are using "fgets" which reads in an entire line, including the newline character*/

60 CNG140 C Programming60 Write to Printer #include "/sys/stdio.h" main( ) { FILE *funny,*printer; int c; funny = fopen("TENLINES.TXT","r"); /* open input file */ printer = fopen("PRN","w"); /* open printer file: PRN diff for diff OSs */ do { c = getc(funny); /* got one character from the file */ if (c != EOF) { putchar(c); /* display it on the monitor */ putc(c,printer); /* print the character */ } } while (c != EOF); /* repeat until EOF (end of file) */ fclose(funny); fclose(printer); } /* open TENLINES.TXT for reading and we open PRN for writing.*/

61 CNG140 C Programming61 Common Programming Errors Using a file’s external name in place of the internal file pointer variable name when accessing the file Omitting the file pointer name altogether Opening a file for output without first checking that a file with the given name already exists Not understanding the end of a file is only detected until after the EOF sentinel has either been read or passed over

62 CNG140 C Programming62 Common Programming Errors (continued) Attempting to detect the end of a file using character variable for the EOF marker Supplying an integer argument offset to the seekg() and seekp() functions Not using the sizeof() operator when specifying the number of bytes to be written when writing a binary file Not using the sizeof() operator when specifying the number of bytes to be read when reading a binary file

63 CNG140 C Programming63 Common Compiler Errors

64 CNG140 C Programming64 Common Compiler Errors (continued)

65 CNG140 C Programming65 Summary A data file is any collection of data stored together in an external storage medium under a common name Data files can be stored as either character-based or binary files A data file is opened using the fopen() standard library function A file can be opened for reading, writing, or appending

66 CNG140 C Programming66 Summary (continued) An internal filename must be declared as a pointer to a FILE In addition to any files opened within a function, the standard files stdin, stdout, and stderr are automatically opened when a program is run Data files can be accessed randomly using rewind(), fseek(), and ftell() Table 10.7 lists the standard file library functions


Download ppt "CNG 140 C Programming (Lecture set 10) Spring 2006-2007 Chapter 10 Data Files."

Similar presentations


Ads by Google