Files Working with Files in C ATS 315
Files Misunderstandings about “files” In Windows and on Macs, we tend to think of files as “containing something”. But that’s a bad metaphor.
Files Single “file” All lined up, working with them in order.
Files Single “file” Files are single files of ones and zeros (a.k.a. “bits”)
Files Single “file” Usually work with eight bits at a time (a.k.a. “byte”) There are 256 possible bytes
Files ASCII A code that converts each of the 256 possible bytes into a symbol “A” “B” “newline” “+”
Files A typical file …
Files A typical file …
Files A typical file … #
Files A typical file … #i
Files A typical file … #inc
Files A typical file … #include
Files An ASCII File Need to know the “format” of the file. In this case, the format is: –1 st number=time –2 nd number=temp –3 rd number=dewp
Files An ASCII File This file looks like some kind of table…
Files An ASCII File …but it is really a “file”—lots of numbers and symbols all lined up
Files An ASCII File To read this file, the computer must “scan” through the file. Values in the file are separated by “tokens”, typically spaces
Files An ASCII File To read the first value: –Must know that it is going to be an integer. –Reads “0”, “0”, “0”, and “0” Computes 0x x x x10 0 = 0
Files An ASCII File To read the second value: –Must know that it is going to be a float. –Reads “3”, “4”, “.”, and “5” Computes 3x x x10 -1 = 34.5
Files Opening a File Your files are somewhere on the computer’s harddrive. But where?
Files Opening a File You might think there are “territories” on the disk that contain your files.
Files Opening a File And all of your files are right there, side by side. Assignment6.c Assignment5.c
Files Opening a File But files are really scattered all over the disk, put wherever the operating system could find room for them. Assignment6.c Assignment5.c
Files Opening a File Therefore, to open a file, you are going to need the “address” of the file on the harddrive. Fortunately, there is a C function that gives this to you!
Files Opening a File fin = fopen(“weather.dat”,”r”); The function is “fopen”, for “file open”. It has two “arguments”— –The first argument is the name of the file to open. –The second argument is the action you are going to take: r = “read”, w = “write”
Files Opening a File fin = fopen(“weather.dat”,”r”); The function returns the address of this file on the harddrive. In this case, the address of the file is being stored in a variable called “fin”—for “input file”, but you could call it anything.
Files Opening a File What “type” of variable is fin? FILE *fin; FILE, in contrast to float or int.
Files Opening a File What “type” of variable is fin? FILE *fin; Notice that there is an asterisk in front of the name of the variable when you declare it. That means that fin is a “pointer” to a file.
Files Opening a File An example program. Notice that the file is eventually closed with fclose. main () { FILE *fin; fin = fopen(“weather.dat”,”r”); fclose (fin); }
Files Reading a File Reading from the keyboard: scanf Reading from a file: fscanf
Files Reading a File scanf scanf(“%d”,&time); fscanf
Files Reading a File scanf scanf(“%d”,&time); fscanf fscanf(fin,”%d”,&time);
Files Reading a File scanf scanf(“%d”,&time); fscanf fscanf(fin,”%d”,&time); One additional argument—the address of the file you are reading!
Files Reading a File We use fscanf to read in the values of time, temp, and dewp. main () { FILE *fin; int time; float temp,dewp; fin = fopen(“weather.dat”,”r”); fscanf (fin,”%d”,&time); fscanf (fin,”%f”,&temp); fscanf (fin, %f”,&dewp); fclose (fin); }
Files Reading a File Could all be done in one fscanf statement, if you wanted. main () { FILE *fin; int time; float temp,dewp; fin = fopen(“weather.dat”,”r”); fscanf (fin,”%d %f %f”, &time,&temp,&dewp); fclose (fin); }
Files Reading a File To read six observations, this will need to be in a loop. Don’t open and close the file multiple times! main () { FILE *fin; int time,i; float temp,dewp; fin = fopen(“weather.dat”,”r”); for(i=0;i<5;i++) { fscanf (fin,”%d %f %f”, &time,&temp,&dewp); } fclose (fin); }
Files Writing a File Never read and write from the same file! Writing a file that already exists clobbers the old version of the file, so be careful!
Files Writing a File printf printf(“%d”,time); fprintf
Files Writing a File printf printf(“%d”,time); fprintf fprintf(fout,“%d”,time);
Files Writing a File printf printf(“%d”,time); fprintf fprintf(fout,“%d”,time); Only one additional argument, the address of the file you are writing!
Files Writing a File The file you are writing will be ASCII, meaning that you can look at it in vi or pico, to see if your program is working.
Files Your Assignment Make a copy of the decoded.data file from the ~JSchrage directory. cp ~JSchrage/decoded.data. Contains ten observations. –WARNING: Wind speed is in knots!
Files Your Assignment For each of the ten observations: –Read the observation from the file. –Use your metcalc.c library to compute relative humidity, potential temperature, and wind chill. –Write these results to a file called my.output. –Due Friday, February 13