1

Konu: Scatter ve Scan ?

programda kullanılan Scatter ve scan mantığını anlatabilirmisiniz? ne işe yarıyor hangi durumda kullanılıyorlar?

2 Son düzenleyen, ugurlu2001 (07.12.2012 19:32:20)

Re: Scatter ve Scan ?

Cornelian;

SCAN / ENDSCAN; açık bir tabloyu yada cursor 'u başından sonuna kadar HIZLI bir şekilde taramanı sağlıyor.İstersen tarama koşulunu FOR tümceciği ile koşllandırabilirsin.  Tablo/Cursor tarama işleminde gerekli hesaplamalarını yada atama işlemlerini yapabilirsin!

Scatter komutu ile birtablo/cursor üzerindeki tüm field ları bir DİZİ yada bir NESNE ye atayabiliyorsun. Bu dizi yada nesneyi istediğin gibi kullanıp, gerek gördüğün takdirde GATHER ile tekrardan tablo/cursor fieldlarını güncelleyebilirsin.

Önemli bir kaç not : 

- SCAN / ENDSCAN komut dizisi; DO WHILE / "SKIP" / ENDDO komut dizisine göre çok daha HIZLI ve efektif çalışır!
- Eğer iç içe SCAN / ENDSCAN kullanıyorsan; 'SELECT' ile iç içe TABLO larda ki ALIAS durumunu kontrol etmelisin

Her iki komut içinde forumda bir çok örnek mevcut. Forum 'un arama başlığında arama yapabilirsin.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3

Re: Scatter ve Scan ?

Uğur merhaba.
Bu durumda her zaman Do while / Enddo komut dizisi yerine scan / endscan kullanılmasını önerirmisin ?
Hangi durumlarda do while/enddo komutu yararlı olur ?
Teşekkürler..

4 Son düzenleyen, KONURALP (09.12.2012 16:33:24)

Re: Scatter ve Scan ?

arama yı

sele table1
go top
do while .not. eof()
     ....
     ....
     sele table1
     skip
enddo

şeklinde de yapabilirsin. Data küçük ise yavaşlık hissetmezsin.

Ama hızlısı :    scan / endscan dir. ( Ben genelde bunu kullanıyorum )

Başka alternatif :
sele table1
set order to adsoyad && adsoyad a göre index gerektirir.
set key to isim1   && filitrelemek istediğin kelime
go top
if not eof()
     * buldun
else
     * yok
endif

şeklinde de arayabilirsin.

Bu biraz kullanacağın yere bağlı

5

Re: Scatter ve Scan ?

Hasan Merhaba;

Ben genel olarak SCAN / ENDSCAN kullanıyorum ve tavsiye ediyorum ( Çetin Üstad 'ın öğretilerinden! ). Büyük bir tabloda; aynı işi gören bir do while / scan endscan kıyaslamasında bariz biçimde gösteren hız farkı görebiliyorsun.

Bazı durumlarda ise do while kullanmak gerekiyor, özellikle iç içe tablo taramalarında kontroller daha basit.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

6

Re: Scatter ve Scan ?

Eğer tablolardan bahsediyorsak:

Scan...endscan

Do while ... enddo nun yaptığı herşeyive fazlasını da sağlıyor.  Daha hızlı. Do while'ın desteklemediği destekleri var:

for ... ve scope

do while ise sadece while. Aynı zamanda do while ile pointer kontrolü sendedir tamamen, scan ise senin yerine skip yapar ya da en başlangıçta başa sarar. Aynı zamanda ilişkilendirildiği cursoru bilir, workarea değiimlerinden etkilenmez. Do while ile kendin daima doğru workarea daolup olmadığını kontrol etmelisin.

Uzun lafın kısası, scan...endscan kullanabildiğin yerde onu kullanmak daha faydalı.

Do while ... enddo tarihsel olarak daha eski, scan ... endscan yenilik olarak geldi.

7

Re: Scatter ve Scan ?

Bu arada orijinal soru pek anlaşılmıyor. Programda durup dururken scan ... endscan ve scatter kullanılmaz. Biraz daha özel soru olsa nedenini açıklayabilirdik.

8

Re: Scatter ve Scan ?

Herhalde clipper ile başladığımdan olsa gerek bugüne kadar % 98 Dowhile / Enddo kullandım.  Büyük datalarda hız düşmesini de yaşadım tabii.. Verdiğiniz bilgilere teşekkür ederim.  Uzun bir data kullanan programımı hemen uyarlıyacağım.