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ı?
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;
Keil v5.17 kullanın Edit->Configuration->Editor->Encoding->Turkish. Eski sürümlerde bu destek yok o nedenle sorun oluyor.
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.
StringReplace komutu var ise bu kadar if kullanmaya gerek kalmaz.