1 / 42

Working with Files in C

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.

melosa
Download Presentation

Working with Files in C

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Working with Files in C ATS 315

  2. In Windows and on Macs, we tend to think of files as “containing something”. But that’s a bad metaphor. Misunderstandings about “files”

  3. All lined up, working with them in order. Single “file”

  4. Files are single files of ones and zeros (a.k.a. “bits”). 1 0 0 0 1 1 0 1 Single “file”

  5. 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 Single “file”

  6. ASCII • A code that converts each of the 256 possible bytes into a symbol. 01011101 “A” 01101110 “B” 11101001 “newline” 11100101 “+”

  7. A typical file 0100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010…

  8. A typical file 0100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010…

  9. A typical file 0100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010… #

  10. A typical file 0100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010… #i

  11. A typical file 0100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010… #inc

  12. A typical file 0100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010100101010011100101111010110101010101010011010101010101010101010110110100101010101001001010010101010101010101010… #include<stdio.h>

  13. 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.9 0100 33.9 30.8 0200 33.1 30.7 0300 32.7 30.0 0400 31.5 30.0 0500 31.0 29.8

  14. An ASCII File • This file looks like some kind of table… 0000 34.5 30.9 0100 33.9 30.8 0200 33.1 30.7 0300 32.7 30.0 0400 31.5 30.0 0500 31.0 29.8

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

  16. 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.9 0100 33.9 30.8 0200 33.1 30.7 0300 32.7 30.0 0400 31.5 30.0 0500 31.0 29.8

  17. 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.9 0100 33.9 30.8 0200 33.1 30.7 0300 32.7 30.0 0400 31.5 30.0 0500 31.0 29.8 Computes 0x103 + 0x102 + 0x101 + 0x100 = 0

  18. 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.9 0100 33.9 30.8 0200 33.1 30.7 0300 32.7 30.0 0400 31.5 30.0 0500 31.0 29.8 Computes 3x101 + 4x100 + 5x10-1 = 34.5

  19. Your files are somewhere on the computer’s harddrive. But where? Opening a File

  20. Opening a File • You might think there are “territories” on the disk that contain your files.

  21. Opening a File • And all of your files are right there, side by side. Assignment6.c Assignment5.c

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

  23. 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!

  24. 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”

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

  26. Opening a File • What “type” of variable is fin? • FILE *fin; • FILE, in contrast to float or int.

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

  28. 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); }

  29. Reading a File • Reading from the keyboard: scanf • Reading from a file: fscanf

  30. scanf scanf(“%d”,&time); fscanf Reading a File

  31. scanf scanf(“%d”,&time); fscanf fscanf(fin,”%d”,&time); Reading a File

  32. scanf scanf(“%d”,&time); fscanf fscanf(fin,”%d”,&time); One additional argument—the address of the file you are reading! Reading a File

  33. 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); }

  34. 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); }

  35. 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); }

  36. 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!

  37. printf printf(“%d”,time); fprintf Writing a File

  38. printf printf(“%d”,time); fprintf fprintf(fout,“%d”,time); Writing a File

  39. printf printf(“%d”,time); fprintf fprintf(fout,“%d”,time); Only one additional argument, the address of the file you are writing! Writing a File

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

  41. 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!

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

More Related