Dat Dosyada record'lar üzerinde Gezinmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
neoerhans
Üye
Mesajlar: 19
Kayıt: 10 Ağu 2003 01:48
Konum: Izmir
İletişim:

Dat Dosyada record'lar üzerinde Gezinmek

Mesaj gönderen neoerhans »

Arkadaşlar bu konuda bana yardımcı olursanız cok sevinirim...
Yapmak istediğim bir dat dosyasına kaydedilen 'Memurun Adı Soyadı', 'ilaç Tutarı', 'Muafiyet' gibi girilen bilgiler var bu bilgilerde 'Ad Soyad' kısmı 30 karakter, 'ilaç Tutarı' 15 karakter, 'Muafiyet' 15 karakter girilmeli ve bu bilgiler bir satırda yan yana bir Dat dosyasına kaydedilmeli ve kayıtlar arasında gezinilerek istenilen kayıt üzerinde değişiklik yapılabilmeli....

Sorunum dat dosyasına nasıl bir algoritma ile kaydetmeliyimki kayıtlar üzerinde gezinerek istenilen kayıt üzerinde değişiklik yapabileyim...

Not : Dat dosyasına bu şekilde kaydedilmesinin nedeni başka bir program tarafında bu dataların kullanılabilmesi içindir...

Yardımcı olmanız dileği ile...
Saygılar....
Bizler birer atoma benziyoruz ve gün geldiğinde bir ülkeyi dahi yok edebilecek güce sahibiz. Ama gücümüz aklımızın esiri! Bu yüzden Sıyırdınız gene :P

http://www.MindoMs.com
DotCom
Kıdemli Üye
Mesajlar: 1696
Kayıt: 11 Tem 2003 10:30
Konum: İzmir
İletişim:

Mesaj gönderen DotCom »

erhancığım ; Nasılsın ? :lol: :lol: :lol:

Dat dosyaları Datapump programı ile convert etmeyi dene. ben daha önce yapmıştım. yalnış hatırlamıyor isem ; trk karakterlerde problem vardı sadece...

Kolay Gelsin...
neoerhans
Üye
Mesajlar: 19
Kayıt: 10 Ağu 2003 01:48
Konum: Izmir
İletişim:

Mesaj gönderen neoerhans »

Kardeş güzel soluyosun hoş soluyosunda daha once ben hiç uğraşmadığım için biraz daha açıklayıcı olursan sevinirim....

Bide Hüsnücüm örnek kod varsa elinde gonderirisen daha iyi olur bi inceleyelim...

Saygılar...
Bizler birer atoma benziyoruz ve gün geldiğinde bir ülkeyi dahi yok edebilecek güce sahibiz. Ama gücümüz aklımızın esiri! Bu yüzden Sıyırdınız gene :P

http://www.MindoMs.com
DotCom
Kıdemli Üye
Mesajlar: 1696
Kayıt: 11 Tem 2003 10:30
Konum: İzmir
İletişim:

Mesaj gönderen DotCom »

kardeş :

Kod luk bişi yok. Delphi 7 yi kurdugunda beraberinde Datapump adında bir program geliyor.

bu programı çalıştır. dat dosyalarının oldugu yeri göster convert edeceğin tipi belirle nereye convert edeceğini belirle.

bu şekilde dönüştürürsün..

bu işlemleri yaptıkdan sonra geç delphiye ve yeni verilerinle çalışmaya başla...

işlem sırası yalnış olabilir. ama daha önce bir ziraat odası programı vardı dos tabanlı ve içerisindeki verileri almak gerekiyordu. o verileri bu şekilde delphinin içerisine aktarmıştım...

Kolay Gelsinnn
DotCom
Kıdemli Üye
Mesajlar: 1696
Kayıt: 11 Tem 2003 10:30
Konum: İzmir
İletişim:

Mesaj gönderen DotCom »

Ayrıca şu link ide incele...

viewtopic.php?t=1483&highlight=datapump

Kolay Gelsin...
neoerhans
Üye
Mesajlar: 19
Kayıt: 10 Ağu 2003 01:48
Konum: Izmir
İletişim:

Mesaj gönderen neoerhans »

Abi yine güzel söleişin hoş solemişin ama,
bu programcık eczanelere verilecek ve eczaneler memurların bilgilerini girdikten sonra bu dat dosyasını bize getirecekler bizim burda başka bir programla o datalar kullanılacak ve memurun ilaç kesintileri yapılacak %20 sini kendisi ödeyecek %80 'inide devlet ödeyecek kısacası bunu ben kullanmıycam son kullanıcı için .....

Umarım anlatabildim... :?:
Bizler birer atoma benziyoruz ve gün geldiğinde bir ülkeyi dahi yok edebilecek güce sahibiz. Ama gücümüz aklımızın esiri! Bu yüzden Sıyırdınız gene :P

http://www.MindoMs.com
DotCom
Kıdemli Üye
Mesajlar: 1696
Kayıt: 11 Tem 2003 10:30
Konum: İzmir
İletişim:

Mesaj gönderen DotCom »

abi tamam işte sana getirdikleri dat dosyasını ; kendi programına aktarcan..

sanırım o aktarma işlemi içinde bir programcık yazılabilir fakat benim aklıma şuanda bişi gelmiyor.

direk dat dosyasını delphiden okuman lazım onu okudukdan sonra programın içinde sen başka bir table a mesela paradox veya interbase e aktarabilirsin ama nasıl yapacağın konusunda herhangi bir fikrim yok. elinde dat dosyalarından var ise yolla bakiyim...

Kolay Gelsin
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.
Anladığım Kadarıyla eski dos mantığıyla bir veri dosyasına ulaşmaya çalışıyorsun
bunun için Record ları kullanabilirsin.

Kod: Tümünü seç

Type
   Memur_Type=record
   Ad Soyad:string[30];
   Tutar:string[15];
   Muafiyet:string[15];
end;
şeklinde bir yapı oluştur.
daha sonra var kısmında dosya değişkenlerini oluşturmalısın

Kod: Tümünü seç

var
  FMemur:file of Memur_Type;
  Memur:Memur_type;
Programda dosya değişkeni ile veri dosyan arasında bağlantı kuracaksın.

Kod: Tümünü seç

Assignfile(Fmemur,'C:\memurlar.dat');
//reset açar rewrite yeniden oluşturur
{$i-}
reset(f);
if ioresult<>0 then rewrite(f);
{$i+}
//$i- ve $i+ try except gibi düşünebilirsin
dosyadan okumak için

Kod: Tümünü seç

readln(fmemur,memur);
//readln kaydı okuyup bir sonraki kaydı seçer
//read sadece kaydı okur
dosyaya yazmak için

Kod: Tümünü seç

writeln(fmemur,memur);
//writeln yazar ve yeni kayıt ekler
//write sadece yazar
//yanlış hatırlamıyorsam birde append olması lazım. Append dosyanın sonuna kayıt ekler
kayıtlar arasında gezinmek için

Kod: Tümünü seç

seek(fmemur,5);
//5 kayıt ileri gider 
//aradığın kaydı bulmak için teker teker kayıtları okuman read ile eğer aradığın kayıt o değilse seek ile bir ileri gitmen böyle bir döngü kurman gerekiyor. döngü için
while fmemur.eof do
//kullanabilirsin.
kolay gelsin.
--------------------------------
geri gitmek için

Kod: Tümünü seç

seek(fmemur,-5)
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
neoerhans
Üye
Mesajlar: 19
Kayıt: 10 Ağu 2003 01:48
Konum: Izmir
İletişim:

Mesaj gönderen neoerhans »

Aslangeri yardımın için teşekkürler ama daha önce Record'ları kullanmıştım Record türkçe karrakter sorunu çıkartıyo.

Ben TextFile kullandığımda türkçe karakter sorunu ortadan kalktı ama bu sefer istediğim olayı yapamadım... Sorunumu anlatabilmişim ama daha farklı bir çözüm TextFile ile nasıl yapabilirim bununla ilgili olarak yardımcı olursan cok sevinirim... hatta örnek olarak aşağıya dat dosyasının oluşturulması gereken şeklini veriyorum....

Kod: Tümünü seç

Erhan Yaşar                   35000000       45000000       Hüsnü Sepetçi                  25000000       15000000       
Gibi bi örnek verebilriz... İsim soyisim toplam 30 karakter ve diğer tutarlar 15 er karakter... Yardımcı olursanız cok sevinirim...

İlginize teşekkürler..
Saygılar...
Bizler birer atoma benziyoruz ve gün geldiğinde bir ülkeyi dahi yok edebilecek güce sahibiz. Ama gücümüz aklımızın esiri! Bu yüzden Sıyırdınız gene :P

http://www.MindoMs.com
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.
Şu makaleyi bi incele
viewtopic.php?t=105&highlight=clientdataset
benim aklıma gelen dosyadan tün kayıtları okuman kendi tablona yazman işin bitince dat dosyasını yeniden oluşturman.
Kolay Gelsin
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
mbt
Üye
Mesajlar: 165
Kayıt: 27 Şub 2004 01:23

Mesaj gönderen mbt »

Senin record tipi ile o dosyaları inceleyememen tablo aralıklarının kaç harflik tanımlandığını bilmemenden kaynaklanıyor. Böylece ulaşmaya çalıştığında karışık kodlarla vs.. ekrana geliyor.

Kod: Tümünü seç

Type
Kayit=Record
ad:string[25];  
soyad:string[20];
tel:integer;
end;
Şimdi sen yukarıdaki gibi bir dat oluşturduğunda tekrar ona erişebilmen için bu tablo aralığı olan 25 ve 20'yi bilmen gerekir. Hatta tel kısmı da word ile mi integer ile mi tanımlandığını da yoksa

Kod: Tümünü seç

Type
Kayit:record
ad:string[255];
soyad:string[30];
tel:byte;
end;
gibi kafana göre tanımlayıp aynı dosyaya erişirsen bozuk olarak o dosyaları ekrana getirebilirsin. Sadece string dersen dahi, delphi 255 karakter katarı şeklinde algılar.

Sonuç olarak, bunu kaydeden programın kaynakları varsa bu tablo aralıklarını öğren.Yoksa da zor, uğraşman gerekir.

Kullandığın modern veritabanı değil ki bu aralıklar dosya içinde kayıtlı tutulsun.
neoerhans
Üye
Mesajlar: 19
Kayıt: 10 Ağu 2003 01:48
Konum: Izmir
İletişim:

Mesaj gönderen neoerhans »

Tekrar slm arkadaşlar ilginize gerçekten teşekkürler...
Yanlız ben sorunumu hala acık olarak aktaramadım galiba... :arrow:

Ben dat dosyasını alıp işlemicem sadece yukarıda da verdiim örnek gibi bi dat dosyası oluşturmam gerekiyor. Ama bunu RECORD'larla yaptığım zaman dosyada saçma sapan karakterler çıkıyo. Boyle birşeyin olmaması gerekli bunuda TextFile'lar ile o sorunu aşmış oluyoruz sadece sorunumuz yan yana kaydedilen bilgilerin ne mantıkla kaydedilmesi ve nasıl bir mantıkla okunması...Umarım sorunumu açıklayabilmişimdir. Bu arada aslageri arkadaşımın önerdiği makaleyi okudum orda anlatılan ClienDataset componentide *.cds uzantılı bir dosya yaratıyor istediğin bi yerde. Ama buda bneim sorunumu cozucek bişey diil...Aslangeri arkadaşıma ilgisinden dolayı teşekkür ederim...

Bana TextFile'lar ile tecrübesi olan arkadaşlar yardımcı olursa cok sevinirim..Eski dos mantığında kayıt ve düzenleme oluşturmam gerekiyor..

Kolay Gelsin... :idea:
Saygılar.
Bizler birer atoma benziyoruz ve gün geldiğinde bir ülkeyi dahi yok edebilecek güce sahibiz. Ama gücümüz aklımızın esiri! Bu yüzden Sıyırdınız gene :P

http://www.MindoMs.com
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

bi değikni create ettikten sonra tamamını boşluk veya null ile doldurman lazım. yoksahafızadaki alandaki byteler değişkenine kalır..

Kod: Tümünü seç

  FillChar(myKayit.ad, SizeOf(myKayit.ad), '  ');
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

merhaba, istediğin karakter uzunluğunda değişkenlerini tanımla.
verileri gir, mesela

Kod: Tümünü seç

ad : string[15]
ise ve girilen isim 10 karakterlik ise geri kalan 5 karakteri bişeyle doldur. öreğin * ile. alnı işlemleri diğer değişkenler içinde uygula ve hepsini tek satıra yaz.
yani

Kod: Tümünü seç

ad : string[15];
soy : string[15];
tel : string[20];
begin
ad := 'lazio**********';
soy := 'laz************';
tel := '123456789******';

// assign.... dosyayı aç falan
//yazarken de
writeln(dosyadegiskeni, ad, soy, tel); // gibi
dosyadan okurkende aynı şekilde readln ile okuyosun ancak
readln(dosyadegiskeni, gelentxt);
dediğinde gelentxt değişkeninin içinde
lazio**********laz************123456789****** gibi bir bilgi olur.
sen burda

Kod: Tümünü seç

ad := copy(gelentxt,1,15);
soy := copy(gelentxt,16,15);
tel := copy(gelentxt,30,20);
gibi ayıklayacaksın. daha bitmedi. birde ad degiskenindeki lazio********** stringinden * karakterlerini ayıklayacaksın
kolaygelsin
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
mustafaozdemir
Üye
Mesajlar: 137
Kayıt: 19 Haz 2004 01:56

Mesaj gönderen mustafaozdemir »

soruyu anladığım kadarıyla cevaplayayım. text dosyalarda değişikliğin yapacağın zaman yedek bir tane daha text dosya oluşturman gerekiyor. değişiklik yapacağın kaydı bulup bu kayıttan önceki kayıtları ve değişiklik yaptığın kayıtı ve bundan sonraki kayıtları yedek dosyasına atıp daha sonra ana dosyayı silip yedek dosyasının adını ana dosyanın ismi ile değiştirmen gerekiyor. ama record dosyasında kayıtlar düzgün gözükmüyor demişsin. record tipinde kayıtlar bildiğim kadarıyla binary tipinde kayıt edildiği için düzgün gözükmez. record tiplerle okuma,düzeltme falan yaacaksan aslangeri nin verdiği örnekler üzerinde inceleme yap. record tipli dosyalar text dosyalardan daha hızlı çalışır.
Cevapla