Files Working with Files in C ATS 315. Files Misunderstandings about “files” In Windows and on...

Post on 30-Dec-2015

235 views 5 download

Transcript of Files Working with Files in C ATS 315. Files Misunderstandings about “files” In Windows and on...

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 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