GiRİŞ Perl Komutları Nasıl Yazılır?



Yüklə 0,83 Mb.
səhifə3/7
tarix02.11.2017
ölçüsü0,83 Mb.
#26951
növüYazı
1   2   3   4   5   6   7

LİSTE gösterimi:

(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) gösterimi ile (1..10) gösterimi aynıdır. (2, 5..7, 11) örneğinden anlaşılan ise şudur: listenin 5 elemanı vardır 2,5,6,7,11 String ifadeler içinde aynı kullanım geçerlidir Ör:

("aaa", "aab", "aac","aad") ifadesi şu şekilde de gösterilebilir.

("aaa".."aad").

Benzer şekilde; ("BCY", "BCZ", "BDA", "BDB") ifadesi ("BCY".."BDB"), ile aynıdır. @alphabet = ("a".."z"); ifadesi bir alfabe listesini gösterir.

Örnek program: Program adı lstprg.pl olsun.

#!/usr/local/bin/perl
print ("Baslangic numarasini gir:\n");
$basla = ;
chop ($basla);
print ("Bitis numarasini gir:\n");
$bitis = ;
chop ($bitis);
@liste = ($basla..$bitis);
$say = 0;
print ("Liste yaziliyor:\n");
while ($liste[$say] != 0 || $liste[$say-1] == -1
|| $liste[$say+1] == 1) #burada liste dizisinin sonu ve liste
#elemanı icinde 0 var mı kontrolu yapılıyor
{
print ("$liste[$say]\n");
$say++;
}

Çalısması:

>lstprg.pl

Baslangic numarasini gir:

-2

Bitis numarasini gir:



2

Liste yaziliyor


-2
-1
0
1
2
>

Ornek program : Program adı dizprg2.pl

#!/usr/local/bin/perl
@dizi1 = (14, "ekmek", 1.23, -7, "su");
@dizi2 = @dizi1;
$say = 1;
while ($say <= 5) {
print("eleman $say: $array1[$say-1] ");
print("$dizi2[$say-1]\n");
$say++;
}

Çalışması :

>dizprg2.pl
eleman 1: 14 14
eleman 2: ekmek ekmek
eleman 3: 1.23 1.23
eleman 4: -7 -7
eleman 5: su su
>

Aşağıdaki kullanım şeklini inceleyelim. Ör :

@liste1 = (2, 3, 4);
@liste2 = (1, @liste1, 5);

Sonuçta @liste2 dizisinin içeriği (içerdiği liste) şu şekildedir.

(1,2,3,4,5)

Örnek program : Program adı dizprg3.pl

#!/usr/local/bin/perl
@al = " asla ";
@yaz = ("Ben", @al, "kaybetmem!\n");
print @yaz;

Çalışması :

>dizprg3.pl
Ben asla kaybetmem!
>

Aşağıdaki parantez kullanımını inceleyiniz

$ali = "Ali";
print (("Hey, " . $ali . "!\n") x 2);

Bu kodlama sonucu çıktı şöyle olur;

Hey, Ali!
Hey, Ali!

Dizilerde yerine koyma:

Şu örneğe bakalım.

@a = (1, 2, 3);
print (@a, "\n");

Çıktı


> 123

Burada bir problem var gibi... Bir de şuna bakın,

@a = (1, 2, 3);
print ("@a\n");

Çıktı


> 1 2 3

Böyle olacaktı..farkı belirleyen kodlamayı inceleyin



LİSTENiN UZUNLUĞUNU ELDE ETME:

@a = (1, 2, 3);


$skalar = @a;

Bu kodlama şekliyle biz @a dizisinin(oluşturan listenin) uzunluğunu elde ederiz. $skalar içindeki bu değer 3 tür.

$skalar = @a;
($skalar) = @a;

yukarıdaki satırlar farklıdır. 1.satırda $skalar,@a dizisinin uzunluğunu tutar. 2.satırda $skalar,@a dizisinin ilk elemanını tutar.

Dizilerle çalışmayı iyice anlamak için aşağıdaki programların kodlanışlarını iyi inceleyiniz.

Örnek program : Program adı dizprg4.pl

#!/usr/local/bin/perl
@dizi = (14, "Peynir", 1.23, -7, "elma");
$sayi = 1;
while ( $sayi <= @dizi) {
print("eleman $sayi: @dizi[ $sayi-1]\n");
$sayi++;
}

Çalışması:

>dizprg4.pl
eleman 1: 14
eleman 2: Peynir
eleman 3: 1.23
eleman 4: -7
eleman 5: elma
>

Alt dizilerin kullanımı:

Örnek program : Program adı dizprg5.pl

#!/usr/local/bin/perl
@dizi = (1, 2, 3, 4);
@altdizi = @dizi[1,2];
# dizinin 2 ve 3 .elemanından alt dizi olustu.
# hatırlayınız...dizinin 1.elemanı indisi $dizi[0] dır.
print ("Altdizinin 1.elemanı: $altdizi[0]\n");
print ("Altdizinin 1.elemanı: $altdizi[1]\n");

Çalışması:

>dizprg5.pl
Altdizinin 1.elemanı: 2
Altdizinin 2.elemanı: 3
>

Örnek program : Program adı dizprg6.pl

#!/usr/local/bin/perl
@dizi = ("bir", "iki", "üç", "dört", "beş");
@sira = (1, 2, 3);
@altdizi = @dizi[@sira];
print ("Dizi dilimi: @altdizi\n");

Çalışması :

>dizprg6.pl
Dizi dilimi: iki üç dört
>

DİZİ dilimlerine ATAMA:

@a [0,1] = ("string", 46);

bu örnekte @a dizisinin ilk 2 elemanı değeri string ve 46 olur. Ör : aşağıdaki satır sonucu

@a [0..2] = ("string1", "string2");

3.eleman null stringtir.

Ör : Aşağıda ise listenin 4.elemanı diziye atanamaz(dikkate alınmaz).

@a [0..2] = (1, 2, 3, 4);

Örnek program : program adı dizprg7.pl

Çalışması:

>dizprg7.pl


a1 b2 b3 a4
>

Örnek program: Program adı dizsort.pl

#Okunan değerleri sıraladıktan sonra basan örnek
#!/usr/local/bin/perl
#giriş işlemi
print ("Değerleri giriniz\n");
print ("çıkış için boş satır giriniz.\n");
$say = 1;
$gir = ;
chop ($gir);
while ($gir ne "") {
@a [$say -1] = $gir;
$say++;
$gir = ;
chop ($gir);
}
# sıralama işlemi
$say = 1;
while ($say < @a) {
$x = 1;
while ($x < @a) {
if ($a [$x - 1] gt $a [$x]) {
@a [$x-1,$x] = @a [$x,$x-1];
}
$x++;
}
$say++;
}
#basma işlemi
print ("@a\n");

Çalışması:

>dizsort.pl
Değerleri giriniz
çıkış için boş satır giriniz.
fok
bebek
dil
bal
bal bebek dil fok
>

Standart giriş (klavye ) den dizi okuma: giriş dizi değişkenine yapılır. Ör:

@a = ;

Örnek program : program adı dizkey.pl

#!/usr/local/bin/perl
@a = ;
print (@a);

Çalışması:

>dizkey.pl
1.satır
2.satır
son satır.
^D (control ve D tuşu)
1.satır
2.satır
son satır.
>

DİZİ KÜTÜPHANE FONKSİYONLARI:

Dizilerde sıralama:

Bu işlem için kullanılan fonksiyon sort() dur.

liste = sort (array);

@array = ("Bu", "bir", "test", "dir");

dizi bu şekilde oluştu. Şimdi sort ile sıralayalım;

@array2 = sort (@array);

sonuçta @array2 dizisi içeriği listesi şu şekildedir.

("bir", "bu", "dir", "test")

@array dizisi içeriği ise değişmez...aynıdır.("Bu", "bir", "test", "dir")

veriler alfabetik değilse;

@a = (70, 100, 8);
@a = sort (@a);

o zaman sıralama şöyle gerçekleşir.

(100, 70, 8)

Dizi değişken veya listeleri ters sıraya sokma: Bu işlemi reverse() fonksiyonu yapar.Örnek:

@a = ("bal", "incir", "arı", "sinek");
@a2 = reverse(@a);

@a2 içeriği listesi şu şekildedir:

("sinek", "arı", "incir", "bal")

Örnek program: program adı tersdiz.pl

#program klavyeden girilen bilgileri ters olarak
# (alfabetik olarakbuyukten kucuğe) sıralar
#!/usr/local/bin/perl
@input = ;;
@input = reverse (sort (@input));
print (@input);

Çalışması :

>tersdiz.pl
fal
bal
dil
bez
^D
fal
dil
bez
bal

>

DİZİLERDE chop() FONKSİYONU:

chop() fonk.nun son karakteri sildiğini biliyoruz. Ör :

$a = "Ala";


chop ($a);

$var içeriği şu anda "Al" dır.

Dizi listelerinde kullanımı:

@list = ("Aslan", "12345", "Geyik");


chop (@list);

Şu an @list içeriği liste şu şekildedir: ("Asla", "1234", "Geyi") Başka bir örnek:

@a = ;
chop (@a);

Bu şekilde klavyeden kullanımda yeni satır karakteri yok edilerek diziye alınır.



STRİNG LİSTESİNDEN TEK STRİNG OLUŞTURMA:

Bu görevi join() fonksiyonu yerine getirir. Ör:

$string = join(" ", "bu", "bir", "liste", "dir");

$string içeriği şudur: "bu bir liste dir" join da ilk " " kısmı stringler arasında kullanılacak karakteri bildirir. Yukarda ki örnekte bu karakter boş stringtir. Aşağıdaki örneğe bakınca daha iyi anlayacaksınız.

$string = join("::", "kelime", "ve", "sütun");

sonuçta oluşan $string stringinin içeriği

şöyle görünür : "kelime::ve::sütun"

Bir başka örnek:

@liste = ("Bu", "bir");
$string = join(" ", @list, "stringdir");

$string içeriği : "Bu bir stringdir" olur.

Örnek Program: program adı joprg.pl

#!/usr/local/bin/perl


@gir = ;
chop (@gir);
$string = join(" ", @gir);
print ("$string\n");

Çalışması:

>joprg.pl
Ben
perl
öğrenmeye
basladım.
^D
Ben perl öğrenmeye basladım.

>

STRİNGLERİ AYIRMA:

split()fonksiyonu: join tersi işlev görür. stringler arası karakter iki adet / karakteri arasında belirtilir.

$string = "bu::bir::ayırma::örneği";


@dizi = split(/::/, $string);

sonuc olarak @dizi içeriği şu şekildedir:

bu","bir","ayırma","örneği")

bununla ilgili bir kelime sayma programını inceleyelim

program adı kesay.pl olsun

#!/usr/local/bin/perl


$kelimesay = 0;
$gir = ;
while ($gir ne "") {
chop ($gir);
@dizi = split(/ /, $gir);
$kelimesay += @dizi;
$gir = ;
}
print ("Toplam kelime sayısı: $kelimesay \n");

Çalışması:

>kesay.pl
bu ilk satır
bu da ikincisi
son satır da bu olsun.
^D
Toplam kelime sayısı: 11
>

Şimdi de son öğrendiklerimizi içeren bir örnek : Klavyeden girilen kelimeleri ters sırada yerleştirip yazalım. Program adı fnk.pl

#!/usr/local/bin/perl
# Klavyeden girişini yap
@giris = ;
chop (@giris);
# Her bir satırdaki kelimeleri ters sırada yerleştir
$satir = 1;
while ($satir <= @giris) {
@kelime = split(/ /, $giris[$satir -1]);
@kelime = reverse(@kelime);
$giris[$satir -1] = join(" ", @kelime, "\n");
$satir ++;
}
#şimdi onların sırasını ters cevir ve yazdır
@giris = reverse(@giris);
print (@giris);

>fnk.pl
bir iki


üç dört
beş altı.
^D
altı. beş
dört üç
iki bir
>
BİLEŞİK DİZİLER

Giriş

Bu diziler normal dizilerde,dizi elemanlarının bilinememesi ihtiyacını karşılamak amacıyla tanımlanmışlardır.

Örneğin : @dizi dizisinin 1.elemanı $dizi[1] dir ve içeriğini bilmek ise zordur. Oysa ki bileşik dizilerde elemanda bulunan değerin kendisi indistir. $dizi[1] içeriği muz değerini taşıyor olabilir ve bu değeri dışardan anlamak zordur. Bileşik dizide ise $dizi{"muz"} gösterimi vardır. Yani değer indistir. Bu da bir çok kolaylığı beraberinde sunar.

Öncelikle bileşik dizilerin tanımından başlayalım. Normal dizi tanımında dizi değişkeni adının başında @ karakteri vardı(@meyvalar ...gibi). Bileşik dizi değişkeninin başındaki karakter ise % karakteridir. Bir meyvalar isimli bileşik dizi tanımlayacak olursak, %meyvalar şeklinde kodlarız. Bir diğer fark ise normal dizilerde indis [] karakterleri içinde ifade edilirken bileşik dizilerde { } karakterleri içinde gösterilir. İndiste kullanılacak değerler skalar değer ve değişken adları olabilir.

$personel_sicil{14159}
$meyva{"kara_yemis"}
$reel{3.14159}
$tamsayi{-7}
$meyva{$meyva_adi}

yukarıdaki örneklerin hepsi geçerlidir ve bizlere büyük bir kullanım kolaylığı sağlar.



BİLEŞİK DİZİLERE ELEMAN ATAMA VE EKLEME

Atama şekli normalde aşağıdaki gibidir.

$meyva{"elma"} = 1;

burada %meyva bileşik dizisinin elma elemanına 1 değeri atanıyor.

Örnek Program : Ekrandan meyva adı ve numarası girelim(nar mutlaka olsun). Enter basınca nar adlı meyvanın numarasını bassın. Adı ass1.pl

#!/usr/bin/perl


$girilen = ;
$girilen =~ s/^\s+|\s+\n$//g;
%meyva = split(/\s+/, $girilen);
print ("Nar numarası: $meyva{\"nar\"}\n");

Çalışması:

>ass1.pl
elma 1 armut 2 nar 3 ayva 4
Nar numarası: 3
>

Bir başka örnek program : Bu program da ekrandan girilen satırlarda bulunan büyük harfle başlayan kelimeler ve adetleri bulunur ve basılır. Program adı : ass2.pl

#!/usr/local/bin/perl
while ($girilensatır = ) {
while ($girilensatır =~ /\b[A-Z]\S+/g) {
$kelime = $&;
$kelime =~ s/[;.,:-]$//; # noktalamalar siliniyor.
$kelimelistesi{$kelime} += 1;
}
}
print ("Buyuk harfli kelimeler ve sayıları:\n");
foreach $buyukharfli (keys(%kelimelistesi)) {
print ("$buyukharfli: $kelimelistesi{$buyukharfli}\n");
}

Çalışması :

>ass2.pl
Bu bir Giris satırıdır.
Bu satırlarda Buyuk harfler vardır.
^D
Buyuk harfli kelimeler ve sayıları:
Bu: 2
Giris: 1
Buyuk: 1

>

BİLEŞİK DİZİLERİ OLUŞTURMA

Bu diziler tek bir atama ile oluşturulabilir ve daha sonra eleman ilavesi yapılabilir.

%meyvalar = ("elmalar", 17, "narlar", 9, "incirler", "yok");

[ veya perl5 e ait bir atama özelliği olarak

%meyvalar = ("elmalar" => 17, "narlar" => 9,


"incirler" => "yok"); ]

komutuyla oluşturulan bileşik dizinin index elemanları ve onların değerleri

elmalar, 17,
narlar, 9,
incirler,yok

şeklindedir

%meyvalar dizisine daha sonra elemanı eklemek istersek, mesela, $meyvalar{"kiraz"} = 5; kodunu gireriz.Bu kodlama ile meyvalar isimli bileşik diziye, yeni bir eleman (indexi kiraz ve buradaki değer olarak ta 5) atanmış olur. Normal dizilerden de bileşik dizi oluşturabiliriz. Örneğin,

@meyvalar = ("elmalar", 6, "kirazlar", 8, "muzlar", 11);


%meyvalar = @meyvalar;

satırları incelendiğinde bu işlemin nasıl gerçekleştiği anlaşılacaktır. Benzer mantıkla bileşik diziden de bileşik dizi oluşturulabilir.

%meyvalar2 = %meyvalar1;

ve pek kullanışlı olmamakla birlikte(dizi elemanlarının sırası belirlenmediğinden), bileşik diziden de normal dizi oluşturulabilir.

%meyvalar = ("elmalar", 6, "kirazlar", 8, "muzlar", 11);
@meyvalar = %meyvalar;

hatta aynı anda diziler ve skalar değişkenlere birlikte de atama yapılabilir.($degisken1, $degisken2, %bilesikdizi) = @dizi; ...gibi.. yukarda @dizi nin 1.elemanı $degisken1, 2. elemanı ise $degisken2,ye atanır. Sonraki elemanlar ise %bilesikdizi ye atanırlar.

Örnek Program : Program girilen satırı split fonksiyonu ile bölerek bileşik dizi oluşturur. Program Adı:ass3.pl

#!/usr/local/bin/perl


$girilensatir = ; #satır girişi:

(meyva adı ve değeri şeklinde)


$girilensatir =~ s/^\s+|\s+\n$//g; #baştaki ve sondaki boşluklar ayıklanır
%meyva = split(/\s+/, $girilensatir); #satır kelimelere bölünüp,diziye
#elemanlar olarak atanır
print ("Muz sayısı: $meyva{\"Muz\"}\n");

Çalışması :

>ass3.pl
Nar 5 Elma 7 Muz 11 Kiraz 6
Muz sayısı: 11
>

Diziye eleman eklemeyi görmüştük.Bu dizilerden eleman silmek için TEK YOL hazır fonksiyon olan delete kullanımıdır.(Bazı fonksiyonlar çeşitli silme işlemleri yaparlar ama bazı durumlarda karışıklığa yol açılabilir) Ör:

delete($meyva{"Muz"});

satırı ile %meyva bileşik dizisinden Muz elemanı(indexi) silinir.



DİZİ İNDEXLERİNİ VE DEĞERLERİNİ LİSTELEME

Bileşik dizilerin indexlerini keys fonksiyonu elde eder.

%meyva = ("nar", 9,
"muz", 23,
"ayva", 11);
@meyvaindex = keys(%meyva);

Yukardaki şekilde kodlanan satırların sonucu olarak,keys hazır fonksiyonu,%meyva bileşik dizisinin indexleri olan nar,muz ve ayva yı @meyvaindex dizisine atar. Bu atamayı alfabetik sırada yapmak istersek sort fonksiyonunu da eklememiz gerekir Ör:

@meyvaindex = sort keys(%meyva);

Bileşik dizilerin indexlerini keys fonksiyonu elde eder demiştik değerlerini ise values hazır fonksiyonuyla elde ederiz.

%meyva = ("nar", 9,
"muz", 23,
"ayva", 11);
@meyvaindex = values(%meyva);

@meyvaindex dizisinin elemanları; (9, 23, 11) dir.

Bir Bileşik dizinin elemanlarına döngü şeklinde erişim (tüm elemanlarına sırayla erişim). Bu işlem için daha önce gördüğümüz keys ve foreach kullanılabileceği gibi, each hazır fonksiyonuda kullanılabilir. Örnek:

%kayit = ("Mavis", 16, "Arif", 27, "Dinc", 51);


foreach $tut (keys(%kayit)) {

.

.



.

# sonraki satırlar

}

Arif, Mavis, ve Dinc ,$tut değişkenine atanırlar.



Bu yöntemle indexlere erişildi ama değerlere erişemedik. Değerlere erişim için de yine aynı mantıkla yeni bir foreach döngüsü kullanmamız gerekir. Ama perl bu kullanımın yerine işimizi çok daha kolaylaştıracak olan each fonksiyonuna sahiptir. Bu fonksiyonla hem index hem değeri elde etmek mümkündür. Ör:

%kayitlar = ("Mavis", 16, "Arif", 27, "Dinc", 51);


while (($tut, $kayit) = each(%kayitlar)) {
# satırların devamı
}

yukarda ilk satırda index ve değerler den oluşan bileşik dizi elemanları,diziyi oluştururlarken while döngüsünün her dönüşünde bu diziye ait index ve değer çifti skalar değişkenlere atanır. $tut, indexi, $kayit ise değeri alır. (ilk dönüşte bunların değerleri Mavis ve 16 dır. Sonraki dönüşlerde aynı kurala göre işler).


DOSYA İŞLEMLERİ

Dosya Açma:

Biçimi :


open (dosyadeğişkeni, dosyaadı);

dosyadeğişkeni : Dosyanın basvuracağı, kullanmak istediğiniz isim.Herhangi bir harf,rakam ve _ karakterlerinden oluşur. İlk karakter harf olmalıdır.Aşağıdakiler geçerli adlardır.

MY_NAME
NAME2
A_REALLY_LONG_FILE_VARIABLE_NAME

Aşağıdakiler ise geçerli değildir.

1NAME
A.FILE.NAME
_ANOTHERNAME
if

dosyaadı : Açılacak dosyanın makine içindeki yeri ve adı Örnek:

open(FILE1, "file1");

burada işlem yapılacak dosya file1 dir. Ona başvuruyu temsil eden isim ise FILE1 dir. Perl file1' açacağını anlar ve onu FILE1 ile birleştirir. programda FILE1 adı kullanıldığında file1' i temsil eder. Eğer değişik bir dizindeki file kullanılacaksa yolu tam verilmelidir.

open(FILE1, "/home/ertan/rehber.dat");

gibi...


Dosya Açılma biçimleri:

Dosya kullanım amacına göre 3 şekilde açılır.



  1. Okuma amacıyla

  2. Yazma amacıyla

  3. Ekleme Amacıyla

1.Okuma için açma modu : Var olan bir dosya okuma amaçlı açılır.

Ör : open(READFILE, "/home/ertan/rehber.dat");

2.Yazma için açma modu ( > ) : Mevcut olmayan,ilk defa oluşturulacak dosyalar bu mod ile açılır. Eğer mevcut bir dosya bu modda açılırsa içeriği tamamen silinir ve yeniden oluşur.

open (OUTFILE, ">/home/ertan/rehber.dat");

3.Ekleme için açma modu ( >> ) : Var olan bir dosya yazma(var olan kayıtlara ekleme) amacıyla açılır.

open (APPENDFILE, ">>/home/ertan/rehber.dat");

Önemli Notlar:


  1. Bu modlardan default olanı okuma modudur.

  2. Bir dosya yazma modunda açılırsa içeriği tamamen silinir.

  3. Aynı anda aynı dosyaya hem okuma hemde yazma işlemi yapamazsınız.

  4. Ekleme moduyla açtığınızda sadece ekleme yapabilir ama o dosyadan o anda okuma yapamazsınız.

  5. Eğer standart giriş (klavyeden dosyayayazılma) kullanılacaksa(;) ; için açma (open) işlemi yapılmaz.

Dosya Açma işleminin doğruluk kontrolü:

Bu işlem için if, unless gibi deyim ve fonk.lar kullanılırak kontrol yapılır. Eğer hata varsa dönen değer 0 dır.Hata yoksa 0 olmayan eğer döner. Dosya test operatörlerini daha sonra işleyeceğiz. Örnek :

if (open(DOSYAM, "/home/ertan/dosya")) {
# file başarı ile açıldığında if bloğu içi
# olan bu kısım işlenir
}
# dosya açılmamışsa burası işlenir.

Dosyadan okuma biçimi :

Dosyayı temsil eden ad <> karakterleri içersinde gösterilir.

$kayit = ;

gibi..

Bu komutla DOSYAM ile temsil edilen dosyadan bir kayıt(satır) okunur ve $kayit skalar değişkenine atanır.



ÖRNEK PROGRAM :Dosyadan kayıt okuyup ekrana basan program Adı dosya1.pl olsun.Kullanacağımız dosyanın adı bilgi.dat ve içeriğinin de, Bu ilk kayıttır. İkinci kayıt. Dosyadaki son kayıt. şeklinde olduğunu varsayalım.

#!/usr/local/bin/perl


if (open(DOSYAM, "bilgi.dat")) {
$kayit = ;
while ($kayit ne "") {
print ($kayit);
$kayit =;
}
}

Çalışması :

>dosya1.pl
Bu ilk kayıttır.
İkinci kayıt.
Dosyadaki son kayıt.
>

die() FONKSİYONU ile PROGRAM SONLANDIRMA İŞLEMİ:

Herhangi bir durumda programdan çıkış işlemi yapılacaksa die() fonksiyonunu kullanabiliriz. Bu fonksiyonun yazım formatı: die (mesaj); şeklindedir. Ör:

die ("Program işleyişi durdu!\n");

komutu kullanılmışsa program aşağıdaki mesajla kesilir.

Program işleyişi durdu!

Şimdi Örnek bir programda bunu kullanalım program adı dosya2.pl programda yine bilgi.dat dosyası ile işlem yapalım...

#!/usr/local/bin/perl
unless (open(DOSYAM, "bilgi.dat")) {
die ("bilgi.dat dosyası açılamadı!!!\n");
}
# yukardaki unless bloğu yerine şu şekilde de kodlama yapabilirdik.
#
#open (DOSYAM, "bilgi.dat") || die ("bilgi.dat dosyası açılamadı!!!");
#
#
# Program akışı bu satıra geldiyse dosya açıldı demektir
$kayit = ;
while ($kayit ne "") {
print ($kayit);
$kayit = ;
}

Çalışması:

>dosya2.pl
Bu ilk kayıttır.
İkinci kayıt.
Dosyadaki son kayıt.
>

Eğer bilgi.dat dosyası yok veya bozuk olsaydı o zaman die ile başlayan satırları içeren blok devreye girer ve programın işleyişi,bilgi.dat dosyası açılamadı!!! mesajı ile kesilirdi.

programda unless () fonksiyonu kullanıldığını da gördünüz. Ne işe yaradığını programı dikkatle incelerseniz anlayacaksınız.die fonksiyonu ile hangi satırda hata verdiğini de yazdırabiliriz. Sondaki \n karakterini kaldırmamız gerekir. Örnekleri inceleyerek kullanım farkı sonuçlarını anlayalım.

die ("Dosya bulunamadı\n");

Çıktısı : Dosya bulunamadı

die ("Dosya bulunamadı");

Çıktısı : Dosya bulunamadı at dosya2 line 14.

dosya2 programın adıdır.(program adı dosya2.pl ise).



DOSYADAN dizilere OKUMA:

Genel formatı: @array = ; şeklindedir. Bunu örnek programda inceleyelim. Dosyanın tamamı bir diziye okunacak ve ekrana basılacaktır. Program adı dosya4.pl olsun ve bilgi.dat kullanılsın.

#!/usr/local/bin/perl
unless (open(DOSYAM, "bilgi.dat")) {
die ("bilgi.dat dosyası açılamadı!!!\n");
}
@okuyandizi = ;
#Bir üst satırda dosyanın tamamı dizi elemanları olarak diziye alınır
#dizi listesi görünümü şu şekildedir
#("Bu ilk kayıttır.\n" ....>burası $okuyandizi[0],yani dizinin ilk elemanı
# "İkinci kayıt.\n" ....>burası $okuyandizi[1],yani dizinin ikinci elemanı
# "Dosyadaki son kayıt.\n") ....>burası $okuyandizi[2],yani dizinin üçüncü elemanı
# aşağıda ise ekrana basılır.
print (@okuyandizi);

Çalışması :

>dosya4.pl
Bu ilk kayıttır.
İkinci kayıt.
Dosyadaki son kayıt.
>

DOSYALARA YAZMA İŞLEMİ :

Dosya yazma amaçlı (yazma ve ekleme) açılır. Sonrada yazdırma komutu uygulanır. Örneğin;

open(DOSYAM, ">bilgi.dat");

ile açılır

print DOSYAM ("Bu ilk kayıttır.\n");

komutuylada satır yazılır. Yukarda ki kodlama sonucu bilgi.dat içeriği şöyledir ;

Bu ilk kayıttır

Bir örnek program yapalım. Program adı dosya5.pl olsun. İki dosya kullanalım veren.dat ve bilgi.dat. veren.dat'tan okutup bilgi.dat'a yazılsın. veren.dat dosyası içeriği şöyle olsun;

Bu ilk kayıttır.
İkinci kayıt.
Dosyadaki son kayıt.

#!/usr/local/bin/perl


unless (open(VEREN, "veren.dat")) {
die ("veren.dat dosyası açılamadı!!!\n");

}
unless (open(DOSYAM, ">bilgi.dat")) {


die ("bilgi.dat dosyası açılamadı!!!\n");
}
$kayit = ; # veren.dat'tan bir satır,$kayit değişkenine aktarılır.
while ($kayit ne "") { # veren.dat kayıtları bitti mi? Bittiyse blok dışına çık.
print DOSYAM ($kayit); # $kayit değişkeninde ki satır bilgi.dat'a yazdırılır.
$kayit = ; # veren.dat'tan bir satır,$kayit değişkenine aktarılır.
}
print("Aktarma işlemi tamamlandı !!!"); # tırnak içindeki mesaj ekrana yazdırılır.

Çalışması:

>dosya5.pl

Aktarma işlemi tamamlandı !!!

veren.dat dosyasının içeriği aynen bilgi.dat dosyasına aktarılır ve sonuçta her iki dosya içeriği de aşağıdaki görünümde olup aynıdır.

Bu ilk kayıttır.


İkinci kayıt.
Dosyadaki son kayıt.

Yüklə 0,83 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin