> Hi Coderek!
>
> Irok egy progit es fontos lenne belerakni az abc rendezest.
> Meg is irtam, aztan jott a hidegzuhany:
> A magyar betuk!!!
> 3 oran keresztul szenvedtem a sima, egyszeru nevsorba rendezesen,
> aztan tessek, ASCII tabla rulez, a gyonyoru eljarasomat! :(
> Van valami otletetek, hogy hogyan oldjam meg a problemat???
> Tulajdonkeppen egy fileban, a rekordokat akarom sorrendbe rendezni,
> a 'nev' mezo alapjan...
> Csak ez a rohadt magzar billentzuyet... :)))))
Hasznaljal helyettesito kodtablat! Az a legjobb megoldas.
Egy 256byte elemu tomb, amiben rendezed a karaktereket.
Pl egy kalap ala veszed a: a,A,a',A' karaktereket stb.
Eloszor a beolvasott string osszes karakteret lecsereled
a helyettesito tabla kodjaval, majd ezzel feltetelezgetsz tovabb.
Gyakorlatilag az eddigi algoritmusodba csak egy kis modositast
kell csinalnod es kesz!
Const A437_Magyar_Helyettesito_Tomb:array[0..255]of byte=(
$00,$01,$02,$03,$04,$05,$06,$07, $08,$09,$0a,$0b,$0c,$0d,$0e,$0f,
$10,$11,$12,$13,$14,$15,$16,$17, $18,$19,$1a,$1b,$1c,$1d,$1e,$1f,
$20,$21,$22,$23,$24,$25,$26,$27, $28,$29,$2a,$2b,$2c,$2d,$2e,$2f,
$30,$31,$32,$33,$34,$35,$36,$37, $38,$39,$3a,$3b,$3c,$3d,$3e,$3f,
$40,$61,$62,$63,$64,$65,$66,$67, $68,$69,$6a,$6b,$6c,$6d,$6e,$6f,
$70,$71,$72,$73,$74,$75,$76,$77, $78,$79,$7a,$7b,$7b,$7b,$7b,$7b,
$7b,$61,$62,$63,$64,$65,$66,$67, $68,$69,$6a,$6b,$6c,$6d,$6e,$6f,
$70,$71,$72,$73,$74,$75,$76,$77, $78,$79,$7a,$7b,$7c,$7d,$7e,$7f,
$80,$75,$65,$83,$84,$85,$86,$87, $88,$89,$8a,$8b,$8c,$8d,$8e,$61,
$65,$91,$92,$93,$6f,$95,$96,$97, $98,$6f,$75,$9b,$9c,$9d,$9e,$9f,
$61,$69,$6f,$75,$a4,$a5,$a6,$a7, $a8,$a9,$aa,$ab,$ac,$ad,$ae,$af,
$b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7, $b8,$b9,$ba,$bb,$bc,$bd,$be,$bf,
$c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7, $c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf,
$d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7, $d8,$d9,$da,$db,$dc,$dd,$de,$df,
$e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7, $e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef,
$f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7, $f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff);
> Kosz,
> TCHeeCo
--
.,--/'{[< Tcc of Inquisition >]}'\--,.
|
On 2 Nov 00, at 14:43, wrote:
> Hello!
>
> Hat persze sokminden fugghet attol, hogy mit is ertesz abc-be
> rendezesen... Ugyanis, ha minden jol remlik, abc rendezesnel nem
> kulonboztetjuk meg az ekezetes es nem ekezetes ill. kis- es
> nagybetuket.
Epp ilyesmit akartam en is mondani :)
Szoval a tobbi javasolt modszer mind arra ment ki, hogy aábcdeé
stb. sorrendbe rakja a betuket ascii kod helyett, es az bizony nem
az igazi.
> hogy szepen az ekezetes betuket kicsereled:
> ...
> a'rvi'ztu=ro= tu:ko:rfu'ro'ge'p
>
> legalabbis ha jol nezem igy hirtelen, szoval eszerint a szabaly
> szerint atcsereled a betuket, es alkalmazod az eddigi
> programodat....
Vagyis azt mondod, hogy az ekezetes betuket kicsereled ket
kodra? Az mar majdnem jo, de meg mindig nem eleg. En azt
csinalnam (ha komolyan akarnek abc sorrendbe rendezni -- nem
teljesen komolyan lehet egyszerubben is, lasd majd a vegen), hogy
a 8 bites kodbol 16 biteset csinalnek ugy, hogy az elso 8 bit az
ekezet nelkuli betu, a masodik pedig sima betuknel egy szokoz,
ekezeteseknel pedig egy ekezetkod (mint ahogy te is csinalnad).
vagyis a -> [a ], á -> [a'], stb. (Egyebkent a Recognita belso kodjai
pont ezek :)
Raadasul a kodolasba bejon meg a kettagu, haromtagu
massalhangzok problemaja is (ha komolyan akarja csinalni az
ember a sorbarendezest), ugyanis azokat ugy kell venni, mintha
egy betu lenne. Vagyis a sorrend b,c,cs,d stb. Tehat a 'zúdul'
elobb van, mint a 'zsalu', stb. Ehhez a cs,dz,dzs,gy,ly,ny,sz,ty,zs
betusorozatokbol is egy 16 bites kodot kell(ene) csinalni eloszor,
odafigyelve persze ezek hosszu valtozataira is ("hosszú" -> [h ][o ]
[sz][sz][u']), hiszen pl. a "kassza" korabban kellene legyen, mint a
"kaszt", viszont kesobben, mint a "kasza". Es ha megint csak
komolyan akarjuk csinalni, akkor mar messzire vezet az ugy, mert
a "kisszeru"-ben pl. nem hosszu [sz][sz] van, hanem [s ][sz], meg
a "kézszőr"-ben sincs [zs], nem is beszelve a "kiszárthelyi"-rol
meg "kiszh"-rol, mar ha egybe kell irni :)
Viszont siman a kodolas nem oldja meg a gondokat. A kisbetu-
nagybetu kozott nincs kulonbseg, de ez meg konnyen megy, az
elso 8 bitekhez hexa 20-at kell or-olni hasonlitas elott. Aztan a
szokozoket es esetleges kotojeleket sem kell figyelembe venni
("Kiss József" elvileg korábban van, mint "Kis Zoltán"), ez is
konnyen megy: ki kell oket hagyni. Ekezetes betuk eseteben a 16
bites kod masodik byte-jat (vagyis az ekezetet) altalaban nem kell
figyelembe venni (ekezetes betu allhat korabban is, mint az
ekezettelen parja: "író" korabban van, mint az "iroda", de az
"íródiák" mar kesobb); csak akkor erdekes az ekezet, ha mas
kulonbseg nincs a ket szo kozott ("Eger", "egér", "éger" a
sorrend). A tobbtagu massalhangzok kodjanal viszont mar mindig
erdekes mindket byte, mert ott hatarozott b,c,cs,d,dz,dzs stb. a
sorrend, nem pedig azonossag van az azonos betuvel kezdodo
massalhangzok kozott (szemben az ekezetes betukkel, amik
azonosnak veendoek az ekezettelennel, a fentebb irt "Eger" stb.
kiveteltol eltekintve).
Nos, ezek a fo szabalyok, elegge bonyolult eredmenyre vezetnek.
Viszont megengedi a magyar helyesirasi szabalyzat, hogy
bizonyos esetekben ettol elteroen tortenjen a sorbarendezes. Pl.
ha magyar es idegen nyelvu szavak is vannak a sorbarendezettek
kozott, akkor lehet hasznalni a latin (angol) abc sorrendjet ugy,
hogy a tobbjegyu massalhangzok minden jegye kulon betunek
szamithat, es az ekezeteket egyaltalan nem vesszuk figyelembe.
Szerintem ezt a szabalyt nyugodtan lehet egy egyszerubb project-
ben alkalmazni a tiszta magyar esetre is, ugyhogy egy egyszeru
megoldas adodhat:
A string osszehasonlito rutin (amit pl. a buborekrendezes, vagy a
quick sort (C-ben van qsort rutin, biztos van pascalhoz is) hivogat
majd) mindket stringgel tegye azt, hogy konvertalja at oket csupa
kisbeture es ekezet nelkulire (tehat 'A'->'a', 'á'->'a', 'Á'->'a', stb.),
aztan ezeket a konvertalt stringeket hasonlitsa ossze. A vegen az
atkonvertalt stringeket el lehet dobni, vagy a nagyobb hatekonysag
celjabol kulon adminisztralassal meg is lehet jegyezni, hogy ha
meg egyszer ugyanazt a sringet kell valamivel hasonlitani, ne
kelljen ujrakonvertalni.
István
.
ugyanazt a sringet kell valamivel hasonlitani, ne
kelljen ujrakonvertalni.
István
.
|