???.txt

Andras Tantos andras_tantos at yahoo.com
Tue May 24 20:08:47 CEST 2005


Hali!

>>> Vagy mar fordul az unicode textfajlban irt C progi is?
>>
>>   Miért ne fordulna?
>
> Kiprobaltam, tenyleg nem megy! Nem fordul. Csak sima textet esznek a
> C forditok. Mondj egyet amelyik eszi az unicode textfajlt is, megnezem.

Visual C++ 8.0 beta2. Teljesen unicode kompatiblis, odaig, hogy akar hindi 
valtozneveket is irhatsz egy japan nyelvu fuggvenybe. Hogy ennek mi ertelme 
van, az mar egy masik kerdes, de string konstansoknal speciel jol jon.

> Egyaltalan hogy kell unicode szovegfajlt csinalni? Jelenleg tesom gepen
> word-bol kimasoltam binaris szerkesztovel. Pl a VC6 is sima szoveggel
> dolgozik, nem unicode... Egyaltalan honnan vettetek ezt?

XP alatt a Notepad tud unicode-ban menteni. File/Save As, dialogus doboz 
legalso legordulo listaja 'Encodeing' nevvel.

>
>>   Dehogy PC. Minden nagyobb kurrens vas és szoftver támogatja.
>
> Nagyobb... Hany GHz felett?

Az egyszeru UTF16 tamogatas (surrogate karakterek nelkul) 32-bites 
processzoron nem igenyel lenyeges tobblet CPU eroforrast. A string-ek persze 
dupla akkora helyet fogalalnak, es ezert kicsit tobb lesz a cache-miss, de 
ezek a procik egyebkent se nagyon szeretnek 32-bitesnel kisebb adatokkal 
dolgozni.

> Miert ne mukodne? Megoldom. Beteszek egy escape szekvenciat, az fogja
> megadni hogy onnan milyen kodlap jon. Ennyi. Nagy kaland...

Azutan ird meg a 'backspace' rutint - tudod, vissza torolni egy karaktert. 
Azutan ird meg az index operatort, amelyik az 'i'-edik karaktert (es nem 
byte-ot) adja vissza. Ha ez is megvan, ird meg a 'compare' fuggvenyt, 
amelyik ket string-et hasonlit ossze egyezoseg szempontjabol (figyelembe 
veve azt, hogy egy escape-szekvencia, ami kodlapot valt, nem feltetlen jut 
ervenyre, ha utana ujabb escape szekvencia jon, es nem karakter). Ha ezzel 
is kesz vagy, ird meg azt a rutint, amelyik megfelelo hosszusagu buffert 
foglal ahhoz, hogy a user be tudjon gepelni egy, mondjuk 100 karakter (es 
nem byte) hosszusagu string-et. Ha mindezzel kesz vagy, ird meg azt a 
rutint, amelyik tetszoleges karakterrol egy string-ben (azaz megadott index 
alapjan) megmondja, hogy milyen kodlap tartozik hozza. Vegezetul gondolkodj 
el ket string osszefuzesen, string-ek szetvagasan (kodlaphelyesen, 
termeszetesen, tehat a masodik string elejere be kell esetleg szurni egy 
escape szekvenciat), egy string kozepebe valo beszurason, vagy mondjuk a 
sub-string keresesen (megintcsak kodlap helyesen termeszetesen).

Ha mindez megvan, hasonlitsd ossze a rutinjaid bonyolultsagat, es sebesseget 
az eredeti string manipulalo fuggvenyekkel.

Miutan ezzel is kesz vagy, forditsd a figyelmed a fentebb emlegetett 
allokalo rutinra: leven itt kenytelen vagy worst-case szamolni (hiszen meg 
nem tudod, hogy a user mit fog beirni, akar minden karakter utan kodlapot 
kellhet valtanod) ezert a foglalt memoria tobb mint ketszer akkora lesz, 
mint egy sima ASCII string-hez kellene.

Osszefoglalva, sem CPU eroforrasban, sem memoriafoglalasban nem nyertel, 
legfelejebb a forraskodban beegetett statikus string-eknel.

Pedig megigertem, hogy nem szolok bele tobbet... :(

Udv,
Tantos Andras 




More information about the Elektro mailing list