[linux-programlama] Re: Glibc, Turkce yereli ve siralama sorunu

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Yüksel ÖZCAN (yuksel@linux-sevenler.org)
Date: Fri 28 May 2004 - 23:59:26 EEST


Evet, verdiginiz ornekler gercekten guzel, ben Turkce sorununu kendi capimd=
a=20
zaten cozdum, ama projemizi cok dilli yapida tasarladigimiz icin tum diller=
i=20
kullanirken sorun cikacak, bu sorunu $imdilik butun diller icin=20
setlocale(LC_ALL, "yerel dil")
setlocale(LC_NUMERIC, tr_TR)
$eklinde gecici bir cozume kavusturduk :) Program once tum yerel degiskenl=
eri=20
makinanin yereline gore ayarliyor(gettex icin), sonra da sadece numerik=20
i$lemleri turkceye gore ayarliyor. Tabi gtk'ya strfmon()dan gelen sonuclari=
=20
basarken de en sondaki " TL" ibaresini kaldiriyoruz. Asil demek istedigim $=
ey=20
glibc-dev grubunun strfmon() yapmi$lar ne guzel, ama bununla birlikte birde=
=20
unstrfmon() gibi bir $ey geri koymalari gerekmez miydi? Sadece fikir, soru=
n=20
yok aslinda, hazir konu glibc Turkce yereli'nden acilmi$ken bu durumu da no=
t=20
olarak arkada$lar ile payla$mak istedim. Belki debian unstable'da unstrfmon=
()=20
patchi vardir, belli mi olur..... :))

Yuksel OZCAN
http://muhasebeci.sf.net

Cuma 28 May 2004 23:42 tarihinde =FEunlar=FD yazm=FD=FEt=FDn=FDz:
> Cum 28 May 2004 20:21 tarihinde =FEunlar=FD yazm=FD=FEt=FDn=FDz:
>
> strfmon, bir float al=FDyor input olarak.
>
> > $oyle bir du$ununce daha onceden strfmon ile formatlanmi$ bir rakami
> > tekrar=3D =3D20
> > strfmon'a yolladiginizda bu defa c'nin ayarlari devreye giriyor ve ilk=
=3D20
> > noktaya kadar olan kismi (.) rakam olarak, noktadan sonraki kismi ise
> > kuru$=3D =3D20
> > olarak aliyor. hali ile uzunca bir rakam bir anda cok kisa hale
> > geliyor.=3D20 rakamimiz 123456.45 olsun (float)
> > ilk strfmondan sonra 123.456,45
> > ikinci strfmondan sonra 123,45=3D20
> > gibi bir durum var. Bu glibc'nin bir eksigi degilmidir ?
>
> Yazd=FD=F0=FDn=FDzdan, =FEunu anl=FDyorum:
>
> #include <stdio.h>
> #include <locale.h>
> #include <monetary.h>
>
> int main ( void )
> {
> char buf[100] ;
> char buf2[100] ;
>
> float num;
>
> setlocale (LC_ALL, "") ;
> num =3D 123456.78;
>
> strfmon(buf,sizeof(buf),"%n", num ) ;
>
> printf ( "%s\n", buf ) ;
>
> strfmon ( buf2, sizeof ( buf2), "%n", buf ) ;
>
> printf ( "%s\n", buf2 ) ;
> }
>
> Bu ufak =F6rne=F0in =E7=FDkt=FDs=FD:
> 123.456,78 TL
> 1.427.379.555.818.354.865.194.132.335.645.168.051.020.843.959.261.985.169=
=2E5
>52.898.147.403.478.483.67 $-1=A8=C2 @
>
> Yani birinci strfmon do=F0ru. =DDkincisinden bir hay=FDr beklemek m=FCmk=
=FCn olmasa
> gerek, =E7=FCnk=FC float t=FCr=FCnde girdi verece=F0imize char t=FCr=FCnd=
e girdi verdik.
>
> Peki, strfmon ile formatlad=FD=F0=FDm=FDz char'=FD nas=FDl tekrar geri ok=
utaca=F0=FDz?
>
> Bunu birebir geri okutmak i=E7in bir i=FElev yok.
>
> Fakat, sadece nokta/virg=FCl i=E7in neden strfmon kullan=FDyorsunuz diye =
bakt=FDm.
>
> setlocale (LC_ALL, "tr_TR") ;
> num =3D 123456.78;
> strfmon(convbuf,sizeof(convbuf),"%n", num ) ;
> printf ( "%s\n", convbuf ) ;
>
> printf ( "%'.2f\n", num ) ;
>
> % ./ornek
> 123.456,78 TL
> 123456.78
>
> Peki acaba sorun bizim locale'de mi.
>
> setlocale (LC_ALL, "da_DK") ;
> num =3D 123456.78;
> strfmon(convbuf,sizeof(convbuf),"%n", num ) ;
> printf ( "%s\n", convbuf ) ;
>
> printf ( "%'.2f\n", num ) ;
>
> % ./ornek
> kr 123.456,78
> 123.456,78
>
> Dolay=FDs=FDyla istedi=F0iniz formatta =E7=FDkt=FD alamaman=FDz=FDn m=FCs=
ebbibi gene tr_TR
> locale.
>
> Parasal olmayan rakamlar i=E7in grouping separator ve radix tan=FDmlanmam=
=FD=FE.
> Bunlar=FDn tan=FDml=FD oldu=F0u Danimarka locale'inde glibc sorun vermiyo=
r.
>
> Acaba bu Danimarka float'=FDn=FD medeni bir y=F6ntemle geri okutabilmek m=
=FCmk=FCn
> m=FC?
>
> setlocale (LC_ALL, "da_DK") ;
> num =3D 123456.78;
> sprintf ( convbuf, "%'.2f", num ) ;
> printf ( "num-->%s\n", convbuf) ;
>
> sscanf ( convbuf, "%'.2lf", &num2 ) ;
> printf ( "num2-->%.2lf\n", num2 ) ;
>
> %./ornek
> num-->123.456,78
> num2-->123456,78
>
> dolay=FDs=FDyla sizin sorununuz T=FCrk yereli ile. Ve de strfmon'u gerekt=
i=F0i
> yerde kullanmamakla ilgili.
>
> > kuru$=3D20 ayiraci ya noktadir yada virgul :))) Bazi dillerde de strfmo=
n()
> > dan gelen=3D20 sonucun onunde $ i$areti oluyor. Bu genel bir sorun olar=
ak
> > herkesin kar$isi=3D na=3D20
> > cikabilir. O yuzden not olarak iletmek istedim.=3D20
>
> Bu dillerde strfmon'un bir su=E7u yok. Su=E7, gene o dilin yerel datas=FD=
nda,
> para i=FEaretinin ne oldu=F0unun yanl=FD=FE olarak $ verilmi=FE olmas=FDn=
dan
> kaynaklan=FDyor.
>
> Esen kal=FDn,
> Deniz


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.