unicode text cevirme yardim
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
unicode text cevirme yardim
esselamu aleykum...
delphide yeniyim. ne kadar ugrastim isede basaramadim. yardimci olursaniz cok memnun olacagim.
yapmak istedigim şu:
bir memo alanim var burada yazilan yaziyi veya acilan rtf formatli text yazi icinde harfleri replace degsitirme yapmak istiyorum. fakat soyle olmali.
bir unicode text olan deg.txt gibi dosyada yazmis oldugum harf ve kelimeri uygulaycak. unicode olmasi sart benim icin azerice ve rusca turkce harflerim var.
unicode olan deg.txt icregi soyle: harfler arasinda tab var. butona basinca mesela gg harfini memo alaninda gorunce ğ ile, gg -> q ile sch -> ş ile degistirmeli.
g ğ
gg q
sch ş
QU yu
deg.txt tablomda 150 kadar bu sekilde harf, kelimeler var. actigim tex veyaa .rtf dosyasida 10-20 mb olabilir. ona gore de cok hzli bir sekilde degisitirsin istiyorum.
yardimci olursaniz cok sevinirim.
serkan
delphide yeniyim. ne kadar ugrastim isede basaramadim. yardimci olursaniz cok memnun olacagim.
yapmak istedigim şu:
bir memo alanim var burada yazilan yaziyi veya acilan rtf formatli text yazi icinde harfleri replace degsitirme yapmak istiyorum. fakat soyle olmali.
bir unicode text olan deg.txt gibi dosyada yazmis oldugum harf ve kelimeri uygulaycak. unicode olmasi sart benim icin azerice ve rusca turkce harflerim var.
unicode olan deg.txt icregi soyle: harfler arasinda tab var. butona basinca mesela gg harfini memo alaninda gorunce ğ ile, gg -> q ile sch -> ş ile degistirmeli.
g ğ
gg q
sch ş
QU yu
deg.txt tablomda 150 kadar bu sekilde harf, kelimeler var. actigim tex veyaa .rtf dosyasida 10-20 mb olabilir. ona gore de cok hzli bir sekilde degisitirsin istiyorum.
yardimci olursaniz cok sevinirim.
serkan
Re: unicode text cevirme yardim
Anladıgım kadarıyla cevap verdim...Yanlıs anlamıs olabilirim
kolay gelsin...
Kod: Tümünü seç
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.LoadFromFile('C:\deg.txt');
memo1.Lines.Text :=AnsiReplacetext(memo1.Lines.Text,'g','ğ');
memo1.Lines.Text :=AnsiReplaceText(memo1.Lines.Text,'sch','ş');
memo1.Lines.Text :=AnsiReplaceText(memo1.Lines.Text,'QU','yu');
Memo1.Lines.SaveToFile('C:\deg.txt');
end;
end.
procedure TForm1.FormCreate(Sender: TObject);
begin
showmessage('Dehanın %1 i ilham %99u terdir.');
end;
end.
begin
showmessage('Dehanın %1 i ilham %99u terdir.');
end;
end.
Re: unicode text cevirme yardim
şuan dosyayla falan uğraşmamak için listbox a yazdım deg.txt içeriğini.
listbox1 de kaynak değerler, listbox2 de hedef değerler var.
memo1 e yazdığım rasgele yaz içnde değiştirilmesini istediğim karakterler vardı işlem sonucunda değişmiş hali mem2 ye yazıldı.
yalnız burada 2 sorun var.
1.si g->ğ ve gg->q demişsin bu durumda biraz kontrol gerekiyor. çünkü bu kodla gg deki ilk g yi ğ yapıyor ve ğg oluyor dolayısıyla q olması gereken değer ğğ oluyor.
2.si 10 mb lık dosyanın bu yöntemle taranması biraz zaman alır sanırım.
belki thread işi çözer ama biraz uğraşmak gerek.
ne kadar mantıklı bir çözüm bilmiyorum ama ilk aklıma gelen yöntem bu
listbox1 de kaynak değerler, listbox2 de hedef değerler var.
memo1 e yazdığım rasgele yaz içnde değiştirilmesini istediğim karakterler vardı işlem sonucunda değişmiş hali mem2 ye yazıldı.
yalnız burada 2 sorun var.
1.si g->ğ ve gg->q demişsin bu durumda biraz kontrol gerekiyor. çünkü bu kodla gg deki ilk g yi ğ yapıyor ve ğg oluyor dolayısıyla q olması gereken değer ğğ oluyor.
2.si 10 mb lık dosyanın bu yöntemle taranması biraz zaman alır sanırım.
belki thread işi çözer ama biraz uğraşmak gerek.
ne kadar mantıklı bir çözüm bilmiyorum ama ilk aklıma gelen yöntem bu
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
satir:string;
begin
Memo2.Lines.Clear;
for i:=0 to Memo1.Lines.Count-1 do
begin
satir:=Memo1.Lines[i];
for j:=0 to ListBox1.Items.Count-1 do
begin
satir:=AnsiReplaceText(satir,ListBox1.Items[j],ListBox2.Items[j]);
end;
Memo2.Lines.Add(satir) ;
end;
end;
bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Re: unicode text cevirme yardim
memo1.Lines.Text :=AnsiReplacetext(memo1.Lines.Text,'g','ğ');
AnsiReplacetext ile ( parantez arasi bu satir hata veriyor
tesekkur ederim.
ama tam isi halledemedik.
deg.txt dosyasi bizim tablomuz icinde degerler olan unicode text tablomuz (degisecek ve hedef degerler var)
gg (sekme) q
g (sekme) ğ
sch (sekme) ş
içi boyle devam edip gidiyor
150-200 kadar kelime var bunlari delphi icersine
memo1.Lines.Text :=AnsiReplaceText(memo1.Lines.Text,'sch','ş');
bu sekilde 200 tane yazmak zor oluyor sonra nasil program idisindan degisiklikler yapabilirim. yani bu degerleri deg.txt icerisinden okunmali.
sunlar yaplimali zannediyorum ama yapamadim.
1-deg.txt unicode belgesi okutturulup birinci sutun bulunup ve ikinci sutun alanlanındaki ile degisitirilmeli. tabi aralarinda sekme var ve unicode bir belge.
2-acilmis veya yazilmis olan memo veya richedit belgesindeki yaziya uygulanmali
bunun icin ansireplace mi yoksa unicode oldugundan unicodeu destekleyen bir replace mi gerekli.
AnsiReplacetext ile ( parantez arasi bu satir hata veriyor
tesekkur ederim.
ama tam isi halledemedik.
deg.txt dosyasi bizim tablomuz icinde degerler olan unicode text tablomuz (degisecek ve hedef degerler var)
gg (sekme) q
g (sekme) ğ
sch (sekme) ş
içi boyle devam edip gidiyor
150-200 kadar kelime var bunlari delphi icersine
memo1.Lines.Text :=AnsiReplaceText(memo1.Lines.Text,'sch','ş');
bu sekilde 200 tane yazmak zor oluyor sonra nasil program idisindan degisiklikler yapabilirim. yani bu degerleri deg.txt icerisinden okunmali.
sunlar yaplimali zannediyorum ama yapamadim.
1-deg.txt unicode belgesi okutturulup birinci sutun bulunup ve ikinci sutun alanlanındaki ile degisitirilmeli. tabi aralarinda sekme var ve unicode bir belge.
2-acilmis veya yazilmis olan memo veya richedit belgesindeki yaziya uygulanmali
bunun icin ansireplace mi yoksa unicode oldugundan unicodeu destekleyen bir replace mi gerekli.
Re: unicode text cevirme yardim
Öncelikle bütün işlemleri TStringList kullanarak yapmanızda fayda var. Ama her halukarda BeginUpdate ve EndUpdate alt yordamlarını kullanmalısınız (hız açısından).
Karakter sayısı çok olandan az olana şeklinde sıralayıp sonrasında replace işlemini yapmalısınız. Yani önce gg'yi sonra g'yi şeklinde. Bunu da Length fonksiyonunu kullanarak yapabilirsiniz.
Bir de şu replace komutlarını kullanırsanız işleminiz normal replace komutlarına oranla oldukça hızlı olacaktır:
İyi çalışmalar.
Karakter sayısı çok olandan az olana şeklinde sıralayıp sonrasında replace işlemini yapmalısınız. Yani önce gg'yi sonra g'yi şeklinde. Bunu da Length fonksiyonunu kullanarak yapabilirsiniz.
Bir de şu replace komutlarını kullanırsanız işleminiz normal replace komutlarına oranla oldukça hızlı olacaktır:
Kod: Tümünü seç
function MyAnsiReplace(const aText, aFromText, aToText: string; aAnsiUpperCase, aFirstPosControl: Boolean; var ChangeCount: Integer): string;
var
I, J: Integer;
aFirstIndex: Integer;
St: string;
aSearchText: string;
aSearchFromText: string;
aLengthText: Integer;
aLengthFromText: Integer;
aFound: Boolean;
begin
ChangeCount := 0;
if (aText = '') or (aFromText = '') then
begin
Result := aText;
Exit;
end;
if aFirstPosControl and not aAnsiUpperCase then
if System.Pos(aFromText, aText) < 1 then
begin
Result := aText;
Exit;
end;
if aAnsiUpperCase then
begin
aSearchText := AnsiUpperCase(aText);
aSearchFromText := AnsiUpperCase(aFromText);
if aFirstPosControl then
if System.Pos(aSearchFromText, aSearchText) < 1 then
begin
Result := aText;
Exit;
end;
end
else
begin
aSearchText := aText;
aSearchFromText := aFromText;
end;
aLengthText := Length(aText);
aLengthFromText := Length(aFromText);
Result := '';
I := 1;
aFirstIndex := 1;
repeat
aFound := aSearchText[I] = aSearchFromText[1];
if aFound then
begin
for J := 2 to aLengthFromText do
if aSearchText[I + J - 1] <> aSearchFromText[J] then
begin
aFound := FALSE;
Break;
end;
if aFound then
begin
if aFirstIndex < I then
begin
SetLength(St, I - aFirstIndex);
Move(aText[aFirstIndex], St[1], I - aFirstIndex);
Result := Result + St;
end;
Result := Result + aToText;
Inc(I, aLengthFromText - 1);
aFirstIndex := I + 1;
Inc(ChangeCount);
end;
end;
Inc(I);
until I > aLengthText;
if aFirstIndex < I then
begin
SetLength(St, I - aFirstIndex);
Move(aText[aFirstIndex], St[1], I - aFirstIndex);
Result := Result + St;
end;
end;
function MyAnsiReplaceStr(const aText, aFromText, aToText: string): string;
var
aChangeCount: Integer;
begin
Result := MyAnsiReplace(aText, aFromText, aToText, FALSE, TRUE, aChangeCount);
end;
function MyAnsiReplaceText(const aText, aFromText, aToText: string): string;
var
aChangeCount: Integer;
begin
Result := MyAnsiReplace(aText, aFromText, aToText, TRUE, TRUE, aChangeCount);
end;
Re: unicode text cevirme yardim
AnsiReplaceText için usese StrUtils 'i eklemen lazımmemo1.Lines.Text :=AnsiReplacetext(memo1.Lines.Text,'g','ğ');
AnsiReplacetext ile ( parantez arasi bu satir hata veriyor
Kolay Gelsin...
Re: unicode text cevirme yardim
acaba load etmeden deg.txt dosyasindan memodaki yaziya nasil uygulacagim tab karakteri oldugundan.
TAB = #9; bu degeri nasil kullanmam lazim.
TAB = #9; bu degeri nasil kullanmam lazim.
Re: unicode text cevirme yardim
yardimci olanlara tesekkur ederim. biraz ilerleme kaydederek
stringgrid de cagirdim deg.txt yi. simdi stringgrid1 deki 1. sutun(bulunacaklar) ve 2.sutundaki(degiştirilecek) degerleri nasil uygulayacagim memo1 e.
Şu işe bir el atinda konu kapansin ustalar.
soyle bir sey yaptim ama olmadi. nasil bir sey yapmam lazim.
memo1.Lines.Text :=AnsiReplaceText(memo1.Lines.Text,'a.TXT', '#9', StringGrid1);
stringgrid de cagirdim deg.txt yi. simdi stringgrid1 deki 1. sutun(bulunacaklar) ve 2.sutundaki(degiştirilecek) degerleri nasil uygulayacagim memo1 e.
Şu işe bir el atinda konu kapansin ustalar.
soyle bir sey yaptim ama olmadi. nasil bir sey yapmam lazim.
memo1.Lines.Text :=AnsiReplaceText(memo1.Lines.Text,'a.TXT', '#9', StringGrid1);