ch=fgetc(in_file); if(ch==EOF) break; ++count; } cout<<"jumlahkarakter"<<FILE_NAME<<"adalah"<<count<<'\n'; fclose(in_file); return(0); }
12.11. File sekuensial
Sequential file (Arsip sekuensial) adalah sekumpulan rekaman yang disimpan dalam media penyimpanan sekunder komputer, yang dapat diakses secara sekuensial mulai dari rekaman pertama sampai dengan rekaman yang terakhir, rekaman per rekaman secara searah. File sekuensial berisi rekord-rekord data yang tidak mengenal posisi baris atau nomor rekord pada saat aksesnya, dan setiap record dapat mempunyai lebar yang berbeda-beda. Akses terhadapnya selalu dimulai dari awal file dan berjalan satu persatu menuju akhir dari file. Dengan demikian, penambahan file hanya dapat dilakukan terhadap akhir file, dan akses terhadap baris tertentu harus dimulai dari awal file. Fungsi baku yang terkait dengan file sekuensial ini antara lain adalah fprintf, fscanf, dan rewind . Program berikut menyajikan penanganan file sekuensial tentang data nasabah yang berisi tiga field, yaitu nomor identitas (account), nama (name), dan posisi tabungannya (balance) untuk (1) menyajikan yang tabungannya bernilai nol, (2) berstatus kredit, dan (3) berstatus debet. Misalny sebuah file data tersimpan dengan nama klien.dat. Rekaman terakhir adalah rekaman fiktif, yang menandai akhir dari arsip. Pada beberapa implementasi, rekaman fiktif ini disebut sebagai EOF (End Of File). Arsip sekuensial berasal dari hasil perekaman (penulisan) yang juga dilakukan rekaman per rekaman. Setiap rekaman boleh berisi type dasar ataupun type terstruktur yang telah didefinisikan, setiap rekaman strukturnya sama. Elemen dari rekaman disebut sebagai "field", ada field (atau juga sekumpulan field) rekaman yang disebut sebagai "key" karena kekhususannya dalam proses. Jika key dari setiap rekaman tidak ada yang sama (unik), maka key menjadi identitas rekaman, dan disebut "primary key". Setiap rekaman dapat diakses dan dikonsultasi (dibaca) menurut urutannya dengan pemanggilan primitif akses yang tersedia. Perekaman dapat dilakukan melalui primitif penulisan. Perhatikan bahwa suatu arsip sekuensial hanya dapat disiapkan hanya pada salah satu modus operasi: diakses/dibaca, atau ditulis. Dalam definisi arsip sekuensial, tidak pernah sebuah arsip diproses untuk kedua modus: dibaca dan sekaligus ditulis. Primitif-primitif tsb, akan didefinisikan kemudian.
Program 12.6 #include<stdio.h> usingnamespacestd; voidmain(){ intrequest,account; floatbalance; charname[25]; FILE*cfPtr; if((cfPtr=fopen("klien.dat","r+"))==NULL) printf("Filecouldnotbeopened\n"); else{ printf("Enterrequest\n" "1‐Listaccountswithzerobalances\n" "2‐Listaccountswithcreditbalances\n" "3‐Listaccountswithdebitbalances\n" "4‐Endofrun\n?"); scanf("%d",&request); while(request!=4){ fscanf(cfPtr,"%d%s%f",&account,name,&balance); switch(request){ case1: printf("\nAccountswithzerobalances:\n"); while(!feof(cfPtr)){ if(balance==0) printf("%‐10d%‐13s7.2f\n",account,name,balance); fscanf(cfPtr,"%d%s%f",&account,name,&balance); } break; case2: printf("\nAccountswithcreditbalances:\n"); while(!feof(cfPtr)){ if(balance<0) printf("%‐10d%‐13s7.2f\n",account,name,balance); fscanf(cfPtr,"%d%s%f",&account,name,&balance); } break; case3: printf("\nAccountswithdebitbalances:\n"); while(!feof(cfPtr)){ if(balance>0) printf("%‐10d%‐13s7.2f\n",account,name,balance); fscanf(cfPtr,"%d%s%f",&account,name,&balance); } break; } rewind(cfPtr); printf("\n?"); scanf("%d",&request); } printf("Endofrun.\n"); fclose(cfPtr); } }
Next read halaman 15.