Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
ini dosyası okuma problemim.
#1
Herkese merhaba,
bir ini dosyam var ve dosyanın başına bir satır boşluk vermeden yada yorum yazmadan okutamıyorum.
Bu şekilde bir problem ile karşılaşan oldu mu.

Örnek ini dosyam. Bu dosyayı okuyamıyorum.

[GENEL]
KONUM=0
SONUC=1

ama aşağıdaki dosyayı okuyabiliyorum.
;deneme
[GENEL]
KONUM=0
SONUC=1

Kodumda bu;

inidosya := Tinifile.Create(Extractfilepath(application.ExeName) + 'ayarlar.ini');
ini_konum    := inidosya.ReadString('GENEL','KONUM', '0');
Cevapla
#2
Merhaha.

Ben ini dosyalarla çalışırken herhangi bir hataya sebebiyet vermemesi açısından try-finally-end blokları arasında kullanıyorum. ini dosyasıyla işim bittikten sonra free ediyorum.

Sizin kullanım şekliniz biraz eksik gibi geldi. Örnek verecek olursak;


inidosya := Tinifile.Create(Extractfilepath(application.ExeName) + 'ayarlar.ini');
try
ini_konum    := inidosya.ReadString('GENEL','KONUM', ' ');
ini_sonuc    := inidosya.ReadString('GENEL','SONUC', ' ');
finally
inidosya.free;
end;

Bu şekilde muhtemelen işinizi görecektir.

İyi çalışmalar.
Bazen daha ileriye ulaşmak için bir kaç adım geri gitmek mecburidir. Çünkü en ileri sıçrayışlar iki adım geriden başlar.
Cevapla
#3
Merhaba,

Daha önce paylaşmış olduğum ini dosyasından veri okuma ve ini dosyasına veri yazma işlemleri ile ilgili aşağıdaki açıklamalar işinizi görecektir.

İyi günler.

---

Ini kütüphanesi ile dosyadan veri okuma
Açıklama: veri size string olarak döner. Eğer farklı bir tip ise içeride değişken tipinize göre convert edip kullanabilirsiniz. 
Mesela bir CheckBox kullanıyorsanız, işaretli olma durumunu string olarak true-false şeklinde tutabilir ve StrToBool(inidengelenveri) yaparak nesne.IsChecked özelliğine atayabilirsiniz (FormOnCreate yada DataModule içinde). 

function IniDosyadanOku(Sec, Ident, DefVeri: string): string;
var
 aFile: TIniFile;
 DosyaAdi: string;
begin
 DosyaAdi := GetHomePath + '/DOSYAADI.ini'; // Dosya adını da parametrik yapabilir, fonksiyona bir parametre olarak geçebilirsiniz. Aynı şekilde ek bir klasör ataması da olabilir AA/BB.txt gibi.
 aFile := TIniFile.Create(DosyaAdi);
 Result := aFile.ReadString(Sec, Ident, DefVeri);
 aFile.Free;
end;


Ini kütüphanesi ile dosyaya veri yazma
Açıklama: Dosya yoksa oluşturacağı için kendinize Key-Value (Yada section-identification) belirtin. String olarak veriyi götürüp yazın. 


procedure IniDosyayaYaz(Sec, Ident, Veri: string);
var
 aFile: TIniFile;
 DosyaAdi: string;
begin
 DosyaAdi := GetHomePath + '/DOSYAADI.ini'; // Dosya adını da parametrik yapabilir, fonksiyona bir parametre olarak geçebilirsiniz. Aynı şekilde ek bir klasör ataması da olabilir AA/BB.txt gibi.
 aFile := TIniFile.Create(DosyaAdi);
 aFile.WriteString(Sec, Ident, Veri);
 aFile.Free;
end;



Örnek Kullanım (Veri Yazma-Kaydetme)

if txUsername.Text <> '' then
 begin
    IniDosyayaYaz('AYARLAR', 'KullaniciAdi', txUsername.Text);
    IniDosyayaYaz('AYARLAR', 'Sifre', txUserpwd.Text);
 end;

Örnek Kullanım (Veri Okuma)

procedure TGirisFormunuz.FormCreate(Sender: TObject);
begin
  txUsername.Text := IniDosyadanOku('AYARLAR', 'KullaniciAdi', ''); // eğer ini yada txt dosyanızda böyle bir veri yoksa 3. parametre varsayılan dönüşü verir. Yoksa boş getiriyor burada.
  txUserpwd.Text := IniDosyadanOku('AYARLAR','Sifre','');
end;
Cevapla
#4
Merhaba, öncelikle cevaplarınız için teşekkür ederim ama sanırım problemimi anlatamadım.
Sıkıntım ini dosyasını okuma yazma değil zaten dediğiniz şekilde yapıyorum bu konuda sıkıntım yok.
Tek sıkıntı ini dosyasının başına boş bir satır oluşturmadığımda okuyamamam.
Cevapla
#5
İlk oluşan dosyayı nasıl oluşturdunuz. Utf8 veya ansi olmasından kaynaklanabilir. Tavsiyem dosyayı silip kod ile tekrar oluşturun. Kodunuz sorunsuz kaynak ini dosyasi düzgün ise çalışması gerekiyor
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#6
TIniFile.Create işlemini gerçekleştirdiğiniz Delphi projenizde, kullandığınız işletim sisteminde, dosya veri biçimlerinde, sistem varsayılan encoding formatında ve daha birçok noktada problem oluşabilir. Siz bir kod bloğu atarak sorunuzu açıklamak ve kapsamını belirtmek yerine "bu kodla böyle bir dosyayı okuyamıyorum" demeyi tercih etmişsiniz.

Bu hususta başınıza gelen problemi giderebilmek için soru sordunuz. Yerinizde olsam verilen cevaplara hakettiği gibi değerlendirmek ve belirtilenleri gerçekleştirip (feedback) yanıt vermek olurdu.

Size vermiş olduğum örneği kullanarak test edip probleminizin devam edip etmediğini paylaşmanız yine size ve sizin gibi gelecekte problem yaşayacakların yararına olacaktır.
Cevapla
#7
(19-05-2020, Saat: 03:46)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: TIniFile.Create işlemini gerçekleştirdiğiniz Delphi projenizde, kullandığınız işletim sisteminde, dosya veri biçimlerinde, sistem varsayılan encoding formatında ve daha birçok noktada problem oluşabilir. Siz bir kod bloğu atarak sorunuzu açıklamak ve kapsamını belirtmek yerine "bu kodla böyle bir dosyayı okuyamıyorum" demeyi tercih etmişsiniz.

Bu hususta başınıza gelen problemi giderebilmek için soru sordunuz. Yerinizde olsam verilen cevaplara hakettiği gibi değerlendirmek ve belirtilenleri gerçekleştirip (feedback) yanıt vermek olurdu.

Size vermiş olduğum örneği kullanarak test edip probleminizin devam edip etmediğini paylaşmanız yine size ve sizin gibi gelecekte problem yaşayacakların yararına olacaktır.

Hocam merhaba, yazınızdan biraz kızmışsınız gibi hissettim ama emin olun öyle bir niyetim yoktu. 
Bir saygısızlık ettiysem herkesten çok özür dilerim. Sadece yazmış olduğunuz kodlar gibi yazıyorum bende ve aynı hatayı alıyorum demek istedim. 

Şöyle birşey denedim ini dosyasını memo ya yükledim ve dosyanın başına 

 

bu karakterleri koyduğunu gördüm, muhtemelen bunlardan dolayı sıkıntı yaşıyorum. Bu karakterler nasıl buraya gelmiş olabilir yada ben bunları kaldırarak ini dosyasını nasıl okuyabilirim?
Cevapla
#8
o karakterlere "byte order mark", kısaca BOM deniyor:
https://en.wikipedia.org/wiki/Byte_order_mark

http://docwiki.embarcadero.com/RADStudio...code_Files
There's no place like 127.0.0.1
WWW
Cevapla
#9
@SimaWB'in ve @3ddark bahsettiği şekilde bir sorununuz olduğu görülüyor.

- INI dosyasını Not Defteri ile açtıktan sonra "Farklı Kaydet" ekranından kaydet butonunun yanındaki seçeneklerden ANSI olarak seçip kaydedin. İlgili karakterler filtrelenerek gidecektir.


q1dhpsjhbphsa8zqsgdu.png
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#10
Öncelikle ini dosya mantığına göre böyle bir problem olmaz aslında. Problemin nedeni karakter kodlaması olabilir belki. Dosyanız UTF8 karakter kodlamasına sahip olabilir. Bu fonksiyonlar ise ANSI karakterler üzerinden çalıştığı için problem yaşıyor olabilirsiniz. Dosyanızın ANSI karakter kodlamasıyla oluşturmaya dikkat etmenizde fayda var.

Bir diğer yöntem ise TMemIniFile sınıfını kullanmak. Bu sınıf tıpkı TIniFile gibi ortak sınıftan türemektedir ama Windows API lerini kullanmayıp, kendi içinde tanımlı yöntemlerle bağımsız olarak çalışır. Tabi bir kayıt değiştirmeniz durumunda mutlaka UpdateFile metodunu çağırmanız gerekmektedir. Bu sınıfla ini dosyalar üzerinde farklı karakter kodlarıyla çalışılabileceği gibi aynı zamanda çok daha hızlı işlem yapabilirsiniz. Tabi değişikliklerin tümünü bitirdikten sonra bir defa UpdateFile metodunu çağırmaya dikkat etmek gerekiyor.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Smart Kart Okuma İçin Örnek Kod ferhatcelik 0 182 15-04-2020, Saat: 19:13
Son Yorum: ferhatcelik
  fastReport sayfa sayısını okuma akuyumcu63 3 367 11-04-2020, Saat: 15:04
Son Yorum: hi_selamlar
  Exe dosyası web yayınlamak ismailt35 17 3.971 09-03-2020, Saat: 08:50
Son Yorum: vkamadan
  ÇÖZÜLDÜ-dikdörtgen alanın resim pixel renk değerlerini okuma sadikacar60 2 607 29-10-2019, Saat: 14:48
Son Yorum: sadikacar60
  Comport veri okuma klavye 16 3.079 18-06-2019, Saat: 17:19
Son Yorum: boreas



Konuyu Okuyanlar: 1 Ziyaretçi