Ynt: Delphi - Keil - Türkçe karakter sorunu

Başlatan z, 16 Aralık 2015, 21:58:42

z

Delphide yazdığım bir program Kei'in proje dosyalarından birisi üzerinde  değişiklik yapıp geri diske yazıyor.

Keili çalıştırdığımda editlenmiş dosyaya kızıyor.

Sorunun türkçe ş karakterinden kaynaklandığını gördüm.

Delphi programın yaptığı iş  bir dosyanın lokasyonunu keil dosyasında ilgili alana yazmaktan ibaret.

Eğer programımla editleme yapmak yerine dosyayı Keilde ben gösterirsem sorun çıkmıyor.

Neyse sorunsuz dosyadaki ş harfi Users\HaberleÅŸme

sorunlu dosyadaki ş harfi Users\Haberleşme

Direktör ismini Delphi, Direktory Listbox ile öğreniyor. Dosyaya yazım işlemini klasik writefile tipi komutlarla yapıyorum. Memoedit üzerinden yaparsam daha başka sorunlar da çıkıyor.

Bu türkçe karakter sorununu nasıl aşarım?




mesaj birleştirme:: 16 Aralık 2015, 20:23:09

Geçmiş yıllarda Delphi ile yazdığım programlarla word belgeleri üzerinde editleme yapıyordum. Editlediğim dosyalar print edilirken sorun çıkarıyordu.

Sorunu şöyle çözdüm ama bu kez adam gibi çözmek istiyorum.

Çözümüm Ş görürsen atıyorum Hex ?? Hex ?? yaz. Ç görürsen hex ??  Hex?? yaz gibi.



mesaj birleştirme:: 16 Aralık 2015, 21:11:54

Klein hocam yolu string değişkene değil de unicodestring değişkene okumamı önerdi.

Delphi 6 da böyle bir veri tipi bulamadım ve string yerine widestring değişken kullandım.

Şimdi de hata var fakat en azından Keil hata veriyor fakat açılıyor. Eskiden hata verip devamını da getirmiyordu.

Delphi6 da  unicodestring olayına çözümüzü varmı?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#1
Sağolsun Klein araştırmış. Normalde Delphinin ileri versiyonlarını kullanıyor olsaydım  Memo1.Lines.LoadFromFile(FileName,Tencoding.Ansi) işimi görecekmiş.
Fakat 2 parametreli bu kullanıma Delphi 6 kızıyor.

Dededen kalma üsülle çözdüm artık.

function Turkce(S:string):string;
var n:integer;
begin
        result:='';
        for n:=1 to length(s) do
          begin
                 if s[n]='Ş' then Result:=Result+char(197)+char(158)
            else if s[n]='ş' then Result:=Result+char(197)+char(159)
            else if s[n]='Ç' then Result:=Result+char(195)+char(135)
            else if s[n]='ç' then Result:=Result+char(195)+char(167)
            else if s[n]='Ğ' then Result:=Result+char(196)+char(158)
            else if s[n]='ğ' then Result:=Result+char(196)+char(159)
            else if s[n]='Ü' then Result:=Result+char(195)+char(156)
            else if s[n]='ü' then Result:=Result+char(195)+char(188)
            else if s[n]='Ö' then Result:=Result+char(195)+char(150)
            else if s[n]='ö' then Result:=Result+char(195)+char(182)
            else if s[n]='İ' then Result:=Result+char(196)+char(176)
            else if s[n]='ı' then Result:=Result+char(196)+char(177)
            else Result:=Result+s[n];
          end;
end;
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Burak B

Keil v5.17 kullanın Edit->Configuration->Editor->Encoding->Turkish. Eski sürümlerde bu destek yok o nedenle sorun oluyor.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

engerex

 Keil ile türkçe karakterlerli dosya kaydedip delphi ile kaydelilenle kıyasla. Fark ortaya çıkacaktır.

Delphide sonraki sürümlerde Unicode desteği geldikten sonra işler biraz karıştı. Alışmak gerekiyor. Bilgin olsun.

boreas

StringReplace  komutu var ise bu kadar if kullanmaya gerek kalmaz.