ESD dosyalarını ISo formatına evirme konusunda daha nceki yazılarımızdan birinde aıklama yapmış ve bunu gerekleştirmek iin gerekli bir scripti paylaşmıştık , yine aynı yazımızda Micrsoftun neden ESD formatını(adsbygoogle = window.adsbygoogle []).push(); tercih ettiği konusunda da fikrimizi yazmıştık Burada , elbette Nette bu iş iin farklı aralarda bulunabilir ve bunların temel amacı Microsofttan indirilen ESD doosyalarını , el değmemiş ISO formatına evirmektir , İşte bu yazımızda bu format değişkliğini yapmak iin kurulduğunda kendini sağ tuşa ekleyen ve ESD dosyasına sağ tıklayıp "Convert to ISO" konutu verip kolayca ESD formatını ISO ya evirebileceğimiz diğer bir yazılımı tanıtmaya alışacağız
2. Kurulum işleminin sonunda aşağıdaki gibi bir yazı ıkacaktır , Bunun anlamı Esd to ISo nun sağ tuşumuza eklendiği ve artık oradan kullanabileceğimizdir , exit tuşuna basıp kurulumu terk edelim
Bu yazının amacı C dilinde dosya işlemlerinin nasıl yapıldığını anlatmaktır. C dilindeki dosya işlemlerinden nce bu dilde yazılan programın alışacağı işletim sisteminin dosya yapısının iyi bilinmesi gerekmektedir. Bu yazının konusu dışında olan işletim sistemlerinin kullandığı dosya sistemlerini ltfen okuyunuz.
Dosya aıldıktan sonra dosyaya okuma ve yazma işlemleri yapılabilir. Okuma ve yazma işlemlerinin yapılabilmesi iin yukarıda anlatılan dosya ama işlemine ilave olarakaılan dosyayı gsteren bir gstericiye (pointer) ihtiya duyulmaktadır. Bu gsterici fopen fonksiyonu tarafından dndrlmektedir. Kod rneği aşağıdadır:
yukarıdaki rnek kodun ilk satırında fp isminde bir dosya gstericisi tanımlanmıştır. İkinci satırında ise bu gstericinin ierisine fopen fonksiyonundan dnen değer atanmıştır. Buna gre dosyaya erişilmesi istendiğinde fp gstericisi zerinden işlem yapılması yeterlidir.
Dosyalardan okuma ve yazma yapan ok sayıda fonksiyon olmasına karşılık anlaşılması en kolay fonksiyonlar C dili ilk ğrenilirken ğrenilen scanf ve printf fonksiyonlarının birer trevi olan fscanf ve fprintf fonksiyonlarıdır. Birer rnek aşağıda verilmiştir:
Kodumuzdaki main fonksiyonu ierisinde, 12. satırda, ogrenci yapısından bir tip oluşturulmakta ve bu yeni tipe xyz ismi verilmektedir. Bu tip, C dilinde tanımlı olan diğer tipler gibi (rneğin int, char, float) bir tip olmakta ve bu tipten yeni değişkenler tanımlamamıza imkan tanımaktadır.
Yukarıdaki kodda, 21. satırda xyz tipinde bir değişken tanımlanıp, ardından 22-29. satırlar arasında bu değişkenin ierisine klavyeden değer okunmuştur. Okunan değerler yapı (struct) ierisinde ilgili değişkenlere yerleştirilmiş ve hafızada tutulmaktadır.
Yukarıdaki kodun, 36. satırında, aranan ismi tutmak amacıyla bir dizgi (string) tanımlanmış ve bu değişkenin ierisine kullanıcıdan aranması istenen değer 37. satırda scanf ile okunmuştur.
42. satırda feof fonksiyonu ile dosyanın sonuna kadar dnen bir dng tanımlanmıştır. Buradaki dng fp gstericisinin dosya sonunu gstermesi durumunda 1 dndrmektedir. Dolayısıyla dosya sonuna kadar 1 dnmesini ve dosya sonuna ulaşılınca 0 dnmesini sağlamak maksadıyla ! işaretiyle dnen değerin tersi alınmaktadır. While dngs kısaca dosya sonuna kadar dnen bir dng halini almıştır.
44. satırda okunan değerlerden isim bilgisi, aranan dizgi (string) ile karşılaştırılmakta ve eşitlerse 45. satırdaki printf fonksiyonu alışmakta ve ekrana aranan ğrenci bilgisini yazmaktadır. Eşit olmaması durumunda bir sonraki ğrenciye devam edilmektedir.
ardından arama işleminin yapıldığı if koşulu ierisinde string karşılaştırmak iin kullanılan strcmp fonksiyonu yerine, int karşılaştırması yapmanız gerekir. Kısaca kodun 44. satırını aşağıdaki şekilde değiştirmeniz yeterlidir:
yukarıdaki 3 satırı anlatıldığı gibi değiştirirseniz, istediğiniz şekilde ğrnecileri numaralarına gre arar. bu durumu 35. satırda bulunan printf ierisindeki mesajda da dzeltebilirsiniz.
Hocam benim bir metin dosyasına herhangi bir yazı dizini yazıp bunu 8 karekter 8 karakter alt alta yazdırmam ve en alttaki 8 karakteri tekrar alıp başka bir dosya ierisinde en başa ondan sonra gelen ikinci 8 karakteri onun yanına sonra geleni tekrar alt satıra şeklinde btn metin dosyasını işlemem gerekiyor. Bunun iin yardımcı olursanız sevinirim.
Arkadaşlar diyelim ki bir ğrenci burdaki gibi tek ders değilde birden fazla ders alıyorsa o zaman o ğrencinin aldığı btn derslerin isimlerini vizelerini finallerini arama yaptırarak nasıl okuttururuz.Ltfen cevap verin.Teşekkrler.
Şyle diyim şimdi ben i ie struct kullanarak ğrencileri aldığı dersleri derslerin vize ve finallerini bir dosyaya yazdırdım.Şimdi herhangi bir ğrenci numarasına gre arama yaptırıcam ve o ğrencinin vize ve final notlarını ekrana ıkartıcam.Şimdi ben aramayı nasıl yaprıtıcam onu bilmiyorum.Yarım ederseniz sevinirim.
Bu satırlarda bulunan malloc fonksiyonu, temel olarak bir stringi (char *) tanımlamaya yarar. Bilindiği zere dizgiler (String) birer karakter dizisidir. Bu dizileri, gsterici (pointer) ile tutmak da mmkndr. Kodda da yapılan işlem aynen budur, yani bir char gstericisi, bir char dizisini gstermektedir. Bu gsterilen diziye de string yerleştirilmiştir.
Elbette gsterici (pointer) ile bir dizi tanımlama konusundaki en nemli fark, klasik tanımlamaya gre (rneğin char a[100] şeklindeki dizi tanımı), boyutunun verilmemesidir. Bu bize dinamik boyutta dizi tanımlama imkanı sunar. rneğin 5 karakterli bir kelime ile 500 karakterli bir kelimenin boyutları iin hafızada tam olarak gereken yeri ayırabiliriz.
Bu yer ayırma işini ise malloc fonksiyonu yapar. ierisine aldığı boyut kadar hafızada yer ayırır ve gstericimiz bu yeri gsterir.
Bakın saydığınız zelliklerden en basiti listeleme. Bunun iin yukarıdaki kodda, 44. satırda bulunan if koşulunu kaldırmanız yeterlidir (veya bu if bulunmadan yeni bir seeneği menye eklemek). bu bir zm olur nk yukarıdaki kodda 42. satırda bulunan dng, dosyanın sonuna kadar okuma yapmakta ve okunan her satırı, 44. satırdaki if koşulu ile kontrol etmektedir. Şayet bu if koşulu kalkarsa, okuduğu her değeri ekrana basar ve bu durumda btn dosyayı listelemiş olursunuz.
Silme işlemi iin ne yazık ki bu basit dosyalama yapılarında ok başarılı bir zm bulunmuyor. Silme sırasındaki en byk problem, veri silindikten sonra oluşan boşluğun kapatılması. rneğin aşağıdaki şekilde verilerin bir dosyada bulunduğunu dşnn :
Bu verilerden rneğin C silinecek olursa, DEF bilgilerinin kaydırılması gerekir. Kaydırma işlemi ise btn dosyanın yeniden okunup silinecek olan veri atlanarak yeniden yazılması demektir. Adım adım yazacak olursak:
Fakat değiştirme işleminde, silmeye gre bir avantajımız, dosyadaki diğer verilerin yazılmasını gerektirmemesdir. Bu durumda dosya gstericisi, rneğin fseek komutu kullanılarak dosya zerinde ilgili konuma hareket ettirilebilir ve bu konumda yazma işlemi yapıldığında eski verinin zerine yazılarak, eski veri silinmiş olunur. Uygun bir zamanda, yukarıdaki anlatıma fseek komutunun nasıl alıştığını ekleyip aıklamaya alışırım.
okunan yapısı (Struct), kodun 5-12 satırları arasında tanımlanan ve akabinde 21. satırda tanımlanan değişkendir. Dosyadan okuman istediğimiz bilgi tipini tutar. Buna gre okunan değişkeninde isim, soy isim ve no yeleri bulunmaktadır. Yorumunuzda belirttiğiniz isim ve soyisim yeleri, char * tipinde tanımlanmış birer dizgidir (String).
benim yazdığım kodda arama yapacağım zaman isime gre arama yapıyor fakat bir mddet sonra isime gre değilde soyada gre yapmaya başladı. Halbuki ben scanf e isime gre arama yapmasını yazmıştım ve strcmp de karşılaştırılan karakterler OgrAd ile ad karekteridir. Problem ne olabilir?
scanf fonksiyonunda kullanılan & işareti aslında bir gsterici (pointer) işaretidir ve okunan değerin konulacağı adresi belirtir. Stringler C dilinde zaten birer gsterici (pointer) olarak tutulmaktadır. (ya bir dizidir ve [] sembolleri ile belirtilir veya doğrudan bir gstericidir ve * sembol ile tanıtılır) Bu yzden dizgilerin (string) okunması sırasında ayrıca & sembol kullanılmaz.
ilk sorunuzu ne amala soruyorsunuz? şayet basit dosya işlemleri iin soruyorsanız iki yntem izlenebilir:
1. dosyanın ieriği tamamen hafızaya okunur (rneğin bir diziye) ilgili değişiklilker bu dizide yapılıp geri basılır
2. dosyanın ieriği okunarak ikinci bir dosyaya yazılır. Bu okuyup yazma işlemi sırasında aranan kelime geiyorsa bu kelime yazılmaz yerine değiştirilmesi istenen kelime yazılır.
Yukarıdaki iki yntemin dışında dosya zerinde, dosyanın tamamını okumadan da değişiklik yapmanız mmkn. rneğin bir veritabanı (database) kodlaması gibi amacınız varsa bu yntem daha kullanışlı olur ama biraz daha karmaşıktır. Bunun iin ncelikle dosyada aradığınız kelimenin nerelerde olduğunu bilmeniz gerekir (rneğin bir ağa yapısı ile indeks olduğunu kabul edelim) ardındna buraya fseek ile gidip değişikliği yapmanız gerekir. Elbette kelime boylarını doğru hesaplamanız lazım aksi halde eski kelimeden hemen sonra başka kelimeler varsa ve eski kelimeden uzun bir kelime yazarsanız bu diğer kelimelerin zerine yazılır.
ben devimin bu kısmında takıldım rehber dosysını olusturdum ancak rehber dosyasıyla krum dosyası arasında nasıl bır baglantı kurup kontrol edıcem ornegın kurum dosyasında kullanıcının bır tc grmesını ıstıcem ve bu tcnın rehberde olup olmadıgını kontrol etmem gerek..(Kurum.txt: Bu dosyada ynetici ile aynı kurumda alışanların bilgileri bulunacaktır. Bu dosyada bulunan kişilerin hepsi Rehber.txt dosyasında bulunmak zorundadır; ancak Rehber.txt dosyasındaki her kişinin Kurum.txt dosyasında bulunma gibi bir zorunluluğu yoktur.)
59fb9ae87f