mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:



Benzer belgeler
Temel Bilgisayar Programlama

BMB1002 Bilgisayar Programlamaya Giriş. Dosyalar. Prof. Dr. Necmettin Kaya

şeklinde tanımlanmıştır. O halde, dosyaları daha önceki bilgilerimizi kullanarak FILE *Dosya1, *Dosya2;

DOSYA İŞLEMLERİ Programlama dilleri hafta -

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Temel Dosya İşlemleri. Kütük Organizasyonu 1

PROGRAMLAMA. Dosyalama İşlemleri. Yrd. Doç. Dr. Bülent Çobanoğlu. Sakarya Üniversitesi Mekatronik Mühendisliği. Yrd.Doç.Dr.

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA

Metin Dosyaları. Metin Dosyaları Dosya Açma ve Kapama Dosya Okuma ve Yazma Rastgele Erişim Standart Girdi/Çıktı Hata Kontrolü

C Dosyalama. Öğr. Gör. M. Ozan AKI. Rev 1.0

Yrd. Doç. Dr. Caner ÖZCAN

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

ALGORİTMA VE PROGRAMLAMA II

Eln 1002 Bilgisayar Programlama II

ALGORİTMA VE PROGRAMLAMA II

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI

Yrd. Doç. Dr. Caner ÖZCAN

Eln 1001 Bilgisayar Programlama I

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

Adı Soyadı Öğrenci No. Toplam (100p) 2 (10p) +10p. 5 (25p) +10p. 3 (20p) 4 (25p) 1 (20p)

Sınav tarihi : Süre : 60 dak.

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr)

DOSYALAR. Temel terimler Hafta. Dr. Fahri Vatansever

Dosyalar 1.1 Dosya Nedir?

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

BÖLÜM 12: DOSYA İŞLEMLERİ

elemanlı bir dizide bir sinyalin 1 er saniye aralıklarla ölçülen gerilim değerleri tutulmaktadır. Bu sinyalin tepeden tepeye genliğini,

2) /* Kullanıcıdan alınan iki sayının obebini alt fonksiyon yardımı ile hesaplayan C programı*/

Genel Programlama II

Pascalda oluşturulacak dosyalar değişkenler gibi programın başında tanımlanır.

Fonksiyonlar (Altprogram)

printf("\nbilgilerini goruntulemek istediginiz ogrencinin numarasini girin: "); scanf("%d",&no);

12. Saat : Dosyalar I (Files)

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Deney 7: Fonksiyon Tanımlama ve Parametre Aktarım Yöntemleri

void main() { int a[] = {1, 2, 3, 4, 5, 6}; int *p=&a[2]; int **pp=&p; printf("%d", **pp+2); }

Adı Soyadı : Öğrenci No :

#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct { int ID; char isim[15]; char soyisim[15];

#include<stdio.h> #include<conio.h> #define doktorsayisi 3. typedef struct dr{ int ay1, ay2, ay3, ay4; } doktor; float hesapla(doktor dktr){

BİL1001 Bilgisayar Bilimlerine Giriş 1

Ders 4: Temel Giriş/Çıkış Fonksiyonları

C PROGRAMLAMA D İ L İ

Hafta 12 Karakter Tutan Diziler

Giris {\} /\ Suhap SAHIN Onur GÖK

işlemler bittikten sonra dosyaların kapatılması uygun olacaktır. Bunun için, fclose(fin);

8. İŞARETCİLER (POINTERS)

Temel Giriş/Çıkış Fonksiyonları

Diziler (Arrays) Çok Boyutlu Diziler

Başkent Üniversitesi Mühendislik Fakültesi Güz Yarıyılı BİL 101-Bilgisayar Yazılımı I Arasınavı

Başkent Üniversitesi MühendislikFakültesi BaharYarıyılı YerSıra No BİL 101 Bilgisayar Yazılımı-I Dersi Dönem Sonu MAZERET Sınavı

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Arasınav Sınavı Soruları Güz 2017 Süre: 90 Dakika

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

Karakter katarları ile ilgili fonksiyonlar içerir Yerel kayan noktalı sayılar tanımlanır

Adı Soyadı : Öğrenci No :

Final Sınavı Örnek Soruları Güz 2018 Süre: 90 Dakika

Big Endian & Little Endian K.Atilla Toker İzmir Üniversitesi Meslek Yüksek Okulu Bilgisayar Programcılığı Ver:01

Programlama Dilleri Laboratuvarı

Dersin Sorumlusu: Yrd. Doç. Dr. Birol SOYSAL. Sunumları Hazırlayan: Doç. Dr. Bülent ÇAKMAK

ALGORİTMA VE PROGRAMLAMA II

int main(void) { int num = 0; int input = 1; int retval = 0; struct NODE *nodepointer; nodepointer = (struct NODE *)malloc(sizeof(struct NODE));

int printf (const char *format [, argument,...]);

Algoritma ve Programlama: Karar Yapıları ve Döngüler

Programlamaya Giriş. Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi.

C Konsol Giriş Çıkış Fonksiyonları

C ile Uygulamalar 4 - Cevaplar

8. Bölüm DİZİLER. tip dizi_ismi[eleman_sayısı]; Bütün diziler 0 ile baţlar.

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-11 Karakter Diziler. Yrd. Doç. Dr. Ümit ATİLA

Strings(Karakter Dizisi)

C PROGRAMLAMA D İ L İ

Ders 6: Karşılaştırma Deyimleri

C PROGRAMLAMA D İ L İ

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Visual Basic 6.0. Anadolu Üniversitesi Endüstri Mühendisliği Bölümü. Dosyalama İşlemleri. Ders Notları

Programlama Dilleri 1. Ders 4: Diziler

Dr. Fatih AY Tel: fatihay@fatihay.net

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

C ile Uygulamalar 2 - Cevaplar

Bilgisayar Programlama MATLAB

Giriş. ENF102 Jeoloji

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

Telefon Rehberi Uygulaması

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Adım Adım C. Dr. Hidayet Takcı

4. BÖLÜM: C FONKSİYONLARI

C Programlama printf() Fonksiyonu

Fen ve Mühendislik Uygulamalarında MATLAB

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

STRİNG DİZİLER(KATARLAR)

GİRİŞ/ÇIKIŞ VE TANIMLAMA DEYİMLERİ

PROGRAMLAMAYA GİRİŞ DERS 2

Bil Hafta Çalışma Soruları (Yanıtlar)

Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler

ATATÜRK ÜNİVERSİTESİ BİLGISAYAR MÜHENDİSLİĞİ BÖLÜMÜ BM 104- NESNEYE YÖNELİK PROGRAMLAMA DERSİ BAHAR DÖNEMİ ÖDEV-3

BLM 111 ALGORİTMA VE PROGRAMLAMA I

Transkript:

Dosyalama Çoğu programda, bazı verilerin disk üzerinde saklanmasına gerek duyulur. C programlama dilinde, disk dosyasına erişme (okuma ve yazma için) iki farklı yöntemle yapılır. Bunlar üst düzey ve alt düzey olarak adlandırılır. Bunlardan üst düzey G/Ç yöntemi ANSI tarafından desteklenmektedir. Alt düzey G/Ç ANSI tarafından desteklenmemektedir. Bu yüzden, burada Üst düzey G/Ç konu edilecektir. Dosya Açma ve Kapama Bir dosyaya okuma/yazma yapmak için onun açılması gerekir. Bunun için fopen() fonksiyonu kullanılır. Açılan dosya fclose() ile tekrar kapatılmalıdır. Genel olarak: FILE *dosya; dosya = fopen(dosya_adı,mod); fclose(dosya); mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar: r (read only) yalnızca okuma için açar. w (write only) yalnızca yazma için açar. a (append) ekleme yapmak için açar. r+ Okuma/yazma için açar. w+ Okuma/yazma için açar. a+ Okuma/yazma için açar. deneme.txt adlı bir dosyanın, yazmak için açılıp açılmadığını test etmek için aşağıdaki kod kullanılır: #include <stdio.h> FILE *yaz; /* dosya işaretçisi */ yaz = fopen("deneme.txt","w"); if( yaz == NULL) puts("bu dosya acilmiyor"); exit(); /* açılırsa! dosya işlemleri */ fclose(yaz); 1

Dosya Fonksiyonları Fonksiyon fopen() fclose() putc() getc() feof() fprintf() fscanf() fputs() fgets() fwrite() fread() Örnekler Görevi Dosya oluşturur, açar Dosyayı kapatır Dosyaya karakter yazar Dosyadan karakter okur Dosya sonuna gelindiğini sorgular Dosyaya formatlı veri yazar Dosyadan formatlı veri okur Dosyaya katar yazar Dosyadan katar okur Dosyaya dizi yazar Dosyadan dizi okur Program 1 : Bu program klavyeden girilen iki tamsayı ve toplamını deneme.txt adlı bir dosyaya yazar. 1:/* dosya1.c */ 2: #include <stdio.h> 3: 4: main() 5: 6: FILE *yaz; 7: int x,y,z; 8: 9: yaz = fopen("deneme.txt","w"); 10: if( yaz== NULL) 11: 12: puts("dosya acilamiyor\a\n"); 13: exit(); 14: 15: 16: printf("toplanacak iki sayı girin : "); 17: scanf("%d %d",&x,&y); 18: z = x+y; 19: 20: fputs( "Bu dosya iki sayının toplamsını gösterir!\n",yaz ); 21: fprintf(yaz,"%d + %d = %d",x,y,z); 22: fclose(yaz); 23: 24: puts("bilgiler kaydedildi. Devam etmek için ENTER tuşuna basın."); 25: getchar(); 26: Toplanacak iki sayı girin : 5 6 Bilgiler kaydedildi. Devam etmek için ENTER tuşuna basın. +----------------------------------------------- Bu dosya iki sayının toplamsını gösterir! 5 + 6 = 11 Not: deneme.txt dosyası daha önce oluşturulmuşsa Program 1 önceki verileri silip yerine yeni verileri yazacaktır. Ekleme yapmak için fopen() fonksiyonunu 'a' modu ile kullanılmalıdır. 2

Bilgisayarın c:\deneme dizininde bulunan tipler.dat adlı bir dosyaya sahip olduğumuzu varsayalım, ve bu dosyanın içeriği aşağıdaki gibi olsun. +------------------------------- Ahmet d 1256 65489878 0.822 Buradaki veri tipleri sırasıyla katar, karakter, tamsayı, uzun tamsayı ve reel sayı şeklindedir. dosya2.c programı bu verilerin nasıl okunacağını göstermektedir. Program 2 : Bu program bir dosyaya formatlı yazılmış olan verileri okur ve ekrana basar 1: /* dosya2.c */ 2: #include <stdio.h> 3: main() 4: 5: FILE *oku; 6: char ktr[10],kr; 7: int tam; 8: long uzun_tam; 9: float reel; 10: 11: if( (oku=fopen("c:\\deneme\\tipler.dat","r")==null ) 12: puts("dosya açılmadı!\n"); 13: exit(); 14: 15: 16: fscanf(oku,"%s\n%c\n%d\n%ld\n\%f", 17: ktr,&kr,&tam,&uzun_tam,&reel); 18: fclose(oku); 19: 20: puts("dosyadan okunan veriler sırasıyla:"); 21: printf(%s\n%c\n%d\n%ld\n\%f",ktr,kr,tam,uzun_tam,reel); 22: 23: Dosyadan okunan veriler sırasıyla: Ahmet d 1256 65489878 0.822 Elimizde aşağıdaki gibi bir dosya olsun. Bu dosyadan istediğimiz bir öğrencinin numarasını girerek ona ait bilgilere ulaşılmak istensin. Program 3 basit bir veritabanı uygulamasıdır. Bu program öğrencilere ait bilgilerin bulunduğu bir dosyadan veri okur. 16. satırda Öğrencinin numarası istenir. Eğer böyle bir numara varsa öğrenciye ait bilgiler ekrana basılır. Aksi durumda "Kayıt bulunamadı" şelinde bir ileti ekrana basılır. +------------------------------------------------ NO ADI SOYADI mt1 mt2 fin --- ------- ------ --- --- --- 251 Ahmet Bingul 100 100 100 3

597 Meltem Bingul 100 100 100 569 Metin Celen 54 65 89 987 Teoman Burak 45 87 65 Program 3 : Basit bir veritabanı 1: /* dosya3.c */ 2: #include <stdio.h> 3: 4: main() 5: 6: FILE *notlar; 7: int i,numara,no,mt1,mt2,final; 8: char gecici[10],ad[10],soyad[10]; 9: 10: if( (notlar=fopen("notlar.js","r")==null ) 11: puts("dosya açılmadı!\n"); 12: 13: 14: 15: printf("numara girin: "); 16: scanf("%d",&numara); 17: 18: for(i=0;i<12;i++) 18: fscanf(notlar,"%s",gecici); 19: 20: no = 0; 21: 22: while(!feof(notlar) ) 23: 24: fscanf(notlar,"%d\t%s\t%s\%d\t%d\t%d\n", 25: &no,ad,soyad,&mt1,&mt2,&final); 26: if( no==numara ) break; 27: 28: fclose(oku); 29: if( no ) 30: puts("öğrenci Bilgileri:"); 31: printf("numarası : %d",no); 32: printf("adı : %s",ad); 33: printf("soyadı : %d",soyad); 34: printf("1.vize : %d",mt1); 35: printf("2.vize : %d",mt2); 36: printf("2.vize : %d",mt3); 37: 38: else 39: puts("kayıt bulunamadı"); 40: 41: /*main*/ Bazı uygulamalarda, daha önce bir şekilde hazırlanmış olan bir dosyanın içeriğini değiştirmek gerekebilir. Program 4, eski.dat dosyasındaki verileri yeni.dat dosyasına aşağıdaki çevirir. Program kodları bir dosyadan diger bir dosyaya, bir verinin nasıl taşınacağına dair bir örnek teşkil eder. 4

dosya 1 dosya 2 X-degerleri 1.0 X Y 2.0 1.0 0.0 3.0 2.0 2.5 4.0 3.0 4.9 5.0 ---> 4.0 3.2 Y-degerleri 5.0 1.8 0.0 2.5 4.9 3.2 1.8 Program 4 : dosya1 in içindeki alt alta olarak yazılmış olan verileri, dosya2 ye şekildeki gibi yan yana yazar 1: /* dosya4.c */ 2: #include <stdio.h> 3: 4: main() 5: 6: FILE *oku,*yaz; 7: float x[5],y[5]; 8: char dosya1[12],dosya2[12],gecici[10]; 9: int i; 10: 11: printf("verilerin okunacağı dosyanın adı"); 12: scanf("%s",dosya1); 13: if( (oku==fopen(dosya1,"r"))==null ) 14: printf("%s dosyası acilamiyor",dosya1); 15: exit(); 16: 17: 18: printf("verilerin yazılacağı dosyanın adı"); 19: scanf("%s",dosya2); 20: if( (yaz==fopen(dosya1,"w"))==null ) 21: printf("%s dosyası acilamiyor",dosya2); 22: exit(); 23: 24: 25: /*dosya1 den verileri oku, bu verileri x[] ve y[] dizilerine sakla */ 26: fscanf(oku,"%s",gecici); /* rakamlarin disindaki degerleri okumak icin */ 27: 28: for(i=0;i<5;i++) fscanf(oku,"%f\n",&x[i]); 29: 30: fscanf(oku,"%s",gecici); 31: 32: for(i=0;i<5;i++) fscanf(oku,"%f\n",&y[i]); 33: 34: fclose(oku); /* verilerin bulundugu dosyayi kapat */ 35: 36: /* dizileri dosya2 ye yaz */ 37: fprintf(yaz,"x\ty"); 5

38: for(i=0;i<5;i++) 39: fprintf(yaz,"%f\t%f",x[i],y[i]); 40: fclose(yaz); /* verilerin yazildigi dosyayi kapat */ 41: 42: printf("%s --> %s dönüştürme işlemi gerçekleşti.",dosya1,dosya2); 43: 44: return 0; 45: Program 5 : rastgele erişimli dosyaya menülü örnek. Ekleme, listeleme, düzeltme ve silme işlemlerini yapmaktadır. #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<io.h> #define BOS 0 struct int ogr_no; char ad[25]; char soyad[25]; int a_s; int yys; ogr; char cev; char sec; char c; FILE *fp,*fp1; long int a,k_uz,k_kon; int k_say,k_no,tpl_k_uz; int i; float ort; void kgir() if((fp=fopen("c:\ogr.dat","wb"))==bos) do printf("\n Öğrenci numarasını giriniz:"); scanf("%d",&ogr.ogr_no); printf("ad: "); scanf("%s",ogr.ad); printf("soyad: "); scanf("%s",ogr.soyad); printf(" Ara sınav: "); scanf("%d",&ogr.a_s); printf(" Yarıyıl sınavı:"); scanf("%d",&ogr.yys); printf("\n\n Devam etmek istiyormusunuz? (e/h)"); fwrite(&ogr,k_uz,1,fp); sec=getche(); while(sec=='e' sec=='e'); 6

void liste() FILE *fp; int i,j,k_say; int k_no,tpl_k_uz; long int a,k_uz,k_kon; float ort; if((fp=fopen("c:\ogr.dat","rb"))==bos) a=fileno(fp); tpl_k_uz=filelength(a); k_say=tpl_k_uz/k_uz; printf("dosyadaki tüm kayıtların uzunluğu=%ld byte\n",filelength(a)); printf("tek bir kaydın uzunluğu %ld byte",k_uz); printf("\nkayıt sayısı=%d\n",k_say); printf("\nkaçıncı kayıta ulaşılacak? "); scanf("%d",&k_no); k_kon=(k_no-1)*(k_uz); fseek(fp,k_kon,0); fread(&ogr,k_uz,1,fp); printf("\n Öğrenci no=%d \n",ogr.ogr_no); printf(" Öğrenci adı=%s \n",ogr.ad); printf(" Öğrenci soyadı=%s \n",ogr.soyad); printf(" Ara sınav=%d \n",ogr.a_s); printf(" Yarıyıl sonu sınavı=%d \n",ogr.yys); ort=(.4*(ogr.a_s))+(.6*(ogr.yys)); printf(" ortalam=%f \n",ort); ; void degistir() if((fp=fopen("c:\ogr.dat","rb+"))==bos) a=fileno(fp); tpl_k_uz=filelength(a); k_say=tpl_k_uz/k_uz; printf("\nkaçıncı kayıta ulaşılacak? "); scanf("%d",&k_no); k_kon=(k_no-1)*(k_uz); fseek(fp,k_kon,0); fread(&ogr,k_uz,1,fp); printf("\n Öğrenci no=%d \n",ogr.ogr_no); printf(" Öğrenci adı=%s \n",ogr.ad); printf(" Öğrenci soyadı=%s \n",ogr.soyad); printf(" Ara sınav=%d \n",ogr.a_s); printf(" Yarıyıl sonu sınavı=%d \n",ogr.yys); ; printf("değittirilecek ara sınav notunu girin"); scanf("%d",&ogr.a_s); printf("değiştirilecek final sınav notunu girin"); scanf("%d",&ogr.yys); 7

; fseek(fp,k_kon,0); fwrite(&ogr,k_uz,1,fp); fseek(fp,0l,0); for(i=1;i<=k_say;i++) fread(&ogr,k_uz,1,fp); void silme() if((fp=fopen("c:\ogr.dat","rb"))==bos) if((fp1=fopen("c:\ogr1.dat","wb"))==bos) a=fileno(fp); tpl_k_uz=filelength(a); k_say=tpl_k_uz/k_uz; for(i=1;i<=k_say;i++) fread(&ogr,k_uz,1,fp); printf("\n Öğrenci no=%d \n",ogr.ogr_no); printf(" Öğrenci adı=%s \n",ogr.ad); printf(" Öğrenci soyadı=%s \n",ogr.soyad); printf(" Ara sınav=%d \n",ogr.a_s); printf(" Yarıyıl sonu sınavı=%d \n",ogr.yys); printf("bu kayıt silinsin mi? (e/h)\n"); cev=getche(); if(cev=='e' cev=='e'); else fwrite(&ogr,k_uz,1,fp1); fclose(fp1); remove("c:\ogr.dat"); rename("c:\ogr1.dat","c:\ogr.dat"); printf(".güncellenmiş KAYITLAR."); fseek(fp,0l,seek_set); if((fp=fopen("c:\ogr.dat","rb"))==bos) a=fileno(fp); tpl_k_uz=filelength(a); k_say=tpl_k_uz/k_uz; for(i=1;i<=k_say;i++) fread(&ogr,k_uz,1,fp); printf("\n Öğrenci no=%d \n",ogr.ogr_no); printf(" Öğrenci adı=%s \n",ogr.ad); printf(" Öğrenci soyadı=%s \n",ogr.soyad); printf(" Ara sınav=%d \n",ogr.a_s); printf(" Yarıyıl sonu sınavı=%d \n",ogr.yys); ; 8

void menu() char secim=0; while(secim<6) printf("[1] - KAYIT GİRİŞİ \n"); printf("[2] - KAYIT LİSTELE \n"); printf("[3] - KAYIT DEGISTIRME ISLEMLERI \n"); printf("[4] - KAYIT SILME ISLEMLERI \n"); printf("[5] - PROGRAMDAN CIKIS \n"); printf("\n"); printf("seçiminiz = "); scanf("%d",&secim); printf("\n"); if(secim==1) kgir(); if(secim==2) liste(); if(secim==3) degistir(); if(secim==4) silme(); if(secim==5) int main() menu(); return 0; 9