PreludeProgramming6ed_pp10.pdf

28
Chapter 10 Sequential Data Files PRELUDE TO PROGRAMMING, 6TH EDITION BY ELIZABETH DRAKE

Transcript of PreludeProgramming6ed_pp10.pdf

Chapter 10 Sequential Data Files

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

10.1  An  Introduc/on  to  Files   A  file  is  a  collec=on  of  informa=on  that  has  been  assigned  a  name  and  stored  separately  from  the  program  that  created  it.       A  file  may  contain  programs  or  data.     There  are  two  main  types  of  files:  ◦ Text  files      ◦ Binary  files  

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Classifica/on  of  Files

  By    content:  • Text,  readable  by  humans  ◦  ASCII  characters  only  

• Binary,  readable  only  by  the  computer  ◦  ASCII  data  plus  special  codes  

  By  method  of  access:  ◦  Sequen2al  files  contain  records  that  must  be  read  in  the  order  in  which  they  were  created  ◦  Similar  to  an  audio  or  VCR  tape  

◦  Direct  Access  files  contain  records  that  can  be  accessed  in  any  order.    ◦  Similar  to  a  CD  or  DVD  

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Text  Files  or  Binary  Files?

  Binary  files  ◦ Used  by  most  opera=ng  system  files,  program  files,  and  data  files  produced  by  applica=ons  

  Advantages  of  text  files  ◦ Easier  to  create  by  using  a  text  editor  ◦ Can  be  displayed  on  screen  or  printed  without  any  special  soTware  ◦ Universal:  virtually  any  computer  system  can  interpret  their  contents  without  special  soTware  

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Records  and  Fields

Ø One  file  may  be  broken  up  into  groups  of  related  data,  called  records  

Ø Records  contain  data  items  and  each  data  item  in  a  record  is  called  a  field  

Ø Example:  A  business  might  keep  a  file  for  customers.  The  data  might  be  customer  name,  address,  phone  number.  A  record  of  one  customer  consists  of  the  3  fields:    ◦  the  customer’s  name  ◦  the  customer’s  address  ◦  the  customer’s  phone  number.  

 

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Records  and  Fields  in  a  Data  File

   

Records  and  Fields  in  a  Data  File Ø   The  fields  are  separated  from  one  another  by  commas  

Ø   Each  record  is  terminated  by  a  special  symbol:  <CR>    

Ø   The  first  two  records  of  this  file  would  look  as  follows:  

”R. Abrams”,86,64,73,84<CR> ”J. Chavez”,94,87,83,90<CR>

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Sequen/al  and  Direct-­‐Access  Files

Data  files  can  be  divided  into  two  other  categories:       Sequen2al  files    ◦  contain  records  that  must  be  processed  in  the  order  in  which  they  were  created  ◦  are  accessed  in  linear  fashion  ◦  For  example,  to  print  the  50th  record  in  a  sequen=al  file,  must  first  read  (or  scan)  the  49  records  that  precede  it  

    Direct-­‐access  files  (or  random-­‐access  files)    ◦  each  record  can  be  accessed  independently  of  the  rest  ◦  loca=ng  a  data  item  is  like  finding  a  certain  track  on  a  DVD  

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Crea/ng  a  Sequen/al  File

Ø  Open the  file.  Specify:    ◦  External  name:  the  full  name  of  the  file  on  disk.  ◦  Internal  name:  the  name  by  which  the  file  will  be  known  in  the  program  ◦  File  mode:  the  purpose  of  the  file:  Input or  Output

Ø  Write data  to  the  file,  or    Ø  Read  data  from  the  file  

Ø  Close  the  file  ◦  Saves  the  file  and  puts  an  end-of-file  marker  (EOF)  aTer  the  last  record  if  the  file  was  created  in  the  program  

◦  Closes  the  file  if  the  file  is  an  Input  file  

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Example:  Opening  and  Closing  a  File

Ø  If we issue the command: Open “grades” for Output As NewFile

◦  grades  is  the  external  name  ◦  NewFile  is  the  internal  name  ◦  The  mode  is  Output

Ø   If  we  issue  the  command:    

Close NewFile ◦   An  EOF  (end-­‐of-­‐file)  marker  is  placed  at  the  end  of  the  file  ◦  The  file  is  closed  ◦  The  file  is  saved  with  the  external  name  grades

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Example:  Reading  a  File

Ø   To  open  a  file  to  be  read:   Open “grades“ for Input As GradeFile

Ø   Read  the  internal  filename  and  the  fields/variables:  

Read GradeFile, Name, Score

Ø   Read  records  within  a  loop  (EOF()  is  discussed  later):      While NOT EOF(GradeFile) Read GradeFile, Name, Score ... End While Close GradeFile

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Example:  Crea/ng  a  Sequen/al  File

 1 Declare Student As String

2 Declare Score As Integer

3 Open “grades” For Output As NewFile

4 Write “Enter student’s name and test score.”

5 Write “Enter 0 for both when done.”

6 Input Student, Score

7 While Student != “0”

8 Write NewFile, Student, Score

9 Write “Enter student’s name and test score.”

10 Write “Enter 0 for both when done.”

11 Input Student, Score

12 End While

13 Close NewFile

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

The  EOF()  Func/on

To  terminate  the  input  or  output  process  of  a  loop  that  works  with  data  in  a  data  file,  and  to  force  an  exit  from  the  loop,  most  programming  languages  contain  an  end-­‐of-­‐file,  EOF()  func=on:  

EOF(InternalName)

The EOF() func2on    Ø may  appear  in  the  test  condi=on  of  any  loop  or  selec=on  structure  

Ø has  the  value  true  if  the  end  of  the  file  InternalName  has  been  reached  -­‐-­‐  i.e.  if  the  file  pointer  is  located  at  the  end-­‐of-­‐file  (EOF)  marker  

Ø otherwise  the  value  is  false    

The  use  of  the  EOF()  func=on  is  illustrated  in  the  example  in  the  next  slide  

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Example:  Using  the  EOF()  Func/on

1 Declare Student As String 2 Declare Score As Integer 3 Open “grades” For Input As GradeFile 4 While NOT EOF(GradeFile) 5 Read GradeFile, Student, Score 6 Write Student + “ “ + Score 7 End While

8 Close GradeFile

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

10.2  Modifying  a  Sequen/al  File

Ø   The  most  common  opera=ons  on  sequen=al  files  are:  ◦   dele2ng  an  exis=ng  record  ◦   changing  an  exis=ng  record  ◦   inser2ng  or  adding  a  new  record  

Ø  Read  the  file,  one  record  at  a  =me,  rewri=ng  each  record  to  a  temporary  or  scratch  file  un=l  reaching  the  one  to  be  modified.    Ø   The  mode  is  Input  for  the  original  file  and  Output  for  the  scratch  file.  Ø   If  modifying  an  exis=ng  record,  make  the  change  and  write  the  new  version  to  the  scratch  file.  

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Modifying  a  Sequen/al  File  (con/nued)

Ø   If  dele=ng  an  exis=ng  record,  skip  over  the  record  to  be  deleted.  Ø   If  inser=ng  a  new  record,  read  down  to  the  proper  loca=on,  then  write  the  new  record.  Ø   If  the  loca=on  is  to  be  the  end  of  the  file,  read  to  the  end  and  write  the  record.  Ø   Close  the  Input  and  Output  files.  Ø   Copy  the  scratch  file  onto  the  original  file.  

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Example:  Modifying  a  Sequen/al  file  Dele/ng  a  record  from  a  file  that  contains  student  names  and  one  test  score:

1 Declare Student As String

2 Declare DeleteName As String

3 Declare Score As Integer

4 Open “grades” For Input As GivenFile

5 Open “scratch” For Output As TempFile

6 Write “Enter name of student to be deleted:”

7 Input DeleteName

8 While NOT EOF(GivenFile)

9 Read GivenFile, Student, Score

10 If Student != DeleteName Then

11 Write TempFile, Student, Score

12 End If

13 End While

14 Close GivenFile, TempFile

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Example:  Modifying  a  Sequen/al  file (continued)    The  updated  file  on  the  previous  slide  is  now  named  TempFile.  To  restore  ”grades”  as  the  name  of  the  updated  file,  the  records  from  the  ”scratch”  file  must  be  copied  to  ”grades”  as  follows:

Open “grades” for Output As TargetFile

Open “scratch” for Input As SourceFile

While NOT EOF(SourceFile)

Read SourceFile, Student, Score

Write TargetFile, Student, Score

End While

Close SourceFile, TargetFile

Note:  the  scratch  file  s=ll  contains  the  informa=on  but  it  doesn’t  maber.  The  next  =me  you  open  the  scratch  file  to  modify  another  file,  the  old  contents  will  be  erased.    

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Example:  Modifying  One  Field  in  One  Record

1 Declare Name As String 2 Declare NewScore As Integer 3 Open “grades” For Input As GivenFile 4 Open “scratch” For Output As TempFile 5 Write “Enter the name of the student: “

6 Input Name 7 Write “Enter new test score: “

8 Input NewScore 9 While NOT EOF(GivenFile) 10 Read GivenFile, Student, Score 11 If Student == Name Then 12 Write TempFile, Student, NewScore 13 Else

14 Write TempFile, Student, Score 15 End If

16 End While

17 Close GivenFile, TempFile 18 Copy the file scratch onto the file grades

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Example:  Inser/ng  a  Record  into  a  Sequen/al  File 1 Declare NewName As String 2 Declare NewScore As Integer 3 Open “grades” For Input As GivenFile 4 Open “scratch” For Output As TempFile 5 Write “Enter name and score for new student:” 6 Input NewName, NewScore 7 Set Inserted = 0 8 While (NOT EOF(GivenFile)) AND (Inserted == 0) 9 Read GivenFile, Student, Score 10 If NewName < Student Then 11 Write TempFile, NewName, NewScore 12 Set Inserted = 1 13 End If 14 Write TempFile, Student, Score 15 End While 16 If Inserted == 0 Then 17 Write TempFile, NewName, NewScore 18 End If 19 While NOT EOF(GivenFile) 20 Read GivenFile, Student, Score 21 Write TempFile, Student, Score 22 End While 23 Close GivenFile, TempFile 24 Copy scratch onto grades

Using  Arrays  in  File  Maintenance

Ø   Some=mes  it  is  beber  to  load  a  file  into  arrays  in  the  computer’s  internal  memory.  ◦   Works  if  the  file  is  small  enough  to  fit  into  available  memory  ◦   Also  good  if  there  are  many  changes  to  be  made  to  the  file  ◦   Internal  memory  works  fast  and  can  be  more  efficient  than  using  a  scratch  file  

  General  procedure:  1.  Open  the  given  file  for  Input (to  be  read  from)  2.  Read  file  records  into  parallel  arrays,  one  array  for  each  field  3.  Close  the  file  (so  that  it  can  later  be  opened  for  Output)  4.  Make  the  desired  modifica=ons  to  the  arrays  5.  Open  the  file  for  Output  (which  erases  all  the  original  data  in  this  file)  6.  Write  the  contents  of  the  arrays  (the  modified  data)  to  the  given  file  7.  Close  this  file.  

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Pseudocode  for  Using  Arrays  for  File  Maintenance

1 Declare Student[100] As String 2 Declare Test1[100] As Integer 3 Declare Test2[100] As Integer 4 Declare Count As Integer 5 Open “grades” For Input As DataFile 6 Set Count = 0 7 While NOT EOF(DataFile) 8 Read DataFile, Student[Count], Test1[Count] 9 Set Count = Count + 1 10 End While 11 Close DataFile 12 Open “grades” For Output As DataFile 13 For (K = 0; K < Count; K++) 14 Write “Enter Test 2 score for “ + Student[K] 15 Input Test2[K] 16 Write DataFile, Student[K], Test1[K], Test2[K] 17 End For 18 Close DataFile

10.3  Merging  Sequen/al  Files

Ø  Open  the  two  given  files,  File1 and  File2,  for  Input.    Ø   Open  the  file  that  will  hold  the  merged  records,  File3  for  Output

Ø   Successively  Read  records  from  File1  and  File2

Ø   If  the  current  record  for  File1  precedes  that  of  File2,  then  write  the  File1  record  to  File3;  otherwise,  write  the  File2  record  to  File3

Ø  Close  the  three  files  

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

General  Pseudocode  for  Merging  Files

Read the first record from each file While (NOT EOF(File1)) AND (NOT EOF(File2))

Compare the current records for File1 and File2 If the File1 record precedes the File2 record Then Write the File1 record to File3 Read another record from File1 Else Write the File2 record to File3 Read another record from File2 End If

End While Read the remaining records, if any, in File1 and write them to File3 Read the remaining records, if any, in File2 and write them to File3

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

Example:  The  Big  Merger

 A  company  wants  to  merge  two  payroll  files  (payroll1  and  payroll2)  into  a  single  file.  Suppose  that  each  record  in  these  files  has  the  following  form:  Employee_number (Integer) employee_name (String) rate_of_pay (Float)

We  will  assume  that  the  records  are  ordered  (in  increasing  order)  by  employee  number  and  that  the  last  record  in  each  file  is  0,  “0”,  0.0.  We  will  merge  these  two  files  into  a  new  file  called  payroll.  The  variables  are  declared  below  and  the  rest  of  the  program  is  on  the  next  slides  

1 Declare Number1, Number2 As Integer 2 Declare Name1, Name2 As String 3 Declare Rate1, Rate2 As Float

Con=nued  on  next  slide ò

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

The  Big  Merger  (con/nued) 4 Open “payroll1” For Input As File1 5 Open “payroll2” For Input As File2 6 Open “payroll” For Output As File3 7 Read File1, Number1, Name1, Rate1 8 Read File2, Number2, Name2, Rate2 9 While (Number1 != 0) AND (Number2 != 0) 10 If Number1 < Number2 Then 11 Write File3, Number1, Name1, Rate1 12 Read File1, Number1, Name1, Rate1 13 Else 14 Write File3, Number2, Name2, Rate2 15 Read File2, Number2, Name2, Rate2 16 End If 17 End While 18 While Number1 != 0 19 Write File3, Number1, Name1, Rate1 20 Read File1, Number1, Name1, Rate1 21 End While 22 While Number2 != 0 23 Write File3, Number2, Name2, Rate2 24 Read File2, Number2, Name2, Rate2 25 End While 26 Write File3, 0, “0”, 0.0 27 Close File1, File2, File3 Con=nued  on  next  slide ò

The  Big  Merger  (con/nued)

To  understand  this  program  beber,  walk  through  the  pseudocode  using  files  with  the  indicated  records:  payroll1: payroll2: 115, “Art”, 11.50 120, “Dan”, 14.00

130, “Ben”, 12.25 125, “Eva”, 15.50 135, “Cal”, 13.75 0, “0”, 0.0

0, “0”, 0.0

Then,  aTer  the  merge,  payroll  should  contain  the  following  records:  115, “Art”, 11.50 120, “Dan”, 14.00 125, “Eva”, 15.50

130, “Ben”, 12.25 135, “Cal”, 13.75

0, “0”, 0.0

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE  

10.4  Control  Break  Processing

    When  we  need  subtotals  (perhaps  for  a  report),  we  use  a  technique  called  Control  Break  Processing.  

  This  technique  will  do  something  (for  example,  calculate  a  subtotal)  depending  on  the  value  of  a  control  variable.  When  a  change  occurs  in  the  value  of  this  variable,  a  break  occurs  that  results  in  something  happening  in  the  program:    

  For  example:  ◦  A  program  accepts  monthly  sales  amounts  from  the  user  and  computes  monthly  subtotals  ◦  When  month  changes  from  January  to  February,    January’s  sales  are  subtotaled  and  printed.    

◦  Then  the  program  starts  adding  up  February’s  sales.    

◦  The  cycle  repeats  when  February  changes  to  March  and  so  on…

PRELUDE  TO  PROGRAMMING,  6TH  EDITION  BY  ELIZABETH  DRAKE