???.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