Upload
hisano
View
32
Download
0
Embed Size (px)
DESCRIPTION
Working with Files in C. ATS 315. In Windows and on Macs, we tend to think of files as “containing something”. But that’s a bad metaphor. Misunderstandings about “files”. All lined up, working with them in order. Single “file”. Files are single files of ones and zeros (a.k.a. “bits”). 1. - PowerPoint PPT Presentation
Citation preview
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”).
1 0 0 0 1 1 0 1
Files
Single “file”
• Usually work with eight bits at a time (a.k.a. “byte”)
• There are 256 possible bytes.
1 0 0 0 1 1 0 1
Files
ASCII
• A code that converts each of the 256 possible bytes into a symbol.
01011101
“A”
01101110
“B”
11101001
“newline”
11100101
“+”
Files
A typical file
0100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010…
Files
A typical file
0100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010…
Files
A typical file
0100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010…
#
Files
A typical file
0100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010…
#i
Files
A typical file
0100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010…
#inc
Files
A typical file
0100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010…
#include<stdio.h>
Files
An ASCII File
• Need to know the “format” of the file.
• In this case, the format is:– 1st number=time– 2nd number=temp– 3rd number=dewp
0000 34.5 30.90100 33.9 30.80200 33.1 30.70300 32.7 30.00400 31.5 30.00500 31.0 29.8
Files
An ASCII File
• This file looks like some kind of table…
0000 34.5 30.90100 33.9 30.80200 33.1 30.70300 32.7 30.00400 31.5 30.00500 31.0 29.8
Files
An ASCII File
• …but it is really a “file”—lots of numbers and symbols all lined up.
0000 34.5 30.9<newline>0100 33.9 30.8<newline>0200 33.1 30.7<newline>0300<newline>32.7<newline>30.0<newline>0400 31.5 30.0<newline>0500 31.0 29.8
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.
0000 34.5 30.90100 33.9 30.80200 33.1 30.70300 32.7 30.00400 31.5 30.00500 31.0 29.8
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”.
0000 34.5 30.90100 33.9 30.80200 33.1 30.70300 32.7 30.00400 31.5 30.00500 31.0 29.8
Computes 0x103 + 0x102 + 0x101 + 0x100 = 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”.
0000 34.5 30.90100 33.9 30.80200 33.1 30.70300 32.7 30.00400 31.5 30.00500 31.0 29.8
Computes 3x101 + 4x100 + 5x10-1 = 34.5
Files
Opening a File
• Your files are somewhere on the computer’s harddrive.
• But where?
Files
Opening a File
• You might 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 ~schragej directory.
• 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