Dosyadan okuma İşlemi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
osmanlı_06
Üye
Mesajlar: 19
Kayıt: 02 Nis 2007 12:57

Dosyadan okuma İşlemi

Mesaj gönderen osmanlı_06 »

Dosyadan okuma işleminde Blockread() komutu kullanıyorum ve okuma işlemi yapılan dosyada her satır nokta işareti ile tamamlanıyor. BlockRead() ile bu nokta işaretine kadar olan veriyi nasıl alabilirim.
Tüm satırlar farklı veriler içerdiğinden sabit bir değer bulunmamakta.
"Bismillah Her Hayrın Başıdır"
---------------------------------------
"Computer Engineer since 2008"
"I'm looking for a good job since 2010"
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: Dosyadan okuma İşlemi

Mesaj gönderen ikutluay »

osmanlı_06 yazdı:Dosyadan okuma işleminde Blockread() komutu kullanıyorum ve okuma işlemi yapılan dosyada her satır nokta işareti ile tamamlanıyor. BlockRead() ile bu nokta işaretine kadar olan veriyi nasıl alabilirim.
Tüm satırlar farklı veriler içerdiğinden sabit bir değer bulunmamakta.
blockread adı üstünde dosyadan satır satır değilde belirli sayıda bir karakter blogunu okur.

sizin verileriniz
gdglj dlgdflg jdlf gjdlkfjg dkfjg.
fjsldk jfsldkjf sldkjf lsdjfl sjdfl jfljsdlfjsld kj.
şeklinde ise zaten readln ile okumalısınız. yok bunlar yanyana ise ve nokta rastgele yerde ise POS ile noktaları bulup okumalısınız. blockread ın bu konuda işe yaramak üzere tasarlandığını düşünmüyorum. kısaca readln vs daha kullanışlı gibi duruyor
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
osmanlı_06
Üye
Mesajlar: 19
Kayıt: 02 Nis 2007 12:57

Mesaj gönderen osmanlı_06 »

sizin verileriniz Alıntı:

gdglj dlgdflg jdlf gjdlkfjg dkfjg.
fjsldk jfsldkjf sldkjf lsdjfl sjdfl jfljsdlfjsld kj.



şeklinde ise zaten readln ile okumalısınız. yok bunlar yanyana ise ve nokta rastgele yerde ise POS ile noktaları bulup okumalısınız. blockread ın bu konuda işe yaramak üzere tasarlandığını düşünmüyorum. kısaca readln vs daha kullanışlı gibi duruyor
Cevabınızdan dolayı teşekkürler. Fakat sizin dediğiniz yöntem dosya textfile olması durumunda geçerlidir.Ben .txt olmayan dosyalar için sormuştum.
"Bismillah Her Hayrın Başıdır"
---------------------------------------
"Computer Engineer since 2008"
"I'm looking for a good job since 2010"
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Mesaj gönderen Battosai »

İçeriği text olan her dosya textfile işlemi yapabilirsin...uzantı ne olursa olsun farketmez...
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Battosai yazdı:İçeriği text olan her dosya textfile işlemi yapabilirsin...uzantı ne olursa olsun farketmez...
Dosyada #13 karakteri yoksa satır kavramı da olmaz. ReadLn ile okuyabileceğiniz satır uzunluğunun maksimum değeri sıkıntı çıkartabilir.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Bir fonksiyon yazarsın.. File'den BockRead ile okunan her byte kontrol edilir. Nokta bulana kadar aldığı karakteri bir stream'e atar.

- Eğer aldığın bir string ifade grubu ise şöyle bir kurgu işini görecektir.

Kod: Tümünü seç

Function AyracaKadarOku( Var Dosya:File; Konum:dWord; Ayrac:Char ): String;
Var
  Okunan : Char;
begin
  ZeroMemory(@Result, SizeOf(Result));
  If Konum > 0 then Seek(Dosya, Konum); // konumu 0 geçerseniz olduğu yerden başlar.
  Okunan := #0;
  While (NOT EOF(Dosya)) AND (Okunan <> Ayrac) do begin
    BlockRead(Dosya, Okunan, SizeOf(Okunan));
    If Okunan <> Ayrac then Result := result + Okunan;
  end;
end;

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Var
  Dosya : File;
  Liste : TStringList;
begin
  Liste := TStringList.Create;
  AssignFile(Dosya, 'c:\test.txt');
  Reset( Dosya, 1 );
  FileMode := faReadOnly;
  While NOT EOF(Dosya) do begin
    Liste.Add( AyracaKadarOku(Dosya, 0, '.') );
  end;
  ShowMessage(Liste.Text);
  Liste.Free;
  CloseFile( Dosya );
end;
- Bu uygulama c:\test.txt isimli bir dosya varsaydım. Noktalardan ayırarak satırlara böler. Tabi arada satır karakteri varsa bu sayı artar bu nedenle #13#10 içerenleri ayrıca kontrol etmen filtrelemen gerekir.

- Ayraç karakterini değişken yaptım ki ilerde nokta yerine başka karakter de kullanmak isteyebilirsin.
Resim
Resim ....Resim
Cevapla