???.txt

Andras Tantos andras_tantos at yahoo.com
Wed May 25 03:09:22 CEST 2005


Hali!

>> 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
>
> Megirom! Akar ugy, hogy eloszor kikodolom valami unicode szeru formatumba,
> es ugy vegzem el a kavarasokat. Semmi problema.
> De lassuk be, nem egy eletszeru problema...
> Gondolod hogy a vilagon mindenki wordot szeretne irni?
> Pl a kavefozobe, vagy egy POS terminalba konstans sztringeket, es %d-t
> kell kiirni. Mi a rakert lenne benne unicode, ha akarhany nyelven is tud??

Ne vadits mar! Nem eletszeru egy string-et nem sorosan elerni? Nem eletszeru 
visszatorolni az utolso karaktert? Rendben, egy kavefozoben nem valoszinu, 
de egy POS terminalban, ahol mondjuk afas szamlat kell kiallitani, mar igen.

>> 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).
>
> Nekem 3 sztringmuveletem van:
> RawDoFmt: kb mint a sprintf, de mindig ugyanabbol a bufferbol veszi az
> adatokat, es a formazott szoveg is egy fix bufferbe kerul
> zprint: Z pointer altal cimzett flash teruletrol ir ki formazas nelkul a
> kijelzore, de a vezerlokaraktereket kezeli
> bprint: a formazo bufferbol ir ki
>
> Mi egyeb kell egy tobbnyelvu GUI-val kommunikalo eszkozhoz?
> A beszuro, kereso, stb.. fuggvenyek nem tudom mihez kellenek, ehhez pont
> nem. Mondjuk ha forditoprogramot irnek, vagy ilyesmi, akkor talan...
> Szoval probalkozz egy eletszerubb peldaval!!

Aha. Az eredeti problema a TC unciode kodolasi hibaja volt. Aztan a vita az 
e-mail-ek kodolasara terelodott. Ekkor te javasoltad, mint megoldast a 
Unicode helyett az escape-elt kodlap-valtasokat kellene hasznalni. Erre en 
leirtam, hogy a standard, es sok helyen hasznalt string-muveletek rendkivul 
bonyolulta valnak egy ilyen abrazolasban. Ezek utan, te leirod, hogy, leven 
te flash-ben tarolod a string-jeidet, ezert eletszerutlen, ha barki mas 
maskent teszi.

De, hogy konstruktiv legyek: a 'tobbnyelvu GUI-val kommunikalo eszkoz' 
feltetelezi a kommunkiaciot, azaz a ketiranyi adatcseret. Meghozza tobb 
nyelven, ezert 'tobbnyelvu'. A ket iranyu, tobb nyelvu adatcsere, pedig 
feltetelezi, forditasi idoben ismeretlen, tobb nyelvi string-ek 
feldolgozasat. Peldaul egy masik eszkoztol, peldaul egy felhasznalotol, 
peldaul az internetrol, peldaul egy fajlrendszerrol - fajlnev formajaban 
erkezo isemertlen string-ek feldolgozasat.

Hogy eletszeru peldat mondjak, a felhasznalo beirta a kereszt- es 
vezetek-nevet a betegnek az EKG berendezesbe (ilyeneket is fejlesztesz, ha 
jol tudom), mire az EKG a korhaz halozatan lekerei a kozponti adatbankbol a 
beteg biztositasi adatait es korelozmenyet. A vissza kapott adatokat aztan 
(biztos, ami bizots) osszeveti a bevitt kereszt- es vezetek-nevvel, majd 
szepen ranyomtatja a kikopott papirra, aminek a tartalmat persze vissza is 
menti a kozponti adatbankba kesobbi feldolgozas celjabol. Leven a berendezes 
modern, ezert a kommunkiacio a halozaton (titkositott) HTTP protokollon 
keresztul tortenik, es tegyuk fel, hogy minden rendszer (Unicode helyett) a 
te altalad javasolt string definiciokkal mukodik. Azert itt mar van jopar 
string-muvelet, nem?

Vagy lehet, hogy nem jol ertem, es te ugy gondoltad, hogy az altalad 
javasolt megoldas nem univerzalis, es csak azokban az esetekben hasznalando, 
ahol elonyos, maskor meg nem? No de pont te magyaraztad, hogy az ordog a 
kulonbozo abrazolasi modok kozotti konverzioban rejlik, es hogy a 
Unicode-dal az a baj, hogy oda-vissza kell konvertalgatni, es, hogy az ASCII 
meg azert jo, mert ott meg nem. Most akkor a te megoldasod miert jobb? Ezt 
speciel nem oldja meg, nem szabvanyos es dinamikus string-kezelesre nem 
hatekony (statikus string-eken meg nem sok kezelni valo van).

>> 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.
>
> Miert irna be az user barmit is??????
> Miert engednem meg, hogy minden karakter utan kodlapot valthasson???
> Talan tobbfajta nyelven van a neve, vagy mi?

Azert mert olyan nyelven van a neve (kinai az urge), amiben tobb, mint 255 
karakter lehet. Igy a kodlapod nem a nyelvet, hanem a nyelvben elofordulo 
karaktereknek csak egy reszet tudja leiirni, es nem garantalhato, hogy nem 
lesz akar minden karakter mas es mas kodlapon. De egyebkent is: azert akarod 
a worst-case esetre foglalni a buffert, mert ha nem igy teszed, akkor 
konnyen buffer-overflow hibat vetesz a bevitel feldolgozasa soran.

Hogy miert irna be barmit is a user?
- Mert a POS terminallal AFA-s szamlat kell adnia
- Mert a beteg adatait szeretne felvinni az EKG-ba
- Mert leletet gepel az EKG adatok melle
- Mert a jegy nevre szol (repulojegy pl.)
- Mert a munkaido-nyilvantarto adatokat kuld (egy megadhato) szervernek, 
ahol (SQL) adatbazisban tarolja az informaciokat
- Mert a riaszto (megadott e-mail cimre) levelet kuld minden esemenyrol - 
ugye tudod, hogy ma mar egy DNS entry is lehet Unicode?

A kavefozo, es a mikrosuto valoban nem nagyon igenyli a szoveges (nem 
numerikus) adatmegadast. Bar lattam mar eloadast olyan (penzbedobos) 
kavefozorol, amelyik leadta az aktualis feltoltottsegi allapotat interneten, 
hogy a karbantarto brigad meg tudja tervezni reggel, hogy melyik gepeket 
kell aznap felkeresni.

> Tudod, kavefozo, jegykiado automata, munkaido nyilvantarto, riaszto,
> mikrosuto, POS, stb... Vagy EKG, vagy barmi egyeb.

Vagy TC, vagy levelezo. Leven ezekrol a programokrol volt szo a thread-ben, 
es ezeknek a programoknak a problemaira (konkretan a levelzore) ajanlottad 
az otletedet.

> Tovabba: nem ketszer akkora lehet, hanem akar 4x. ESC, kodlap valtas,
> kodlap, karakter. Na es? Worst case jo sok helyet foglal, altalaban
> viszont fele annyit mint az unicode.

Igen, de sok esetben nem az altalanos, hanem a worst-case esetre kell 
buffert foglalnod. Pl: tudod, hogy egy fajlnevet fogsz kapni, tegyuk fel azt 
is, hogy 8.3-as megadasban, de, leven UNICODE particiorol jon a nev, nem 
tudod, hany (a te megoldasod szerinti) kodlapvaltas lesz benne. Leven a 
nevet tarolni szeretned, le kell foglalnod neki a buffert. Mekkorat 
foglalsz? Ha jol szamolunk, akkor 32+12 byteot minimum. Hogy mindezt miert 
akarod tarolni? Mert mondjuk MP3 lejatszot csinalsz, ami USB-n csatlakozik 
egy PC-hez, es ott normal HDD-nek lattszik. Nincs rahatasod arra, hogy a 
fajlok milyen neven kerulnek ra, kezelned kell tudni oket. Es, ha megengeded 
hosszu fajlnevek hasznalatat, es teszem azt tobb formatumot is tamogatsz, 
amiket a kiterjesztes szerint kulonboztetsz meg, akkor maris meg kell 
keresned a 'string utolso pontja utani reszt' es azt osszehasonlitani elore 
definialt string-ekkel.

Vagy (szinten MP3 lejatszo), ahol a fajlokban talalhato informaciok alapjan 
akarsz ABC-sorrendbe rendezni, vagy szurni dolokat. Pl. egy eloado szamait 
kilistazni. Ehhez is string-eket kell osszehasonlitanod, ami a te abrazolasi 
modszeredben nem egyszeru feladat.

Vagy ez se eleg eletszeru pelda? Vagy nem elegge 'beagyazott' alkalmazas?

Amugy meg egy megjegyzes: leven nem koveteled meg, hogy az esc utan legalabb 
egy karakter alljon, ezert akar egy nulla karaktert tartalmazo string is 
tettszolegesen hosszu lehet:

ESC, kodlap valtas, kodlap, ESC, kodlap valtas, kodlap, stb stb.

Persze erre lehet azt mondani, hogy ez elkerulheto, es ez igaz is, csak meg 
tovabb bonyolitja a string-manipulalo fuggvenyeket.

Tovabbra se gyoztel meg arrol, hogy az altalad javasolt megoldas alkalmas 
altalanos string-abrazolasi modszernek, es mint ilyen a Unicode levaltasara. 
Ha nem erre gondoltal, akkor viszont nem ertem, miert hoztad fel peldakent a 
levelezes kodolasi problemainak targyalasakor.

Udv,
Tantos Andras




More information about the Elektro mailing list