51 - Dosyay Okuyalm ok gzel! Perl ldrmeden dosyay amay...

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: Dosyay Okuyalm ok gzel! Perl ldrmeden dosyay amay baardk! imdi sra Perle dosyadaki yazy satr satr okutmakta. Fakat bu ok kolay. open() fonksiyonunda belirttiiniz dosyann tutaman (belirteini, Handlen, Nickini!) byktr-kktr iaretleri arasnda ve herhangi komutun veya fonksiyonun paras veya argman olarak belirttiiniz anda, Perl, iki eli kanda olsa, gider ve dosyadan bir satr okur; gelir! Bu cmle biraz kark oldu. en iyi rnekle anlatalm. Yukarda ornek.txt dosyasn, Perle DOSYA tutamayla amasn bildirdik. imdi Perle bu dosyadan bir satr okutalm. Bunun iin nce kendinize bir ornek.txt dosyas yapmanz ve bunu Perl dosyasnn alt dizine koymanz; farkl dizine koyacaksanz open() fonksiyonunu yazarken, yukarda rendiimiz ekilde, doru arama yolu belirtmeniz gerekir. Benim ornek.txt dosyamn birinci satrnda unlar yazl: Bu bir rnek dz yaz dosyasdr. Bu dosyann iinde bir ok bilgiler yer alyor. Sonra an Not Defterini (veya herhangi bir dzyaz programn) vey u kodu yazarak dosya01.pl adyla kaydedin: print "HTTP/1.0 200 OK\n"; print "Content-Type: text/html\n\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>Tekrarlama</TITLE>\n"; print "<meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-9\">\n"; print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1254\">\n"; print "</HEAD>\n"; print "<BODY>\n"; print "<H4>Dosya A</H4>\n"; print "<p>\n"; open (DOSYA, "<ornek.txt") || &Hata; $satir1 = <DOSYA>; print $satir1; sub Hata { print "Bir hata oldu; dosya almyor. Ya bu dosya yok, ya da biz Perl yazarken bir hata yaptk!\n"; print "ok zr dileriz.. uray tklayn da bari baka bir tarafa gidin!\n"; print "<A HREF=\"baska_bir_taraf.htm\">Tklayn!</A>\n"; exit } print "</BODY>\n"; print "</HEAD>\n"; print "</HTML>\n"; Bu kodda, okumak amacyla ve DOSYA tutama ile ornek.txt dosyasn ayoruz; ve ve ilk satrn okutup; okunan metni $satir1 deikeninin deeri yapyoruz. Bunu hangi komut yapyor? Byktr-kktr iareti iine alnm olan DOSYA tutama yapyor: <DOSYA>. Burada byktr-kktr iaretlerine Dosya Girdi Operatr (File Input Operator) denir. Bunu izleyen satrda print() fonksiyonu, bu deikeni ekrana gnderiyor. Bu altrmay yapt iseniz, ve dosyann adn veya yolunu yanl yazd iseniz, u anda ekranda hata mesajn gryorsunuz! Herey yolunda gitti ise rnek yaz dosyanzn birinci satrn gryor olmalsnz. Belki ekranda belli olmuyor, ama grntlenen sadece birinci satrdaki harfler, rakamlar ve iaretler deil, fakat ayn zamanda satrn sonundaki yeni satr (newline) karakteri de ekrannzda! Yani gerekte ekranda grntlenen metin u ekilde: Bu bir rnek dz yaz dosyasdr. Bu dosyann iinde bir ok bilgiler yer alyor.\n Perln bir dosyadan bir satr yaz okuyabilmesi iin yeni satr karakterini bulmas gerekir. Bu Perln satr sayd veriyi tanmlamasn salar. Hatrlarsanz, bu karakteri chomp() fonksiyonu ile atabiliyoruz! Yine hatrlarsanz, $_ eklinde yazlan zel bir deikenden sz etmi, bu deikenin Perle gelen her verinin ilk urak yeri olduunu sylemitik. Birazdan, bu deikeni kullanacaz. imdilik, $satir1in deerinin $_in deerine eit olduunu belirtmekle yetinelim. Bu arada, Perle bir koul gerekleinceye kadar, biteviye i yaptrtma, yani dng kurma fonksiyonlarmzdan while() da hatrlyor musunuz? Bu fonksiyon, yle kullanlyordu: while (koul) { ....koul; ...doru; ...iken; ...yaplacak; ...iler; } koul doru deilse yaplacak iler; imdi bunu dosya okutmakta kullanalm; ve yukardaki kodu biraz deitirelim. dosya01.plde : $satir1 = <DOSYA>; print $satir1; satrlarnn yerine u bloku yazn: while (<DOSYA>) { print $_; } Perl programn dosya02.pl adyla kaydedin; ve altrn. imdi ekranda rnek yaz dosyasnn ieriini tmyle gryor olmalsnz. Bunu salayan bu satrlk blm irdeleyelim: while() fonksiyonu verdiiniz koul doru olmaya devam ettii srece, ssyl parantezle belirlenen kendi bloku iindeki komut ve fonksiyonlar icra eder. Dosya Girdi Operatr (yani <> iaretleri) arasna aldnz dosya tutamann doru olmaya devam etmesi demek, Perln dosyada okunacak yaz kalmadna karar vermesi demektir. Dosyada okunacak yaz kald srece, Dosya Girdi Operatr dosyay satr satr okuyacak ve her satr $_ deikeninin iine yazacaktr. Perl programmz ikinci admda bu deikeni ekranda grntleyecek ve yeniden while() dngsnn bana dnecektir. Ve bu ilem, dosyada okunacak yaz kalmayncaya (veya teknik deyimiyle dosya sonu iaretine [EOF] rastgelinceye kadar) bu ilem devam edecektir. imdi, buradaki rnekte Perln okuduu her satr ya Perln ya da bizim Tekil/Scalar deikene koyduumuza dikkat ediyor musunuz? Yani her yeni satr okunduunda, bir nceki satr siliniyor! Oysa biz dosya ilemlerini ou zaman dosyann tm ieriini alp kullanmak amacyla okutuyor olabiliriz. Acaba okunan her satr bir dizi-deikenin iine koyamaz myz? Neden olmasn? dosya02.pldeki while() blokuna ait satr silin ve yerine u satr yazn: @satirlar = <DOSYA>; print @satirlar; Bu kez dosyay dosya03.pl adyla kaydedin ve Browserda an. Yine dosyann tm ieriini gryor olmalsnz. Bu kez, okuttuunuz dosya kaybolmad; hepsi @satirlar deikeninin iinde duruyor. imdi size bir pop quiz! 1. @satirlarn ka eleman var? 2. Bu elemanlar tek tek nasl grntleyebilirsiniz? (Bu sorularn cevab, bu kitapn materyalini oluturan zip dosyasnda, popquiz.pl dosyasnda bulunabilir.) ...
View Full Document

This note was uploaded on 02/23/2012 for the course CS CS281 taught by Professor Özgürulusoy during the Winter '12 term at Bilkent University.

Ask a homework question - tutors are online