• 3 Aralık 2024 20:19

Sait ORHAN

Öğretmek için Öğrenin- Öğrenmek için Öğretin

C# ile Dosya Okuma Yazma İşleme

BySait ORHAN

Şub 8, 2014

Ödev Metni

Bir input dosyasından kayıtlar okunacak ve kayıtlarda ki bir anahtar alana göre sıralı bir output dosyası oluşturulacaktır.
    input1.txt 
Kayıtlar sırasız bir şekilde yerleştirilmiş ve bütün kayıtların uzunluğu değişkendir. Kayıtlarda ki alanların uzunlukları da genelde değişkendir ve alanlar birbirinden ‘|’karakteriyle ayrılmaktadır. Kayıtlarda ki alanlar:

Ders kodu (7 characters)

Ders adı (variable length >= 1)

Dersin kredisi (1 character)

Önşart dersi (variable length >= 0)

Ders açıklaması (variable length >= 1)

    output.txt  
Output Dosyasında yapılacak işlemler:

Sort – Output dosyasında kayıtlar Ders koduna göre sıralı olarak yerleştirilmiş olacak.
Duplicate eleme – Dosyada çift kayıtlar (aynı ders koduna sahip dersler var ise bunlar istenirse silinebilecek)
Insert – output.txt’ye sıralı yerine kayıt ekle

Projenin Raporu

Projenin çalışır kodlarını indirmek için TIKLAYIN

Kayıtların Dosyada Tutulma Formatı ve Kayıt Bilgilerin Ayrıştırılması

Dosyada her bir satır bit kayıttır ve her bir kaydın alanları birbirinden | karakteri ile ayrılmaktadır. Dosyadan her okumada bir satır dolayısı ile bir kayıt okunur. Okunan bu kayıt “|” karakteri baz alınarak parçalanır ve her bir parçası oluşturulan bir diziye atanır. Bu dizi içerisinde her zaman;

0. Eleman: Dersin kodu

1. Eleman: Dersin adı

2. Eleman: Dersin Kredisi

3. Eleman: Dersin şart dersi (şart ders yok ise bu eleman boş kalır)

4. Elaman: Dersin açıklaması bulunur.

Ders Sınıfı

Bu sınıf, her bir kaydı temsil eden dersleri barındıracak olan yapıyı sunar. Sahip olduğu metot ve özellikle aşağıdaki gibidir;

public enum SiralamaOlcudu

Sıralama metodunda sıralamanın hangi alana göre yapılacağını belirtmek için kullanılan parametreyi daha anlaşılır yapmak için kullanılan yapıdır. İçerdiği alan şu şekildedir;

KredisineGore, KodunaGore, AdinaGore

Sınıfın Sahip Olduğu Alan ve Yapıcı Metotlar

private string _Kod: Dersin kodunu tutar ve yedi karakter uzunluğundadır.

private string _Ad: Dersin adını tutar ve en az bir karakter uzunluğundadır.

private int _Kredi: Dersin kredisini tutar ve bir karakter uzunluğundadır.

private string _OnSart: Dersin varsa şart dersi onu tutar ve herhangi bir uzunluk sınırlamasına tabi değildir.

private string _Aciklama: Dersin açıklamasını tutar ve en az bir karakter uzunluğundadır.

Sınıf iki adet yapıcı metot içerir bunlardan biri boş parametre listesi ile çağrılabilirken diğeri nesnenin özellikleri taşıyacak şekilde çağrılır.

Ders Arama Metodu

public static Ders DersAra(string dosya, string DersKodu) prototipine sahiptir. Parametre olarak içinde arama yapacağı dosyanın adresini ve arayacağı dersin konu alır. Adresini aldığı dosyadan sırayla kayıtları çekerek aradığı kayıt olup olmadığını araştırır. Elindeki kayıt aradığı kayıt ise Ders sınıfından bir nesne olarak döndürür. Bu şekilde dosyanın sonuna kadar ilerler. Dosyanın sonuna geldi ise ve kaydı bulamadı ise Ders sınıfından null değer taşıyan bir nesne döndürür.

Sıralama Metodu

public static List<Ders> Sirala(List<Ders> Siralanacak, bool DosyayaYazilsinMi, SiralamaOlcudu NeyeGore) prototipine sahiptir. Parametre olarak sıralayacağı kayıtların listesini, sıralama sonucunun dosyaya yazılıp yazılmayacağını ve sıralamanın neye göre yapılacağını belirten değerler alır.

Sıralama işlemi için kabarcık sıralama algoritmasını kullanır. Kayıtları sırayla ikili olarak karşılaştırır. Önce gelen kayıt sonraki kayıttan büyük ise yer değiştir. Böylece her iterasyonda listenin en büyük elemanı listenin sonuna gelmiş olur. Sıralama sırasında içerisinde bulundurduğu bir switch-case yapısı ile SiralamaOlcudu parametresinin değerine göre kaydın hangi alanlarını karşılaştıracağına karar verir.

Dersleri Listeleme metodu

public static List<Ders> DersleriListele(string dosya) prototipine sahiptir. Parametre olarak kayıtların okunacağı dosya yolunu alır ve sonuçta Ders sınıfından bir liste döndürür.

Kayıtları sırayla dosya sonuna kadar okuyup her bir kaydı Ders sınıfından bir nesneye çevirip döndüreceği listeye ekler ve dosya sonuna geldiğinde listeyi dönderir.

Dosyaya Yazma Metodu

public bool DosyayaYaz(string dosya) prototipine sahiptir. Parametre olarak yazma yapacağı dosya yolunu tutar.

Üzerinden çağrıldığı nesneyi parametre ile belirtilen dosyaya eklemeye çalışır. Ekleme başarılı olursa true başarısız olursa false değer döndürür.

Form1 Sınıfı (Uygulama Katmanı)

Kayıt İçin Girilen Değerlerin Doğruluğunu Test Eden Metot

bool KayitlariKontrolEt(out string Kod,out string Ad,out int Kredi, out string onSart, out string Aciklama, out string DonecekHataMesaji) parametresine sahiptir. Parametre listesi Ders sınıfından nesnenin özellikleridir ve hatalı kayıt olması durumunda hata mesajını taşıyacak olan stringtir.

Test işlemi için öncelikle ilgili metin kutularından değerleri çekip ilgili değişkenler atar daha sonra uzunluk bilgilerine bakar. Bu noktada ders kodu değişkeninin ilk dört karakterinin harf son üç karakterinin de rakam olmasını test eder. Test sırasında ilk hatalı değişkende; ilgili değişkenin hata mesajını DonecekHataMesaji’na atar ve false değer döndürür. Bütün kayıtların doğru formatta olduğu görüldüğünde hatamesajı içeriğini boş bırakarak true değer döndürür.

İnput.txt Dosyasına Yeni Kayıt Ekleme

Bu işlem için öncelikle KayitlariKontrolEt metodu çağrılır ve true değer dönerse şu işlemleri yapar;

Metin kutularına girilen değerler ile Ders sınıfı tipinden bir nesne oluşturur ve bu nesne üzerinden DosyayaYaz metodunu çağırır.

Bir Dersi Koduna Göre Arama

Ders arama bölümündeki ders kodu metin kutusundan arayacağı kodu alır ve bu kodla beraber içinde arama yapacağı dosya adını DersAra statik metoduna parametre olarak atar. Sonuçta dönen değer nul değer ise kaydın bulunmadığına yönelik mesaj verir. Dönen değer dolu ise kaydın bilgilerini ilgili alanlara girer.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.