A tegnapi nap folyamán elkészítettük a szombaton esedékes SDG bibliaismereti verseny kérdéseit, illetve tesztjét. Egy OOo.Calc táblázat egyetlen munkalapjának hat oszlopa a következő: kérdés, első válaszlehetőség, második válaszlehetőség, harmadik válaszlehetőség, helyes válasz, igehely. Idáig szép és jó a dolog, de mire ebből tesztlap lett...
Az első trükk a kérdések összekeverése volt: a kérdések sorrendje ne kövesse a Bibliában szereplő sorrendjüket, ugyanakkor természetesen a kérdésre adható válaszok ne veszítsék el kapcsolatukat a kérdéssel. Ezt még egyszerűen megoldottam: beszúrtam egy új oszlopot, amelybe véletlenszámokat töltöttem (a RAND() függvény segítségével), majd ezen oszlop szerint "rendeztem" a munkalapot.
A tesztlapnak a következőképpen kell kinéznie:
1. Hol írta János a Jelenések könyvét? a. Ciprus szigetén. b. Patmosz szigetén. c. Kréta szigetén.
Az egyes kérdések között lennie kell némi köznek, mindazáltal az egy kérdésre adott válaszok mindegyikének ugyanazon oldalon kell lennie, mint a kérdésnek magának.
Erre a feladatra ugyebár az ember az irodai csomagja körlevélvarázslóját (tündérét, koboldját, akármijét) használja, de nem egyszerű körlevelet nyomtat, hanem címjegyzéket/címkelistát. Ehhez készít egy sablont, mely egy oldalnyi kérdésnek/válasznak mutatja meg a helyét, majd ráereszti a körlevélkészítő összefésülő programrészét, végül átnézi az eredményt. No, ezzel már volt küzdés tisztességgel.
A sablon létrehozásakor szembesültem vele, hogy nem lehet a táblázatból csak úgy elővenni az A, B, C, D oszlopokat, azoknak mindenképp fejlécsorral kell kezdődniük ahhoz, hogy az első sor kérdése/válaszai ne vesszenek el. Létrehoztam tehát a sablont a következőképp:
_rekordszám_. _kérdés_ a. _a_válasz_ b. _b_válasz_ c. _c_válasz_ _új_rekord_
Ebből vagy nyolcat egymás alá tettem, hogy megteljen az oldal.
Na, ebből minden lett az összefésülés után, csak tesztlap nem.
1. A _rekordszám_ 11-től kb. 20-ig (vagy valami ilyesmi) ment az első oldalon, a második oldal tetején volt a 21-es (mivel az első oldalra is jutott olyan kérdés vagy válasz, ami nem fért el egy sorban), melyen túl a második oldal üres volt; a harmadik oldalon valami 36-tól kezdődően voltak kérdésszámok, stb.
2. Az összefésült dokumentum szerkesztésekor (mikor az ember még nem vágja pofán a körlevélkoboldot) számomra teljesen érthetetlen módon és kiszámíthatatlanul elvesztek az adatok: egyik pillanatban még ott van "minden" (lásd előző pont), a következő pillanatban egy villanás után meg már csak a sablon, a mezőnevek helyén az első(?) kérdéssel és válaszaival. Oké, ezt betudom annak, hogy már fáradt voltam - de akkor miért tudom reprodukálni?
3. Az olyan apróságokról már nem beszélek, hogy az egy kérdésre adandó válaszok néha nem egy oldalon voltak, vagy hasonlók.
Következő nekifutás: a táblázatot .csv fájlban mentettem el, a mezőhatárolót kitörölve, a mezőelválasztó helyére meg #
karaktert írva (ez ugyanis nem szerepel sem a kérdések, sem a válaszok szövegében). Ebből már egy egyszerű shellszkripttel generáltatni lehet egy .txt fájlt, amit OOo.Writerbe beszúrva már csak egy kis kézimunkára van szükség (a szkript csatolva).
Na, ez a "kis kézimunka" az alábbiakból állt.
1. A válaszok egy bekezdésbe hozása (a három válasz közötti két bekezdésvége-jel sorvégjelre cserélésével), egyforma bekezdésstílusúra állítása.
2. Minden kérdés "Címsor 2" bekezdésstílusúra állítása.
3. Az utolsó válasz és a következő kérdés közötti üres bekezdés eltávolítása.
4. A két felhasznált bekezdésstílus formázása.
Az egyforma bekezdésstílusra állítás egyszerű feladat: jelöld ki a teljes szöveget, majd állíts be a kijelölésre egy bekezdésstílust. Ezután végigmentem a kérdéseket tartalmazó bekezdéseken, melyeket egyesével kellett "Címsor 2" bekezdésstílusra állítani. Következő lépésként az üres bekezdéseket töröltem (keresés és csere reguláris kifejezéssel, cseréld a "^$" mintát "" mintára - azaz töröld ki az üres bekezdéseket). Ekkor jött a hidegzuhany: egyrészt az OOo.Writerben nem lehet sorvégjelre cserélni (nincs olyan karaktersorozat, mely a sorvégjelet jelképezné a "cseréld erre" dobozban), másrészt nem lehet bekezdésvég-jelre keresni (a keresés dobozban nincs olyan karaktersorozat/reguláris kifejezés, amely illeszkedne a "b." szövegre) - ebben mind a súgó, mind az freenode-os #Openoffice.org
csatorna lakói megerősítettek. Utóbbi helyen végül kaptam egy ötletet: mivel az .odt fájl valójában egy zip, benne egy content.xml-lel és mindenféle egyéb fájlokkal, ezért azt lehet OOo.Writeren kívülről is szerkeszteni - végül is egy egyszerű XML az egész... Ez többé-kevésbé igaz is: unzip
paranccsal kibontja az ember az .odt-t (talán át kell nevezni .zip-re, de ez már lényegtelen részletkérdés), az eredményen lefuttat két egyszerű parancsot, majd zip
paranccsal újracsomagolja az eredményt. Íme a két "egyszerű" parancs:
sed 's|</text:p><text:p text:style-name="Text_20_body">b. |<text:line-break/>b. |g' -i content.xml sed 's|</text:p><text:p text:style-name="Text_20_body">c. |<text:line-break/>c. |g' -i content.xml
Ugyan a Writer vinnyogni fog, hogy a fájl sérült, de helyreállítás után a lényeg stimmelni fog.
Így aztán szolid bő két óra küzdés után végre sikerült egy használható eredményt kicsiholni - igaz, ebben az OOo-nak volt a legkisebb érdeme.
Megjegyzés: könnyen elképzelhető, hogy a cikk nem az OOo, hanem az én használhatatlanságomról szól. Ha valaki ezt tudná bizonyítani, kérem, tegye meg azáltal, hogy egy részletes, lépésről lépésre szóló leírást készít számomra, amelynek alapján a fenti "bonyolult" feladatot meg tudom oldani jövőre az akkor aktuális verziójú (de legalább 3.0.1-es, lévén most azzal harcoltam) OOo-val, (Frugalware) Linuxon.