JavaScript Temelleri

Bölüm 16

Diske Erişim (JScript Özelliği- Sadece Internet Explorer-)

Bölüm 16 Sayfa 3

16.3 - Örnek Uygulama Projesi

16.3.1 - Dosyalama Sisteminin Tasarımı

Bir dosya uygulaması, birbiribirine bağlı birçok işlemden oluşur. Verilerin dosyaya yazılması, verilerin dosyadan okunması, verilerin çeşitli bileşenlere göre aranması, verilerin silinmesi, verilerin düzeltilmesi bir dosyalama işleminin çeşitli aşamalarıdır ve bir dosyalama işleminde, bu aşamaların tümünün bulunması gerekir. Bu detaylı çalışma, ancak önceden iyi planlarak başarıya ulaştırılabilir.

Dosyalama işleminde her aşamanın son derece ayrıntılı olarak düşünülmesi ve bu düşüncelerin programa yansıtılması gerekir. Herşeyden önce, bir veri dosyasının yapısı sadece tekrarlı verileri içermelidir. Bu konu aşağıda incelenmiştir.

16.3.2 - Veri Yapıları

Veri yapıları, daha önce incelemiş olduğumuz nesnelerin yapılarını belirleyen prototype özelliğidir. her nesne yapısı bir nesne ailesini oluşturur ve her nesne ailesinin sonsuz sayıda özelliklerinin değeri farklı olan örnekleri yaratılabilir.

Dosyalanacak verinin yapısının önceden çok iyi ve geleceğe yönelik olarak belirlenmesi gerekir. Dosyaya yazılmış bir veri topluluğunun veri yapısını değiştirmek ileride çok zor olabilir.

Örnek olarak bir malzeme listesi dosyalama programını düşünelim. Her malzeme verisi, belirli ve sabit bir veri yapısı olan bir malzeme sınıfının örnekleri olarak düşünülebilir. Bu durumda, ilk olarak bir Malzeme sınıfı veri yapısının saptanması gerekir. Bu da Malzeme nesne ailesinin prototipinin belirlenmesi anlamına gelmektedir.

Yeni bir nesne sınıfı olan Malzeme nesne sınıfının prototipi, aşağıda belirtildiği gibi, saptanmıştır.

Bu prototipe uyan nesne örneklerine kayıt adı verilir. Her kaydın, nesne sınıfının prototipi ile belirlenmiş özelliklerinin değerleri bulunacaktır. Örneğimizde, her kaydın sayısal bir stokNr alanı, sözel bir malzemeAdı alanı ve son olarak sayısal bir depoNr alanı bulunmaktadır. Javascript programlama dilinde, veri alanlarına atanan değerlerinin tip kontrolu yapılmaz. Bu kontrollerin veri girişleri sırasında programcılar tarafından yapılarak, veri alanlarına uygun olmayan değer atamalarının engellenmesi gerekmektedir.

16.3.3 - Veri Dosyalarının Yapıları

Veri dosyalarının yapılandırılması geniş bir konudur. Bu konu üzerinde, üniversitede dosya organizasyonu adı altında özel bir ders verilmektedir. Bu satırların yazarı da bir zamanlar bu dersi vermiştir. Özet olarak, dosyalama sistemleri,

olarak ikiye ayrılır. Jscript programlama dili şimdilik sadece sözel dosyaları destekleyebilmektedir. İkili dosyalar da iki temel gruba ayrılır. Bunlar

olarak adlandırılırlar. Bunlardan en basit olanı sıralı dosyalardır. Bunların yapısı basit sözel dosyalara benzer. Burada veriler, ardarda sıralanarak (contigious) bir yapıda sıralanır. Dosya göstergesi daima ileriye doğru hareket edebilir ve bir veriye erişim için öncekilerin tümünün olunması gerekir. Yani veriye erişim yavaş gerçekleşir. Gelişigüzel erişimli dosyalar gelişmiş teknolojiili dosyalama sistemleridir. Dosya göztergesi ileri-geri hareket edebilir ve veriye erişim, kullanılan erişim teknlojisine bağlı olarak hızlı olabilir. Özel bir hibrid dosyalama sistemi, birçok modern veri temeli programının kullandığı İndeksli Sıralı Erişimli (Indexed Sequential Access ISAM) dosyaları olarak adlandırılır. Veri temelleri arasında veriye erişim hızı açısından bir yarış vardır ve her program özel dosyalama sistemleri ile bu yarışta iyi bir performans gösterme çabasındadır. ISAM dosyaları, özel programlarla birçok programlama dili için, özel olarak satın alınabilmektedir. Javascript programlama dili için de özel ISAM dosyalama sistemi satın alınabilir, fakat biz burada sadece JScript için özel olan standart olanaklardan yararlanacağız. JScript dosyalama olanakları sunucu gerektirmez. Sunucu gerektiren, fakat çok etkili ve kullanışlı olan bir veri temeli sistemi PHP/MySQL ikilisidir. MySQL bugün için ücretsizdir, fakat SUN Microsystems tarafından satın alınmış olduğundan gelecekte ücretsiz olup olmayacağı belli değildir. Burada geliştireceğimiz JScript dosyalama uygulamaları, doğal olarak profesyonel bir veri temeli gibi profesyonel bir performans vermyecektir. Fakat, hem sıfırdan yaratıldığı için dosyalama sistemi üzerine tam bir bilgi sahibi olacabileceğiz, hem sunucuya gerek kalmayacak, hem de standart olanaklardan yararlanıldığı için ücretsiz kalacağı garanti olan ayrıca, hem yeni bir programlama diline gerek göstermeyecek, hem de kullanıcı arayüzleri (X)HTML işaretleme dilinin rakipsiz görselliğinden yararlanacak uygulamalar geliştirilebilecektir. Performans farkı ise küçük veri temellleri için hissedilmeyecek kadar az olabilir.

Sözel dosyalarda veriler sıralı dosyalarda olduğu gibi kesintisiz olarak ardarda sıralanabilir. Böyle bir dosyada yerleşim,

şeklinde olacaktır. Bu tam kompakt dosyanın boyutu, oluşturulabilecek en küçük boyuttur. Dosyanın boyutu küçük olunca, doğal olarak yüklenmesi de hızlı olacaktır. Bu kuralın hoş olmayan tarafı ise, dosya yapısı ne kadar kompakt ise verilerin okunmasının da aynı ölçüde zor olacağı yani veri okuma programlarının daha zor oluşturulabileceğidir. Bu konuda bir uzlaşmaya (optimizasyona) gerek vardır. Özellikle başlangıç düzeyinde programcılar için daha kolay ve hızlı program geliştirmeye uygun veri dosyası yerleşimlerinin seçilmesinde yarar bulunmaktadır. Bu çalışmada kolaylık için performanstan vazgeçebilir ve tam kompakt dosya yapısının simetriği olan uçtaki tam şişkin bir veri dosya yapılanmasını seçebiliriz. Bu dosyada veri yapısının her bileşeni aşağıda görüldüğü gibi, ayrı bir satıra yerleştirilecektir:

Dosyada veriler, veri yapıları olarak, tekrarlı bir düzen içinde yerleştirilmiştir. Biribiribirini takip eden veri yapılarının birbirlerinden ayrılmaları için özel bir yöntem (örnek olarak bir satır atlama gibi) uygulanmamıştır. Satır başı ya eski veri yapısının yeni bir bileşenini ya da yeni bir veri yapısının ilk bileşenini içermektedir. Eğer ilk yerleşimin (tam kompakt dosya) performansı 100 ise, bu yapılanmanın performansı kesin 0 olacaktır. Daha kötü yerleşimler de olabilir, örnek olarak her yeni veri yapısında da bir satır atlatılabilir, fakat buna gerek olmadığı için en kötü durum bizim çalışacağımız durum olarak kabul edilmiştir. Aradaki bir yerleştirme de performans ne olabilir? Aşağıda görüldüğü gibi, veri yapısının bileşenleri aynı satırda bir ayrım karakteri ile ayrılabilir,

1@Dış Dişli@1
2@İç Dişli@2
...
		

Bu dosyanın performansı alt ve üst sınırların arasında bir performans düzeyinde olacaktır. Verilerin okunması en kolaydan (bizim örneğimizden) daha zor, en zordan (ilk örnek) daha kolay, dosya boyu da ikisi arasında bir değer olacaktır.

16.3.4 - Veri Dosyasının Oluşturulması

JScript dialektinde sadece sözel dosyaların desteklendiği belirtilmişti. Sözel dosyalarla çalışmak, sıralı dosyalarla çalışmakla benzerlik gösterir ve her ikisi ile de çalışmanın benzer güçlükleri vardır. Veri dosyası bu güçlükler düşünülerek organize edilmelidir. Bu konuda fazla ayrıntıya girmeden sadece her kaydı tek satıra ve veri alanları arasına bir virgül (comma) koyarak kaydedeceğiz. Bu tür düzenlenmiş sözel dosyalara virgülle ayrılmış değişkenler (Comma Separated Variables veya CSV) dosyaları adı verilir. CSV dosyaları, MS ACCESS, MS EXCEL, MySQL gibi tüm veri temeli dosyalarına birebir kayıpsız (seamless) dönüştürülebilir. Bu durumda, veri dosyası,

1,Dış Dişli,1
2,İç Dişli,2
...
		

şeklinde olacaktır.

Veri dosyası oluşturmasının ilk adımı, veri dosyasının ilk kayıt ile birlikte yaratılmasıdır. Bu aşama son derece kritiktir ve eğer bir yanlışlık yapılır ve mevcut veri dosyası ile aynı adla bir veri dosyası yaratılmak istenirse, eski dosya silinir ve aynı adla sadece tek başlangıç kaydı yazılı yeni bir veri dosyası açılarak TÜM VERİLER KAYBOLUR. Bu da veri güvenliği sorununu ön plana çıkarır. Bu örnekten de görüldüğü gibi, veriler olabilecek en güncel şekli ile yedeklenmelidir. Ayrıca, yetkisiz kişilerin veri dosyalarını silebilmesi engellenmeli, verilerin güncellenmesi sadece yetkililere bırakılmalı ve veri girişçilerinin yetkileri sadece veri eklenmesi ile sınırlandırılmalıdır. Doğal olarak bu gibi önlemler, veri türüne göre daha değişik olabilir. Fakat, veriler önemli olmasa bile veri güvenliği önlemlerine her zaman gereksinme olacaktır.

Veri dosyası, önceki örneklerde gördüğümüz dosya yaratma programları gibi programlarla ile kolayca yaratılabilir. Bu veri temeli için bir ana kontrol paneli tasarımı yapılıp burada yeni bir veri dosyası açma seçeneği sağlanabilir. Önemli olan bu seçeneği uygulayabilme yetkisinin veri temeli yöntecisi ile sınırlı olmasıdır. Veri dosyasının yaratılmasından sonra, normal olarak artık hiç silinmesi ve yenilenmesi gerekmez. Bu dosyanın sürekli yedeği alınarak her türlü bilgisayar çökmelerinde verilerin kaybı önlenmeye çalışılır. Veri dosyası ve yaratılması, bir tek kez yapılacak çok kritik bir işlem olmasından dolayı, dosyayı yaratan program sadece veri temeli yöneticisinde olmalı ve bir tek kez uygulandıktan sonra kişisel erişime kapatılmalı veya en doğrusu bir flash bellek te gizli bir köşe de saklanmalıdır. İlk veri dosyasını yaratarak, ilk satıra ilk kaydı yazacak program, yeniVeriSistemi.htm olarak kaydedilmiştir.

Veri dosyasının yaratılmasından sonra, veri girişçilerinin kullanacağı programlara erişim için bir Ana Kontrol Paneli tasarlanmıştır. Bu program, anapanel.htm olarak kaydedilmiştir. Bu program, aşağıda görüldüğü gibi, basit bir dağıtım merkezinden ibarettir.

Malzeme Listesi
Ana Panel
Yeni Veri Eklenmesi Verilerin Listelenmesi

Bu sayfanın XHTML kodları incelendiğinde, bu sayfanın veri girişçilerinin gereksinme duydukları programları Ana Panelden çağırabildikleri ve çağırdıkları programla çalışmaları tamamlandığında, yeniden Ana Panele dönüp, yeni bir işleme başlayabilecekleri bir bağlantı merkezi şeklinde çalıştığı görülecektir. Bu sayfanın kendine özgü bir JavaScript programı bulunmamaktadır.

16.3.5 - Dosyaya Yeni Verilerin Eklenmesi

Dosyaya yeni verilerin eklenmesi, son derece kolay olacaktır. Veri eklenmesi için, dosya append modunda açılırsa, yeni veriler, dosyanın sonuna eklenir. Her defasında bir satıra tek bir kayıt (malzeme nesne sınıfının yeni bir örneği) yazılıp dosyanın kapatılması en güvenli bir çalışma sistemi olacaktır.

Dosyaya yeni veri eklenmesi süreci, verilerin girilmesi, verilerin hazırlanması, dosyanın ekleme için açılması, verilerin eklenmesi, dosyanın kapatılması aşamalarından oluşmaktadır.

Buradaki asıl sorun, verilerin en kolay şekilde okunabilmesi için, nasıl biçimleneceğidir. Bilindiği gibi veriler birer nesne örneği olarak düzenlenmiştir. Sözel dosyalar ise, verilerin nesne örnekleri olarak kaydedilmelerine olanak vermemektedir. Bu dosyalara kayıt yapılabilmesi için, verilerin karakter dizgisi tipinde sözel veriler olması gerekmektedir. Verilerin kolay okunabilmesi ve gereğinde başka dosya tiplerine dönüştürülebilmesi için, CSV tipinde kayıtlar olmasını öngörmüştük. Burada uygulanabilecek yöntem, nesne örneğinin alanlarını karakter dizgisi tipine dönüştürüp araya virgüller ekleyerek tek bir karakter dizgisi verisi olarak toplamak (string concatenation) ve bu tek karakter dizigisi veriyi, tek bir dosya satırına yazmaktır. Veriler, metin kutularına girilecek tip kontrolleri ve bir temizleme işlemi ile gerçek verilere dönüştürülecek, alanların arasına virgüller eklenerek tek bir karakter nesnesi verisi olarak toplanacak ve dosyaya tek satır halinde yazıldıktan sonra dosya kapatılacaktır.

(X)HTML veri giriş formlarında en büyük sorun, global veya gizli global değişkenler kullanılmadan veri giriş düğmesinin birden fazla tıklanması ile aynı verinin birden fazla veri dosyasına kaydedilmesinin engellenmesidir. Bu sorun şık bir şekilde b15.6-uyg-1-js.htm programında çözülmüş ve çözüm yöntemi, b15s7.htm de geniş olarak tartışılmıştır. Burada veri giriş formunun birden fazla kayıt yapmasının engellenmesi için, yine aynı yöntemden yararlanılacaktır.

Malzeme Takip projesi giriş çıkış fonksiyonlarının bir kısmı için, kodları bdelib-src.htm sayfasında görülebilen, bdelib.js fonksiyon kitaplığından (framework) yararlanmaktadır. Projenin ana fonksiyon kitaplığı, Malzeme sınıfının veri yapısını (yapılandırıcı fonksiyonunu) ve modüller arası ortak kullanılan fonksiyonları içermektedir. Bu fonksiyonların içeriği, malzeme-js.htm sayfasından izlenebilir. Ana fonksiyon kitaplığı malzeme.js dosyasının içeriği aşağıda da verilmiştir.

malzeme.js
(Malzeme Veri Temeli Sisteminin Ana Fonksiyon Kitaplığı)

/* <![CDATA[  */  

function Malzeme (nr, ad, yer){
this.stokNum = nr || 'veriYok';
this.malzemeAdı = ad || 'veriYok';
this.depoNum = yer || 'veriYok';
}

function nesneYap (veri) {
var a = null, b = null, c = null ; 
var bileşen =[];

for(var i = 0; i = veri.length; i++ ) {
bileşen = veri[i].split(',');
x[i] =  new Malzeme(bileşen[0], bileşen[1], bileşen[2]);
}
return x;
}


/* ]]> */
		

Bu projenin, malzeme.txt adlı ana kayıt dosyasına veri eklenmesini sağlayan program, veriKaydet.htm sayfasına ilişkilendirilmiştir. Bu sayfa web temelli bir kayıt formu işlevini yapmaktadır. Bu sayfanın XHTML kodları, veriKaydet-src.htm sayfasında görülebilir. Bu sayfa ile ilişkili olan veriKaydet.js dış JavaScript program sayfasında bulunan JavaScript programının kodları, veriKaydet-js.htm sayfasında görülebilir. Bu programın yazılımı aynı zamanda aşağıda da görülebilir:

veriKayıt.js
(Malzeme Veri Temeli Sisteminin Veri Giriş Fonksiyon Kitaplığı)

/* <![CDATA[  */  

function VeriGir(stokNr) {

var _gizli = true;
this.stokNum = stokNr;
this.sınırlama = function() {
if (_gizli) {
kaydaGir();
}
_gizli = false;
}


function stokNumarasıBul() {

var varsayılan = -2, Unicode = true, ASCII = false;
var saltOkunur = 1, okunurYazılır =2, ekleme = 8;
var saltEskiDosya = false, dosyaYoksaYarat = true;
var dosyaSistemNesnesi = new ActiveXObject('Scripting.FileSystemObject');
var dosyaYeri ='f:/sites/opus/veriler/malzeme.txt';
var dosya = dosyaSistemNesnesi.OpenTextFile(dosyaYeri, saltOkunur, saltEskiDosya, unicode);
var stokNr = 1;
if (dosya) {
while(! dosya.AtEndOfStream) {
bilgi[i] = dosya.ReadLine() ;
stokNr++
}

dosya.Close();
}

return stokNr;
}function veriYap(yeniVeri) {
	var veri = String(yeniVeri.stokNum) + ',' + yeniVeri.malzemeAdı + ',' + String(yeniVeri.depoNum);
	return veri;
	}


function kaydet(yeniSatır) {

var varsayılan = -2, Unicode = true,ASCII = false;
var saltOkunur = 1, okunurYazılır =2, ekleme = 8;
var dosyaSistemNesnesi = new ActiveXObject('Scripting.FileSystemObject');
var dosyaYeri = document.getElementById('dosyaYeri').value;
var saltEskiDosya = false, dosyaYoksaYarat = true;
var dosya = dosyaSistemNesnesi.OpenTextFile(dosyaYeri, ekleme, saltEskiDosya, Unicode);
		
if (dosya) {
dosya.WriteLine(yeniMalzeme);
dosya.Close();
bilgiYaz(yeniMalzeme + 'bilgisi Malzeme.txt Dosyasına Eklendi', 'yazmaKontrol');
bilgiYaz('Verileri Kaydedildi Yeni Veri Girişi İçin Yeni Bir Giriş Formu Sayfası Açınız !', 'yazmaMesaj');

}

}


function kaydaGir(stokNr) {
var b = oku('malzemeAdı');
var c = oku('depoNr');
var bilgi = null;
if (isFinite (verileriGir.stokNr) && isFinite(c) {
yeniMalzeme = new Malzeme(stokNr, b, c);
bilgi =veriYap(yeniMalzeme);
kaydet(bilgi );
}
}

function başlat() {
var sözelDizi = null, stokNr = null, düğme = null, tıklama= null;

stokNr = stokNumarasıBul();
tıklama = new VeriGir(stokNr);

yaz('stokNr', 'stokNr');
yaz('malzemeAdı', '');
yaz('depoNr', '');

çalıştır('gir', tıklama.sınırlama);
}

sayfaYüklendiktenSonraÇalıştır(başlat);

/* ]]> */
		

 

16.3.6 - Verilerin Listelenmesi

Verilerin Listelenmesi süreci, dosyanın açılması, tüm verilerin okunması, dosyanın kapanması, verilerin kod çözümü ve listelenmesi aşamalarını kapsayacaktır. Programın dosyadan veri okunmasını öngören kısmının program tasarım ön kodları (pseudocode), aşağıdaki gibi olacaktır. Pseudo antik grekçe sahte, gerçek olmayan, göstermelik anlamına gelmektedir. Programcılıkta pseudokod, her programlama diline uygulabilecek kod sistematiği anlamında kullanılmaktadır. Pseudokod, akım şemasının yazı ile ifade edilmesi gibi de düşünülebilir.

şeklinde olacaktır. Bu kodların ilk aşaması tum dosya bilgilerinin, her satırının bir bilgi dizisinin elemanları olarak atanmasıdır. Dosya okunduktan sonra derhal kapatılmalıdır. Bundan sonra verilerin üretimi bu bilgi dizisinden yararlanılarak yapılacak ve bu dizi, görevi tamamlanınca program belleğinden silinerek sistem kaynaklarının gereksiz yere kullanılması engellenecektir. sözelDizi Dizisinin elemanları şu şekilde dizilmişlerdir:

Her satırdaki sözel veriler, öntanımlı String nesnesinin split('ayrım karakteri') metodu ile, bileşenlerine ayrılabilmektedir. Bu konuda, split(',') fonksiyonu CSV dosyalarıın kod çözümü için eşsiz bir araç oluşturmaktadır. Fakat, istendiğinde özel bir başka kod çözücüsü (dekoder) fonksiyonunu yazmak son derece kolay olacaktır. Bileşenlerine ayrılmış olan sözel dizi elemanları, bir nesne dizisi elemanları olarak yeniden birleştirilecektir. Bunun nedeni, nesne verilerinin daha düzenli, dolayısı ile erişimi kolay, listelenmesi kolay olmasıdır. Görevi tamamlanan sözel dizi silinerek program belleğini daha fazla gereksiz olarak kullanması engellenmekte ve nesne dizisi uygun bir tablolama fonksiyonu ile görüntülenmektedir. Tüm bu işlemler, veriListesi.htm sayfası ile gerçekleştirilmektedir. Bu sayfanın XHTML kodları, veriListesi-src.htm sayfasında görülebilir.

VeriListesi.js programı , giriş çıkış fonksiyonlarının bir kısmı için, kodları bdelib-js.htm sayfasında görülebilen, bdelib.js fonksiyon kitaplığından (framework) yararlanmaktadır. Aynı zamanda, projenin ana fonksiyon kitaplığı olan malzeme.js kitaplığından da yararlanmaktdır. VeriListesi.js programınde, sonuçların görüntülenmesi için kullanılan tabloDüzenle() fonksiyonu, modülün kendi program sayfası olan VeriListesi.js program sayfasındadır. Bu program sayfasının içeriği, veriListesi.htm sayfasında görülebilir. Bu fonksiyonun yazılımı aşağıda görülmektedir:

function tabloDüzenle(tabloİsmi,dizi){

var tablo = null, caption = null, tabloBaşlığı = null, başlıkSatırı = null, yeniBaşlık = null,
tabloGövdesi = null, yeniSatır = null, yeniSütun = null;

tablo=getElementById(tabloİsmi);
tablo.border = "1";
tablo.width = "400";
tablo.style.font = "18px verdana";
tablo.style.marginLeft = "200px";
capt=document.createElement("caption");
capt.style.color = "red";
capt.appendChild(document.createTextNode("Tablo Başlığı"));
tablo.appendChild(capt);
tabloGövdesi = document.createElement("tbody");
tablo.appendChild(tabloGövdesi);

yeniSatır=document.createElement("tr");
yeniSatır.style.background="FFCC99";
tabloGövdesi.appendChild(yeniSatır);


yeniBaşlık = document.createElement("th");
yeniBaşlık.appendChild(document.createTextNode("Element"));
yeniSatır.appendChild(yeniBaşlık);

yeniBaşlık = document.createElement("th");
yeniBaşlık.appendChild(document.createTextNode("Element Değeri"));
yeniSatır.appendChild(yeniBaşlık);

for(var i=0; i<dizi.length; ++i){
yeniSatır = document.createElement("tr");
tabloGövdesi.appendChild(yeniSatır);

yeniSütun = document.createElement("td");
yeniSütun.appendChild(document.createTextNode("s[" + i + ]"));
yeniSatır.appendChild(yeniSütun);


yeniSütun = document.createElement("td");
yeniSütun.appendChild(document.createTextNode(dizi[i]));
yeniSatır.appendChild(yeniSütun);

if(dizi[i] === undefined) yeniSütun.style.color = "blue";
}

}
		

Verilerin listelenmesini sağlayan, veriListesi.htm sayfasına ilişkilendirilmiş, veriListesi.js program sayfasının diğer kodları, veriListesi-js.htm sayfasında ve aşağıda görülmektedir:

function verileriOku() {

if (kaydet.ilkKez === true) {
var varsayılan = -2, Unicode = true, ASCII = false;
var saltOkunur = 1, okunurYazılır =2, ekleme = 8;
var saltEskiDosya = false, dosyaYoksaYarat = true;
var dosyaSistemNesnesi = new ActiveXObject('Scripting.FileSystemObject');
var dosyaYeri ='f:/sites/opus/veriler/malzeme.txt';
var dosya = dosyaSistemNesnesi.OpenTextFile(dosyaYeri, saltOkunur, saltEskiDosya, Unicode);
var bilgi =[];
var i = 0;

if (dosya) {
while(! dosya.AtEndOfStream) {
bilgi[i] = dosya.ReadLine() ;
}

dosya.Close();

bilgiYaz('Bilgiler Malzeme.txt Dosyasından Okundu', 'veriKontrol');
bilgiYaz('Verileri Okundu, Yeni Bir İşlem İçin Lütfen Ana Panele Dönünüz !', 'mesaj');
}

return bilgi;
}


function listeYap() {
var sözelDizi = [];
var nesneDizisi = [];

sözelDizi = verileriOku();
nesneDizisi = nesneYap(sözelDizi);
delete(sözelDizi);
tabloKontrol('veriler', nesneDizisi);
}



function Liste() {

var _gizli = true;
this.sınırlama = function() {
if (_gizli) {
listeYap();
}
_gizli = false;
}

function başlat() {

var listeleme = newListe();
çalıştır('oku' , listeleme .sınırlama);
}

sayfaYüklendiktenSonraÇalıştır(başlat);
		

Burda görülen veriListesi.htm Programı, ana kontrol tablosu olan anapanel.htm programının seçenekleri arasına eklenmiştir.

Bu program örneğinde, verilerin silinmesi, verilerin düzeltilmesi , yazıcıdan çıktı alma gibi modüller eksik kalmıştır. Bu modüller de istendiğinde, programa eklenerek, Ana Panel seçenekleri arasına eklenebilecektir.

Bu program, düzgün bir şekilde çalışmakta ve öngörülen işlevi yapmaktadır. Program kodları incelenirken, pseudokod gözönünde bulundulursa, sistematik kolayca algılanabilecektir. özellikle verilerin XHTML kodları kullanımı ile yazdırılabilmesi, ve Türkçe karakterlerin desteklenmesi dikkat çekicidir. Sonuçta, JavaScript ile JScript birlikte kullanıldıklarında, dosyalama özelliği de kazanmış, gelişkin, görsel (visual) ve ücretsiz bir programlama ortamı oluşturulabileceği görülmektedir.

Bu program, sadece dosyalama işleminin çalışma şeklinin incelenmesi amacı ile yapıldığı için , veri yapısı çok kısıtlı tutulmuş ve sayfaların görselliği üzerinde fazla çalışılmamıştır. İstendiğinde daha profesyonel bir stok kontrol programı nın yazılması için veri yapısı genişletilebilir, yeni modüller yazılabilir ve profesyonel bir imaj ekibi tarafından sayfaların görselliği çekici hale getirilebilir. Bu program, JavaScript Javascript programlama dilinin olağanüstü zenginliği, programın arayüzünü sağlayan XHTML işaretleme dilinin sonsuz görsellik olanakları, kodların salt yazarına ait olması, yani dosyalama için ek maliyet sayılan bir dış dosyalama sistemine gerek duyulmaması, uygulanacak bilgisayarlarda özel bir programa gerek duyulmaması, sunucu platformu gerektirmemesi ve herşeyin özgür ve ücretsiz olması ile öne çıkmaktadır. Projenin diğer bir avantajlı tarafı, sunucu gerktirmemesi ve Internet Explorer'in güncel biir sürümüne sahip herhangibir Windows platformu üzerinden çalışabilmesidir. Yani herşey programcı tarafından istenilen makineye yerleştirilebilecek durumdadır ve Web üzerinden birşeylerin indirilmesine gerek bulunmamaktadır. Profesyonel bir ekibin elinde en az onbin kaydın kolayca yönetilebileceği bir orta boy işletmenin personel yönetimi, bordro, muhasabe, demirbaş yönetimi, stok kontrol gibi, tüm gereksinmeleri bu tip programlarla gerçekleştirilebilecektir. Bu gerçeğin dünyada da giderek daha çok farkedildiğini belirtmek de ayrı bir zevk olmaktadır.

Valid XHTML 1.1