Ékezetes szöveg konvertálása UNIX-ban! Please help me!

Fórumok

Ékezetes szöveg konvertálása UNIX-ban! Please help me!

Hozzászólások

Sziasztok!

Kezdő unix-os vagyok, és egy számomra megoldatlan problémára keresek megoldást.
Remélem jó helyre írtam, és remélem valaki tud segíteni. :)

Mondom mi a feladat:
Van egy windows-os txt- állományom tele ékezetes szavakkal.
Ezt unixba egy ékezet nélküli fájllá kellen konvertálnom.
Havi rendszerességgel jön a fájl, és persze scriptbe kell a megoldás. :)

Van 5letetek? Fél napom már ráment a "tr" -el próbálkozni, de nem jött össze.

A probléma az UTF8-as karakter készletre vezethető vissza, mivel unix alatt nem tudok ékezetes betüket bevinni. :(
Nekem ez kellene:
pl. tr "áéí" "aei" <text1 > text2

Valahogy pipeolni kellene pl. cat-el, de nem tudom hogyan. Az első halmazba kellene tudatni az ékezetes betüket. :)

Bocsi, ha kissé értelmetlen így sikerült megfogalmazni. :) Aki ért hozzá az szerintem biztos érti mivel küzdök itt. :)

5leteiteket, segítségeteket előre is köszönöm!

Szerintem a tr helyett inkabb az iconv-vel probalkozz.
"man iconv" :)
es az "iconv --list"-re kijovo kodolasi nevek nemelyikehez van kulon man-oldal.
minden jot,
p.

[quote:f47d47d67c="Anonymous"]
pl. tr "áéí" "aei" <text1 > text2

''-k közé tedd, és ha unicode, akkor vigyázz, hogy télleg azokat a karaktereket cseréld, amit akasz...
én pl vi-ban kivágnám és másolnám az á, é karaktereket, és beilleszteném a shell scriptbe. egyébként jól csinálod:
cat ékezetes.txt |tr 'áéi' 'aei' >nemekezetes.txt

A problema megoldasa kb. 4-5 soros perl (vagy akarmi) script, meg a regexp minimalis ismerete. Kell hozza egy foreach fuggveny meg nemi gondolkodas :-)

A perl (de lehet barmi massal is, ami kezreall) ilyen szintu megtanulasa kb. fel orat vesz igenybe, de megeri, mert kedobb is nagyon-nagy hasznat veheted. Szerintem allj neki, csinald meg, hasznald az internetet (mindent meg lehet talani hozza) es hasznodra fog valni ha megoldod.

skuteos:

Köszi, utánnanézek. :)

vmiklos: ezt a vi-os dolgot nem értem. :)

" cat ékezetes.txt |tr 'áéi' 'aei' >nemekezetes.txt "

ezzel viszont az a baj, hogy cat ekezetes.txt utan nem enged pipeolni!

"broken pipe" - nemtom miért...

illetve tr 'áÁéÉíÍóÓöÖőŐúÚüÜűŰ' ezt nem tudom beírni sem parancssorba sem scriptből nem olvassa ki. :)
Ez nagy bajom...

Köszi trey a tippet!

Ma szerintem elég volt, majd holnap elpöcsölök rajta még. :)

Pedig olyan egyszerű lett volna. Nem hiszem el.... ;)

Ezen a tr-es uton nem lehet tovább menni ??? :)

[quote:d87777db41="Anonymous"]
"broken pipe" - nemtom miért...

illetve tr 'áÁéÉíÍóÓöÖőŐúÚüÜűŰ' ezt nem tudom beírni sem parancssorba sem scriptből nem olvassa ki. :)
Ez nagy bajom...

treynek igaza van, de én mondjuk bash mániás vagyok, itt érdemes olvasgatnod

egyébként, ha pipolni akarsz, akkor a >nemekezetes.txt-t hagyd el

[quote:36bf37edf4="Anonymous"]Van egy windows-os txt- állományom tele ékezetes szavakkal.

Milyen kódolással?

Nagy valószinűséggel DOS-os 852-es kódolású.

Van valami jó kis :idea: -ed? :lol:

üdv.

Bármilyen kodolás konvertálási feladatra elöször a recode programot érdemes megnézni. 281 db. különféle kodolás közt képes váltani. A másik jó dolog az a file parancs, ami megmondja egy file-ról, hogy milyen kodolásunak látszik.

anr:

Jó 5let volt ez a recode, de semmilyen progit nem telepíthetek a serverre.

a file parancs azt mondja hogy a file data file.

[quote:a7e0244943="Anonymous"]anr:

Jó 5let volt ez a recode, de semmilyen progit nem telepíthetek a serverre.

a file parancs azt mondja hogy a file data file.

Nem kell telepiteni, eleg ha letoltod, leforditod, Ha van fordito a UNIX-on (szokott), akkor ezzel nincs gond. Utana a leforditott binaris elindul onnan is, ahol van. Ehhez nem kell extra jogosultsag.
recode homepage:
ftp://ftp.iro.umontreal.ca/pub/recode/recode-3.6.tar.gz

OK, igazad van, ezt már le is töltöttem. Köszi a címet. :)

Nem igazán fordítottam még semmit idáig. :) De meg keresem rá a megfelelő embert. :)

[quote:7a0b4c2e82="anr"]Bármilyen kodolás konvertálási feladatra elöször a recode programot érdemes megnézni.

így próbáltam: echo "valami"|recode iso-8859-2
ok. megy. de unicode-ba hogy kódolok? uft-8-t unicode-t nem veszi

>így próbáltam: echo "valami"|recode iso-8859-2
>ok. megy. de unicode-ba hogy kódolok? uft-8-t unicode-t nem veszi

én iconv-t használok, ott pl. így megy:

iconv -f cp852 -t latin2

ez 852-es kódlapból (m$) csinál latin2-t, próbálkozhatsz utf8-cal, stb.

[quote:aab4434beb="vmiklos"][quote:aab4434beb="anr"]Bármilyen kodolás konvertálási feladatra elöször a recode programot érdemes megnézni.

így próbáltam: echo "valami"|recode iso-8859-2
ok. megy. de unicode-ba hogy kódolok? uft-8-t unicode-t nem veszi

echo "árvíztűrőtükörfúrógép" |recode ISO-8859-2..UTF-8
ismert kodolasok listaja: recode -l

[quote:88a359b974="doc"]
iconv -f cp852 -t latin2

köszi, műxik :D

Hi!

Szerintem legegyszerubb, ha elkuldod magat a filet valakinek, akar nekem is jo (e-mail cimem elvileg az adataim kozott van), es megprobaljuk +mondani, hogy milyen kodolasu. Azt gondolom, tudod, hogy a scriptbe ugyanolyan kodolasu karaktereket kell beirni, mint amilyen kodolasu file-t adsz a tr-nek...

By(t)e
TBS::Antiemes

Hi!

Kicsit keson irok, de van egy konwert nevu cucc is, ami kb. ugyanerre valo. Szinten tud egy csomo kodolast.

Asszem valami ilyesmi a szintaxis, hogy:
cat file | konwert cp437-cp1250 > file_ki.txt

By(t)e
TBS::Antiemes

Sok válasz eléggé elkanyarodott az eredeti kérdéstől...

Az iconv a libc része, így teljesen standard program, mindenhol lehet rá számítani. Különböző ékezet-szabványok között tud alakítgatni.

A recode egy ennél jóval többet tudó program, nemcsak ékezetkódolásokat ismer, hanem egyéb dolgokat is, mint például base64 meg csomó ilyesmi. Kevésbé standard program, egy más által telepített rendszeren könnyen lehet hogy nincs fent. A legutóbbi stabil verziója (3.6) új rendszereken bugosan viselkedik, sokszor félrekonvertál, a hibát cvs-ben javították, valamint a disztribek egy része javított csomagot szállít. (Az UHU 1.0-hoz utólag érhető el a javított csomag, az 1.1-ben eleve az van. A Mandrake is javított verziót szállít. A többi disztribre nem emlékszem, de találkoztam olyan ismert disztribbel, amelyik nemrég még hibás verziót adott, vszleg még most is...)

A konwert-ről még soha nem hallottam, így totál nem tekintem standard programnak.

Az iconv és a recode is használható mondjuk latin2-ről UTF-8-ra alakításra meg ilyesmi műveletekre, de kötve hiszem, hogy bármelyik képes lenne az ékezeteket leszedni egy szövegről, ugyanis az ékezetes szöveg ékezet nélküli ábrázolása nem tekinthető karakterkészletnek, karakterkódolásnak. Ha tévednék, javítsatok ki.

Az ékezet leszedésére a tr programot kéne használni, elvileg simán működnie kénte, többször csináltam már ilyet. Az eredeti problémafelvető embertől kérdés: milyen kódolású a bemenő ékezetes szöveg? (Latin2? UTF-8? egyéb?...) Milyen locale-t használ a terminál? (locale parancs mit ír ki?) Milyen disztrib, milyen shell, milyen szövegszerkesztő...? Kissé bizarr, hogy nem bír ékezeteket begépelni, emögött szinte biztos valami iszonyúan elszabott beállítás, vagy ősrégi avagy fapados disztrib áll. Normális disztrib default beállításaival az eredeti postban felvázolt tr-nek simán mennie kellene.

[quote:3ab92d056a="vmiklos"]így próbáltam: echo "valami"|recode iso-8859-2
ok. megy. de unicode-ba hogy kódolok? uft-8-t unicode-t nem veszi

Nyilván nem lehet csak valamiről konvertálni, és ugyanúgy vagy csak valamibe konvertálni sem. Valahányszor konvertálsz, mindig valamiről valamire konvertálsz.

Hi!

Ekezetmentesitesre tenyleg nem jo ez a modszer. Illetve semelyik eddigi modszer. Annak, hogy nem tud ekezeteket irni, console-on, bash alatt altalaban az az oka, hogy 3 kornyezeti valtozo nincs jol beallitva. Nem tudom, hogy mik ezek, csak azt, hogy 3 db van, es nalam jol be van allitva, csak az a baj, hogy most nincs a kozelben a gepem (mashonnan netezek), es nem tudom +mondani ezeket a beallitaokat.

Viszont ha shell script, akkor lenyeges az is, hogy milyen az editor.

Erdemes +nezni, hogy maga a terminal tudja-e az ekezeteket. Valami ilyesmit kellene kiprobalni, hogy cat. Csak igy uresen. Ha ebbe bele lehet irni az ekzeteket, akkor nincs semmi gond. Ha nem, akkor gond van.

Ha UTF-8 a szoveg, akkor elotte at kell konvertalni valami cp1250-re, vagy valami ilyesmire, es annak a cat file.txt | tr 'áé' 'ae' > ki.txt dolognak mennie kell.

By(t)e
TBS::Antiemes

csinaljunk contestet, hogy hany nyelven tudjuk megirni :-)

en vallalom a tcl-t meg a perl-t :-)

Hi!

OK. En vallalom a Videoton TVC BASIC-et, meg az x86 ASM-et.

By(t)e
TBS::Antiemes

Sziasztok!

Regisztráltam magam, én voltam a tegnapi vendég a problémájával. :D

Elöször is köszönöm szépen Mindenkinek sokat segítettetek, és úgy néz ki sikerült is megoldani a problémát. 8)

Természetesen én voltam a béna, de maradtam a tr-es megoldásnál.

A recode, konwert nem volt az igazi. Az iconvot megnéztem azzal lehetett volna még variálgatni de nem lett rá szükség.

A tisztánlátás kedvéért, egy SunOS 5.8-on dolgozom.
Azt a problémát, hogy ékezetes karaktereket nem tudok beütni (sem puttyon, sem VNC-n keresztül a terminal ablakokban sem) áthidalja a scriptes megoldás. Viszont tegnap valamiért ha a kis egysoros scriptembe csak egy ékezetet is írtam a pipe-olást nem fogadta el, és broken pipe al nem futott le. Nem tudom miért, de ma gond nélkül mükxik! :)

Szóval ennyi elég is volt:
cat text1.txt | tr "áÁéÉíÍóÓöÖőŐúÚüÜűŰ" "aAeEiIoOoOoOuUuUuU" > text2.txt

Most gond nélkül lefut. Viszont persze az én kis ékezetes fileom egy clipperes program kimenete ami dbf fileból lett konvertálva valami DOS-os txt-be. Na abból még nem tudom átcserélni az ékezeteket. :)
Többek között azért, mert nem tudom hogy hogyan deríthetem ki, hogy milyen kódolású ez a file.
Nem tudtok erre valami megoldást? Windowsba vagy progival vagy bármivel?
Van UltraEdit-32-m, abban lehet elég sokmindent sokmindenre konvertálgatni.

Na mármost azt vettem észre, ha ezzel nyitom meg a fileomat akkor csak úgy olvashatóak rendesen az ékezetek ha bepipálom a View menüpont alatt az OEM Character Set-et. Ez most mit jelent? Ti biztos tudjátok. Én nem.

Ezt a filomból másoltam: (Mosonmagyaróvár és Győrújbarát akar lenni)
MOSONMAGYARŕVµR -
GYŠRéJBARµT -

Hátha segít valakinek.

Szóval már nagyon közel állok a végéhez úgy érzem. Viszont lehet az lessz a vége, hogy windows-os formátumban kérem majd ezt a filet. Arról már le tudom venni az ékezeteket. :)

Üdv.

Hat, tessek megnezni, pl. az ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/{PC,WINDOWS}/*
file-okat, ott nev-kod alapjan be lehet azonositani.. Eselyes, a CP852 / CP1250, nomeg a CWI vagy CWI-II, de ezek nem is tudom hol talalhatok...

Zsiraf