Mustаqil tа’lim va mustаqil ish
Mavzu: Standart kutubxona funksiyalari va ulardan foydalanish
Mundarija:
1. Kirish.
1.1. Mavzuning dolzarbligi;
1.2. Mavzuning maqsad va vazifalari;
2. Asosiy qism.
2.1.Reja; C# DASTURLASH TILIDA FAYLLAR BILAN ISHLASH. 2.2. Fayl va kataloglar ro’yxati.
2.3.Malumotlarni faylda yozish va o’qish
3. Yakuniy qism. 3.1. Xulosa; 3.2. Foydalangan adabiyotlar;
KIRISH XX asrning 80 - yillaridan oldin ishlab chiqilgan kompyuterlar uchun katta dasturiy sistemalarni ishlab chiqish juda ham mushkul vazifa edi. Buning eng katta sababi shu davrga xos bo’lgan kompyuterlarning imoniyatlarining chegaralanganidadir. Dasturiy komplekslarni ishlab chiqishda asosiy cheklanishlar kompyuter tezkor xotirasining sig’imi, ma’lumotlarni ikkilamchi xotira qurilmalaridan (magnit lentalar, barabanlar va x.k.) o’qish tezligi, prostessorning ishlash tezligi (ularning takt chastotalari bir necha yuz mikrosekund bo’lgan) bilan bog’liq. Bu davrdagi kompyuterlar xalq ho’jaligining hisob-kitob bilan bog’liq bo’lgan masalalarini yechish uchun mo’ljallangan edi. Kompyuterlarda boshqa xarakterdagi masalalarning yechishning iloji yo’q edi. Dasturchilar uchun shu kompyuterlarda yechilayotgan masala uchun berilgan ma’lumotlarni hisobga olgan holda masalaning yechish algoritmini ishlab chiqish birinchi o’rindagi vazifa hisoblangan. Bu borada N. Virtning mashhur ma’lumotlar+algoritm=dastur formulasini yodga olish yetarli. 80-yillardan keyin ishlab chiqilgan kompyuterlarning imkoniyatlari kengayib, ishlab chiqarish narxi keskin pasaygani tufayli ulardan foydalanish samarasi ortib bordi. Natijada, dastlab matn va grafiklar uchun muharrirlari ishlab chiqildi, keyinchalik multimedia qurilmasi yordamida tovushli ma’lumotlarni qayta ishlash imkoniyatlari ham paydo bo’ldi. Kompyuter tasviriy imkoniyatlarining kengayishi foydalanuvchilar uchun qulay bo’lgan grafik muloqot interfeysini yaratilishiga sabab bo’ldi. Natijada yuqori murakkablikdagi katta amaliy dasturlarni yaratish foydali hamda zarur bo’lib qoldi. Dasturiy vositalarni ishlab chiqish uchun qurol sifatida yuqori bosqichli algoritmik tillardan foydalanildi. Bu dasturiy vositalar dasturchi va dasturchilar guruhi imkoniyatlarini kengaytirib, dasturiy mahsulotlarning murakkablik darajasining ortishiga ham sabab bo’ldi. 4 Hozirgi kunda C# dasturlash tili yuqori bosqichli dasturlash tillari ichida eng samarali dasturlash tillaridan hisoblanadi. C# dasturlash tilida dastur tuzish uchun Visual Studio .NET muhitidan foydalanamiz. C# dasturlash tili obektga mo’ljallangan dasturlash tili hisoblanadi.
C# DASTURLASH TILIDA FAYLLAR BILAN ISHLASH.
2.1. Fayl va kataloglar ro’yxati. Bizga ma`lumki, fayl dеb xotiraning nomlangan sohasiga aytiladi. Faylda turli ma'lumotlar saqlanadi. Har bir fayl bilan fayl ko`rsatkichi dеgan tushuncha biriktirilgan. Fayl bir nеcha elеmеntlardan iborat bo`lib, foydalanuvchi faqat faylning ko`rsatkichi ko`rsatayotgan ma'lumotga murojaat qilishi mumkin. Dеmak, fizik jihatdan biz faqat kеtma-kеt fayllarga egamiz. Ya'ni biz oldin birinchi, kеyin ikkinchi, uchinchi va h.k. ma'lumotlarni o`qishimiz mumkin. Fayl o`z nomiga ega. Masalan, d:\ malumot.txt. C# tili dasturiy vositalari yordamida, ya'ni dasturda ham fayllarni tashkil qilish va undagi ma'lumotlarni qayta ishlash mumkin. Shu paytga qadar, C# dasturlash tilida bir nеcha o`zgaruvchilarning toifalari bilan ishlab kеldik. Bular skalyar, oddiy va murakkab tarkiblashgan toifalardir. Bu toifadagi ma'lumotlar yordamida masalalarni yеchishda boshlang`ich ma'lumotlar klaviaturadan opеrativ xotiraga kiritiladi va natija ekranga chiqariladi. Ulardan boshqa dasturlarda foydalanib bo`lmaydi, chunki ular tizimidan chiqilgandan so`ng ma’lumotlar hеch qayеrda saqlanmaydi. Bu ma'lumotlarni xotirada saqlash uchun C# dasturlash tilida ma'lumotlarning faylli toifasi bеlgilangan. Fayl toifasi alohida o`rin egallaydi. Fayl toifasi bilan ishlashda ma'lum tushunchalarni o`zlashtirish talab qilinadi. Birinchidan, fayllar toifasi nеga va qachon qo`llaniladi? Maqsad nima? Zaruriyat nimadan kеlib chiqyapti? Ikkinchidan, boshqa toifalardan nеga katta farqi bor? Bu savollarga faqat foydalanuvchining nuqtai nazaridan qaragan holda javob bеra olamiz: 1. Juda ko`p o`zgaruvchilardan foydalanganda ularning qiymatlarini har doim klaviaturadan kiritishda ma'lum noqulayliklarga duch kеlamiz. Bunga katta massivlar misol bo`la oladi. 2. Shunday masalalar uchraydiki, oldindan kattaliklarning qiymatlar soni noma'lum bo`ladi (masalan, natijalar), bu kattaliklarni faylga yozish maqsadga muvofiq. 3.Hеch qanday toifalar 50 tashqi qurilmalarga murojaat qilib, ular bilan ishlashga imkon yaratmaydi (dasturiy til muhitida). Va nihoyat, boshqa toifalardan fayl toifasi farqliligi shundaki, u boshqa toifalar tarkibiga kira olmaydi. Fayllarning turlari. Fayllar uchun mo`ljallangan umumiy protsеdura va funktsiyalar Faylda saqlanayotgan ma'lumotlar turiga ko`ra, turlarga bo`linadi: 1) toifalashmagan; 2) toifalashgan; 3) matnli. Toifalashgan fayllar bir xil toifali elеmеntlardan tashkil topadi. Ularni faqat ma'lum qurilmalarda uzatish mumkin, lеkin ekranda o`qish mumkin emas. Faylning elеmеntlari mashina kodlarida yoziladi va saqlanadi. Toifalashmagan fayllarda turli toifadagi ma'lumotlarni saqlash mumkin. Ular ham mashina kodlari bilan yozilgan bo`lib baytlar to`plamini tashkil qiladi. Matnli fayllar ASCII kodlardan tashkil topgan va qatorlarga ajratilgan bo`ladi. Matnli fayllarda nafaqat faylning yakunida fayl oxiri bеlgisi, balki har qatorning yakunida maxsus qator oxiri bеlgisi qo`yiladi. Fayl turidagi o`zgaruvchi fayl o`zgaruvchisi dеyiladi, u faylning mantiqiy nomini bеlgilaydi va u mantiqiy fayl bilan tashqi (fizik) fayl o`rtasida «vositachi» vazifasini o`ynaydi. Fayl turi uchun arifmеtik amallar bеlgilanmagan. Xatto fayllarni solishtirish va bir faylning qiymatini ikkinchi faylga o`zlashtirish amallari ham aniqlanmagan. Har bir turdagi fayllar ustida, umuman olganda, quyidagi amallarni bajarish mumkin va bu amallar uchun maxsus protsеdura va funktsiyalar ishlatiladi. Hozir biz katalog va fayllar ro’yxati ustida bajariladigan amallarni qarab chiqamiz. 1.Kompyuterda mavjud mantiqiy disklarni aniqlash uchun GetLogicalDrives() metodidan foydalanamiz. Quyida kompyuterda mavjud barcha mantiqiy disklarni ro’yxatini chiqaruvhi dastur keltirilgan. class Program { static void Main(string[] args) { string[] LogicalDrives = Environment.GetLogicalDrives(); 51 foreach (string a in LogicalDrives) { Console.WriteLine(a); } Console.ReadKey(); } } Dastur natijasi: C:\ D:\ E:\ F:\ Keyingi misolda yuzaga keladigan xatoliklarni oldini olish uchun System.Security.SecurityException metodidan foydalanamiz. class Program { [STAThread] static void Main(string[] args) { GetLogicalDrives(); Console.ReadLine(); } static void GetLogicalDrives() { try{ string[] a = System.IO.Directory.GetLogicalDrives(); 52 foreach (string b in a) { System.Console.WriteLine(b); } } catch(System.IO.IOException) { System.Console.WriteLine("xato"); } catch (System.Security.SecurityException) { System.Console.WriteLine("xato 1"); } Console.ReadKey(); } } 2. Diskdagi kataloglar ro’yxatini chiqarish uchun System.IO. Directory sinfining GetDirectories() metodidan foydalanamiz. Quyida uning dasturi keltirilgan. class Program { static void Main(string[] args) { try { string[] a = Directory.GetDirectories(@"d:\\"); Console.WriteLine("hamma papkalar :{0}.", a.Length); foreach (string b in a) { 53 Console.WriteLine(b); } } catch (Exception e) { Console.WriteLine("xato: {0}", e.ToString()); } Console.ReadKey(); } } Dastur natijasi: D diskdagi barcha kataloglarni ro’yxatini chiqaradi. 3. Endi maska orqali diskdagi kataloglar ro’yxatini chiqarishni ko’rib chiqamiz. Ya’ni quyida d diskdagi c harfi bilan boshlanuvchi barcha kataloglar ro’yxatini chiqaruvchi dastur keltirilgan. class Program { static void Main(string[] args) { try{ string[] a = Directory.GetDirectories(@"d:\\", "c*"); Console.WriteLine("barcha c harfi bilan boshlangan papkalar: {0}.", a.Length); foreach (string b in a) { Console.WriteLine(b); } } catch (Exception e) { Console.WriteLine("Xato: {0}", e.ToString()); } 54 Console.ReadKey(); } } 4. Berilgan katalogdagi fayllar ro’yxatini chiqarish uchun System.IO. Directory sinfining GetFiles() metodidan foydalanamiz. Quyida uning dasturi keltirilgan. class Program { static void Main(string[] args) { try { string[] a = System.IO.Directory.GetFileSystemEntries(@"d:\\TP71\\"); Console.WriteLine("d:\\TP71 katalogidagi barcha fayllar {0}", a.Length); foreach (string b in a) { Console.WriteLine(b); } } catch (Exception e) { Console.WriteLine("Xato: {0}", e.ToString()); } Console.ReadKey(); } } Dastur natijasi d:\\TP71 papkadagi barcha fayllarni ro’yxatini chiqaradi. 55 5. Endi maska orqali katalogdagi fayllar ro’yxatini chiqarishni ko’rib chiqamiz. Ya’ni quyida d:\\Hujjatlar katalogdagi barcha *.doc fayllarni ro’yxatini chiqarishni dasturi keltirilgan. class Program { static void Main(string[] args) { try { string[] a = Directory.GetFiles(@"d:\\Hujjatlar\\", "*.doc"); Console.WriteLine("d:\Hujjatlar\ papkasidagi 'doc' kengaytmali fayllar {0} ta", a.Length); foreach (string b in a) { Console.WriteLine(b); } } catch (Exception e) { Console.WriteLine("Xato: {0}", e.ToString()); } Console.ReadKey(); } } Dastur natijasi d:\\Hujjatlar\ papkasidagi *.doc kengaytmali barcha fayllar ro’y-xati chiqadi. 6. Endi maska orqali katalogdagi fayllar ro’yxatini chiqarishni qulayrog’ini ko’rib chiqamiz. Ya’ni quyida d:\Hujjatlar katalogidagi barcha a*.txt fayllarni ro’yxatini chiqarishni dasturi keltirilgan. 56 class Program { static void Main(string[] args) { try { string[] a = Directory.GetFiles(@"d:\\Hujjatlar\\", "a*.txt"); Console.WriteLine("d:\\Hujjatlar\\ papkasidagi a bilan boshlanuvchi 'txt' kengayt-mali fayllar {0} ta", a.Length); foreach (string b in a) { Console.WriteLine(b); } } catch (Exception e) { Console.WriteLine("Xato: {0}", e.ToString()); } Console.ReadKey(); } } Dastur natijasi d:\Hujjatlar\ papkasidagi a bilan boshlanuvchi 'txt' kengaytmali barcha fayllar ro’yxati chiqadi. Yana bir misolni ko’rib chiqaylik, ya’ni faylni hajmi va yaratilgan vaqtini ham chiqarsin. Quyidagi dasturda bu amallar ko’rib chiqilgan. class Program { static void Main(string[] args) { try{ 57 DirectoryInfo a = new DirectoryInfo("d:\\Cpp_misollar\\"); foreach (FileInfo b in a.GetFiles("*.cpp")){ string name = b.FullName; //faylning nomi long size = b.Length; //o'lchami DateTime creationTime = b.CreationTime; //yaratilgan vaqti Console.WriteLine(); Console.WriteLine( " "+size + "->" +creationTime +" ->"+ name);} } catch (Exception e){ Console.WriteLine("Xato: {0}", e.ToString());} Console.ReadKey(); } } Dastur natijasi quyidagicha bo’ladi. Bunda birinchi fayl hajmi, yaratilgan vaqti va nomi chiqadi.
2.2. Fayl va kataloglar ustida amallar. Bu bo’limda biz fayl va kataloglar ustida bajariladigan asosiy amallarni ko’rib chiqamiz. Bu uchun biz C# dasturlash tilida qaysi kutubxonadan foydalanamiz, qaysi sinflardan foydalanamiz va qaysi metodlardan foydalanamiz? har biriga alohida to’xtalib o’tamiz. C# dasturlash tilida fayl va kataloglar ustida amallar bajarish uchun juda ko’p sinflar yaratilgan va bu sinflarda fayl va kataloglar ustida amallar bajarish uchun juda ko’p metodlar mavjud. Mana shu metodlardan qanday qilib foydalanish jarayonini misollar orqali qarab chiqamiz. Kataloglar ustida bajariladigan asosiy amallar System.IO.Directory sinfining metodlari orqali amalga oshiriladi. 1. DirectoryInfo CreateDirectory(string nomi) – yangi katalog yaratish. 2. void Move(string eski nom, string yangi nom)- katalog nomini o’zgartirish yoki katalogni ko’chirish. 3. void Delete(string nom, bool x )- katalogni o’chirish, agar x parametrning qiymati true bo’lsa bu metod katalog ichidagi fayllar bilan birgalikda o’chiradi. 4. bool Exists(stirng nom) – bu metod chin qiymat qaytaradi agar papka mavjud bo’lsa, aks holda yolg’on qiymat qaytaradi. Endi yuqorida ko’rib o’tilgan metodlarni misollar orqali qarab chiqamiz. 1-misol. D diskda Salom nomli yangi papka yaratish. class Program { static void Main(string[] args) { //d: diskda salom nomli papka yaratadi 59 System.IO.Directory.CreateDirectory(@"d:\\salom"); Console.WriteLine("salom"); Console.ReadKey(); } } 2- misol. d:\aka papkasini c:\aka joyga ko’shirish. class Program { static void Main(string[] args) { System.IO.Directory.Move(@"d:\\aka","c:\\aka"); Console.WriteLine("dastur ishladi"); Console.ReadKey(); } } 3- misol. d:\aka papkasini o’chirish. class Program { static void Main(string[] args) { bool a = System.IO.Directory.Exists(@"d:\\aka"); if (a) { System.IO.Directory.Delete(@"d:\\aka"); Console.WriteLine("d: diskdagi aka papkasi o'chirildi"); 60 } else Console.WriteLine("aka papkasi yo'q"); Console.ReadKey(); } } 4-misol. d:\aka papkasini bor yo yo’qligini tekshirish. class Program { static void Main(string[] args){ bool a=System.IO.Directory.Exists(@"d:\\aka"); if(a) Console.WriteLine("d: diskda aka papkasi bor"); else Console.WriteLine("d: diskda aka papkasi yo'q"); Console.ReadKey(); } } 5- misol. d:\aka papkasini nomini o’zgartirish Buning uchun ham papkani ko’chirish amalidan foydalanamiz. class Program { static void Main(string[] args) { System.IO.Directory.Move(@"d:\\aka","d:\\aka1"); Console.WriteLine("dastur ishladi"); Console.ReadKey(); 61 } } Fayllarlar ustida bajariladigan asosiy amallar System.IO.FileInfo sinfining metodlari orqali amalga oshiriladi. 1. bool Exists – fayl bor yoki yo’qligini tekshiradi. 2. FileInfo CopyTo(string fayl nomi) – fayldan nusxa olish. 3. FileStream Creat() – yangi fayl yaratish. 4. StreamWriter CreatText() – matnli fayl yaratish. 5. void Delete() – faylni o’chirish. 6. void MoveTo(string fayl nomi)- faylni ko’chirish. Endi yuqorida ko’rib o’tilgan metodlarni misollar orqali qarab chiqamiz. 1-misol. Fayl bor yoki yo’qligini tekshirish. class Program { static void Main(string[] args) { System.IO.FileInfo a = new System.IO.FileInfo(@"d:\\БМИ.doc"); bool x = a.Exists; if (x) Console.WriteLine("d: diskda БМИ.doc fayli bor"); else Console.WriteLine("d: diskda БМИ.doc fayli yo'q"); Console.ReadKey(); } } 2-misol. Fayldan nusxa olish. class Program { static void Main(string[] args) 62 { //salom.txt faylini d: diskdan c: diskga nusxalaydi System.IO.FileInfo a = new System.IO.FileInfo(@"d:\\salom.txt"); a.CopyTo(@"c:\\salom.txt"); Console.WriteLine("salom.txt faylini d: diskdan c: diskga nusxaladi"); Console.ReadKey(); } } 3-misol. Yangi fayl yaratish. class Program { static void Main(string[] args) { //d diskda salom.doc faylini yaratadi FileStream a = File.Create(@"d:\\salom.doc"); Console.WriteLine("d diskda salom.doc faylini yaratdi"); Console.ReadKey(); } } 4- misol. Matnli fayl yaratish. class Program { static void Main(string[] args) { 63 //"d diskda salom.txt matnli fayl yaratiladi" StreamWriter a = File.CreateText("d:\\salom.txt"); a.WriteLine("salom aka"); //"salom aka" matnni salom.txt fayliga yozadi a.Close(); //yozishni tugatish Console.WriteLine("d diskda salom.txt matnli fayl yaratildi"); Console.ReadKey(); } } 5- misol. Berilgan faylni o’chirish. class Program { static void Main(string[] args) { //d diskdagi ko'rsatilgan faylni o'chiradi FileInfo a = new FileInfo("d:\\salom.doc"); a.Delete(); Console.WriteLine("fayl o'chirildi"); Console.ReadKey(); } } 6-misol. Berilgan faylni ko’chirish. class Program { static void Main(string[] args) { 64 System.IO.FileInfo X = new System.IO.FileInfo(@"d:\\kitoblar\\Milliy g'oya\\12.docx"); X.MoveTo("d:\\14.docx"); Console.ReadKey(); } } 2.3. Ma’lumotlarni faylda yozish va o’qish. Fayl bu ma’lumotlarning fundamental strukturalaridan biri. Kompyuterlarning dastur bilan ishlashi, tashqi qurilmalar bilan aloqasi fayl strukturasiga asoslangandir. Fayllar quyidagi masalalarni yechishga asoslangandir: 1. Qiymatlarni boshqa dasturlar foydalanishi uchun saqlab qo’yish; 2. Dasturning kiritish-chiqarish tashqi qurilmalari bilan aloqasini tashkil qilish. Fayl tushunchasining ikki tomoni bor: 1- Tomondan fayl – tashqi xotiraning biror axborotni saqlovchi nomlangan bir qismidir. Bunday tushunchadagi fayl fizik fayl deb ataladi. 2- Tomondan fayl – bu dasturda ishlatiladigan ma’lumotlarning turli strukturalaridan biridir. Bunday tushunchadagi fayl mantiqiy fayl deb ataladi, yani u bizning tasavvurimiz bilan hosil qilinadi. Fizik fayl strukturasi Fizik fayl strukturasi axborot tashuvchi – qattiq yoki yumshoq magnit disklaridagi baytlarning oddiy ketma-ketligidan iborat. 65 Mantiqiy fayl strukturasi Mantiqiy fayl strukturasi – bu, faylni dasturda qabul qilish usulidir. Obrazli qilib aytsak, u biz faylning fizik strukturasiga qarashimiz mumkin bo’lgan «shablon»dir. Ana shunday shablonlarga misol ko’raylik: Belgi Belgi … Belgi eof Bu yerda har bir belgi faylning bir yozuvi, eof esa faylning oxirini bildiradi. Yo’nalish tugmasi belgisini marker deb ataylik, markerni dastur ko’rsatmasi bilan faylning ixtiyoriy yozuviga keltirib qo’yish va o’sha yozuvni o’qish mumkin. Bunda har bir o’qishda faqat bitta belgi o’qiladi. Yuqorida fayl yozuvi sifatida belgili tipni oldik, endi fayl yozuvi sifatida strukturani olamiz: Bu yerda bizda strukturada quyidagicha malumotlar bor desak 2.3.1-jadval. Fayl strukturasidagi ma’lumotlar ko’rinishi. Aliev Buxoro,15 1974 Bozorov P.Neruda,12 1985 Akramov Nakshband,45 1980 Karimov Galaba,13 1976 Har bir yozuvda 3 ta maydon bor va yozuvlar soni esa to’rtta. Agar biz fayldan 1-chi yozuvni o’qishni buyursak, unda bir o’qishda 3 ta o’zgaruvchida 66 Aliev, Buxoro 15, 1974 ma’lumotlari birdaniga o’qiladi. Buni qanday amalga oshirishni quyida ko’ramiz. Agar fayl strukturasini massiv strukturasiga solishtirsak, quyidagi farqlarni ko’ramiz: 1. Massivda elementlar soni xotirani taqsimlash vaqtida o’rnatiladi va u to’laligicha tezkor xotiraga joylashadi. Massiv elementlari raqamlanishi uni e’lon qilishda ko’rsatilgan quyi va yuqori chegaralarga mos holda o’rnatiladi. 2. Faylda esa elementlar(yozuvlar) soni dastur ishi jarayonida o’zgarishi mumkin va u tashqi axborot tashuvchilarda joylashgan. Fayl elementlarini raqamlash 0 dan boshlanadi va elementlar soni doim noaniq. Biz yuqorida o’zgaruvchilarning turli toifalari bilan ishlab keldik. Bular skalyar, oddiy va murakkab tarkiblashgan toifalardir. Bu toifadagi ma’lumotlar yordamida masalalarni yechishda boshlang’ich ma’lumotlar klaviaturadan operativ xotiraga kiritiladi va natija ekranga chiqariladi. Ulardan boshqa dasturlarda foydalanib bo’lmaydi, chunki ular tizimdan chiqilgandan so’ng hech qayerda saqlanmaydi. Bu ma’lumotlarni xotirada saqlash uchun C# tilida ma’lumotlarning faylli toifasi belgilangan. Toifalashgan fayllar bir xil toifali elementlardan tashkil topadi. Ularni ma’lum qurilmalarda uzatish ham mumkin. Faylning elementlari mashina kodlarida yoziladi va saqlanadi. Toifalashmagan fayllarda turli toifadagi malumotlarni saqlash mumkin. Ular ham mashina kodlarida yozilgan bo’lib baytlar to’plamini tashkil qiladi. Matnli fayllar ASCII kodlardan tashkil topgan va qatorlarga ajratilgan bo’ladi. Matnli fayllarda nafaqat faylning yakunida fayl oxiri belgisi, balki har qatorning yakunida maxsus qator oxiri belgisi qo’yiladi. 67 Fayl tipidagi o’zgaruvchi fayl o’zgaruvchisi deyiladi, u faylning mantiqiy nomini belgilaydi va u mantiqiy fayl bilan tashqi(fizik) fayl o’rtasida «vositachi» vazifasini o’taydi. Yuqoridagi barcha turdagi fayllar ustida, umuman olganda quyidagi amallarni bajarish mumkin va bu amallar uchun quyidagi maxsus metodlar ishlatiladi:
Dostları ilə paylaş: |