Szerkesztő:Bináris/Augiász istállója
Augiász istállója, avagy mechanikus feladatok megoldása Excellel
[szerkesztés]Ezen a lapon arra szeretnék példákat mutatni, hogy az Excel függvényeit (többnyire a szövegkezelő függvényeket) használva hogyan lehet nagy tömegű, formális szabályokon alapuló cseréket végezni a Wikipédiában. Ezek némelyikéhez botot is használtam, másokhoz nincs szükség segédeszközre (ezt a szakaszcímekben jelzem, hogy a bottal nem rendelkezők se ijedjenek meg). A cikkben leírtak alkalmazása az Excel középszintű ismeretét tételezi fel, tehát kell tudni egymásba ágyazott függvényeket használni, illetve a megfelelő függvényt súgó vagy varázsló segítségével önállóan megtalálni. Ismerni kell a $ jel használatát is a hivatkozásokban. Kis rutinnal egy-egy újabb feladat megoldása pár perces munkává szelídül. Most már a fantáziádon múlik, hogy tudnád te is alkalmazni az itt látható ötleteket! Kérlek, vedd figyelembe, hogy az itt látható megoldások nem az örökkévalóságnak készültek, hanem a gyorsaság volt a fő szempont (a naptár kivételével el sem mentettem őket), ezért lehet, hogy helyenként találnál elegánsabb kivitelezési lehetőséget is.
Sok hasonló csere egy szócikken belül | Sok lap egyforma szerkesztése |
---|---|
Az Excel önmagában használható. | Excellel készíthetjük elő egy bot futtatását. |
A szerkesztés könnyen visszavonható, ezért viszonylag veszélytelenül kísérletezhetsz. | A bot használatánál járj el körültekintően, és mindig végezz próbaszerkesztést! |
Hasznos trükkök
[szerkesztés]Az irányított beillesztés
[szerkesztés]Bevezetésként ismerkedjünk meg az Excel egy kevesek által ismert funkciójával, az irányított beillesztéssel. A függvények használatával olyan értékeket kapunk, amelyek csak a képernyőn látszanak a kívánt értéknek, de ha vágólapra tennénk, sorba rendeznénk, feldolgoznánk őket, időnként beleütközünk abba, hogy az Excel nem a kapott értékekkel, hanem a cellában levő képletekkel dolgozik, és ezért nem a kívánt eredményt kapjuk.
A beillesztés menete:
- Kijelöljük és a szokott módon (például ctrl C) vágólapra tesszük a cellatartományt (általában egy oszlopot).
- Nem végezzük el a szokott módon a beillesztést. :-)
- A célterület első cellájára állva a Szerkesztés menüből kiválasztjuk az irányított beillesztést, majd ezen belül az Értéket rádiógombot jelöljük be. (Néha hasznos lehet még a Transzponálás jelölőnégyzet is, ha sorból oszlopot vagy oszlopból sort kell csinálnunk.)
- Az Excel az irányított beillesztést nem érzékeli beillesztésként, ezért a másolásra kijelölt rész körül továbbra is menetelnek a feketehangyák. Ezt az escape-pel szüntessük meg.
A copycon-módszer
[szerkesztés]A pywikipedia-bot parancssori ablakban fut, amely Windows XP-környezetben egy DOS-ablaknak felel meg. Bár ez már nem a régi DOS, csak egy virtuális környezet a Windowsban, de a karakterkódolási eltérések továbbra is megmaradtak. Erre itt derült fény, a harmadik feladat kapcsán. A probléma olyankor merülhet fel, ha az Excellel készítünk elő egy batch file-t a robot számára, és ezt ékezetproblémák miatt nem tudjuk a szokott eszközökkel, például jegyzettömbbel elmenteni. Ilyenkor jön elő a jó öreg DOS-os tapasztalat. :-) A megoldás, ahogy ennek a feladatnak a kapcsán leírtam:
- A pywiki könyvtáradban nyitsz egy parancssort (Start/futtatás és cmd).
- Begépeled, hogy
copy con csere.bat
, ezután csak a kurzort látod, mintha lefagyott volna. - Vágólapra teszed a listámat, az első változatban, amelyik nem unicode-os, és beilleszted a cmd ablakába. Ez nem megy ctrl v-vel, hanem jobb egérgombbal pont odakattintva, vagy az ablak bal felső sarkában a vezérlő menüben a szerkesztésnél.
- Megnyomod a ctrl z-t. Megjelenik a képernyőn, hogy ^Z.
- Entert nyomsz.
Első feladat: A Wikipédia évfordulónaptárának előkészítése (bot nélkül)
[szerkesztés]Kevés lélekölőbb feladat volna, mint kézzel megcsinálni az összes hét fejlécét az évfordulókban, vagy fogni az előző évit, kitörölni az összes tartalmat a címek közül szakaszonként, és ezután egyenként átírni az összes hét kezdő- és záródátumát. De január 4-én, pénteken már erősen esedékessé vált a dolog, mert vasárnap lejárt az előző évről maradt utolsó heti gyűjtemény, és péntek délben még egy fia 2008-as évforduló nem volt beírva! Nem is lett volna hova. :-) Tipikusan nem kézi munkára való feladat, mikor számítógépen dolgozunk... Az Excel azért nagyon hatékony erre, mert
- képes számként kezelni a dátumokat, számtani műveleteket végezni velük és könnyen oda-vissza alakítani a két formát;
- automatikusan kezeli a szökőéveket is, nem kell külön foglalkozni velük;
- szövegkezelő függvényeivel hamar elkészíthetjük a kívánt címsort.
Először valamilyen programozási nyelvre gondoltam, de az Excel sokkal egyszerűbb megoldásnak látszott. Mivel a naptárban felül van az utolsó hét, és egyszerűbb volt az előző évi záródátumtól elindulni, ezért szokatlan módon alulról felfelé épül a táblázat, vagyis nem az előző, hanem a következő cellára hivatkozunk. Ez nem okoz semmilyen problémát. A szakaszcímek között üres sorokat is kell hagynunk, amire a sorozat kitöltésekor tekintettel kell lenni (a kijelölésbe vegyük bele az üres sort is).
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | kezd_dátum | kezd_dátum_szöveg | végdátum | végdátum_szöveg | ||
2 | 53 | december 27. | december 27 | január 2. | . – január 2. | == 53. hét: december 27. – január 2. == |
3 | ||||||
4 | 52 | december 20. | december 20 | december 26. | –26. | == 52. hét: december 20–26. == |
… | ||||||
105 | ||||||
106 | 1 | december 28. | december 28 | január 3. | . – január 3. | == 1. hét: december 28. – január 3. == |
107 | '''Ez a hét megegyezik az előző év utolsó hetével. Kérlek, ne szerkeszd! A hét évfordulóit az előző év lapjáról kell idemásolni az archiváláskor.''' | |||||
108 | 2009.12.21 | 2009.12.27 |
A képen a táblázat teteje és alja látható. Az egésznek a lelke a B108 és a D108 cella, ahol a 0. hét hétfőjét és vasárnapját kell feltüntetni, ebből számoljuk ki a többit. (Természetesen elég a B108-at kitölteni, ha a D108-ba az =B108+6
képletet írjuk.) Teljes dátumot írjunk ide, hogy az évszámot is figyelembe tudja venni az Excel! Jelen esetben, mivel 2010 első hete megegyezik 2009 utolsó (53.) hetével, ezért a 0. hét a 2009-es év 52. hete lesz, amelynek a hétfője és vasárnapja már az előző évi táblázatban megvan.
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | kezd_dátum | kezd_dátum_szöveg | végdátum | végdátum_szöveg | ||
2 | 53 | =B4+7 | =SZÖVEG(B2;"hhhh n") | =D4+7 | =HA(HÓNAP(D2)=HÓNAP(B2);SZÖVEG(D2;"–n."); SZÖVEG(D2;". – hhhh n.")) | ="== "&SZÖVEG(A2;"0.")&" hét: "&C2&E2&" ==" |
Ha nem elég nagy a monitorod, akkor ebben a táblázatban lélekben kissé összetörve láthatóak a képletek, de egy kis frissítő vasalás után ismét a régi fényükben tündökölnek majd!
Magyarázatok:
- Az A oszlopban egyszerűen a hét sorszáma van, ebből begépelünk kettőt, aztán – ügyelve az üres sorok kijelölésére – egyszerűen a szokott módon kitöltjük a sorozatot.
- A B és D oszlop képlete a kezdők számára is érthető: mindegyik a kettővel lejjebbi cella értékéhez ad hetet, mígnem a 106. sorban az 1. hét képlete a 108. sorban rögzített 0. heti dátumokra hivatkozik. Itt használjuk ki, hogy az Excel a dátumokat számként kezeli.
- C oszlop: itt a SZÖVEG függvény segítségével szöveggé alakítjuk a dátumot. (Ne feledjük, hogy a B oszlopban még szám típusa volt, dátumként formázva – ebből szöveget kell készítenünk, hogy össze lehessen fűzni a többi szöveggel.) Figyeljük meg, hogy a szövegbe nem kerül bele sem az évszám, sem a záró pont, amelyre vagy szükség lesz, vagy nem.
- Az E oszlop képlete a legbonyolultabb, ugyanis két esetet kell megkülönböztetnünk:
- Ha a heti vasárnap ugyanabban a hónapban van, mint a hétfő, akkor csak a napot kell kiírnunk. Ekkor nem kell pont a kezdődátum után, és a nagykötőjel előtt-után sem kell szóköz.
- Ha nem, akkor kitesszük a pontot, majd a nagykötőjelet két szóköz között, végül pedig a záródátumot a hónap nevével együtt. Az eredmény a fenti táblázat E oszlopában látható.
- A HA függvény tartozékainak megvastagításával igyekeztem segíteni a megértést. Egy szóközt is tettem a képletbe, hogy a kisebb felbontású monitorokról se lógjon ki keresztben a táblázat.
- Az F oszlopban már csak learatjuk az eddigi tevékenységünk gyümölcseit, azaz összerakjuk a kész címsor darabjait: a címsorhoz tartozó egyenlőségjeleket (ne keverjük össze a képlet egyenlőségjelével!), a hét sorszámát az A oszlopból szövegalakban (a "0." itt az egész számkénti megjelenítés kódja), valamint a kezdő- és a végdátum szövegalakját. Az & jelre gyakran lesz szükségünk más feladatokban is: ezzel lehet szövegdarabokat összefűzni, ha nem akarjuk a kissé körülményes ÖSSZEFŰZ függvényt használni.
- Most erősen megmarkoljuk az egeret, és az F2:F107 tartományt meghatott arccal a Wikipédiába másoljuk. Kis kozmetikázás után lehet is menteni. Az eredmény: Wikipédia:Évfordulók/2010. Egy ideig még olyan szépen néz ki, ahogy én hagytam, aztán később ezek a piszok wikipédisták nyilván összegányolják majd holmi adatokkal. :-)
- A hab a tortán: ha most a 2011-es naptárt is meg akarom csinálni, akkor csak a B108 cellát kell átírni, és lehet is azonnal másolni újból. Mivel ezzel a módszerrel csak az első naptár elkészítése munka, ezért lehet előredolgozni, és 2009 elején talán nem kerülünk majd olyan helyzetbe, hogy az utolsó vasárnap kell kapkodva elkezdeni a feltöltést.
Második feladat: 81 darab egyformán „csonkok” névre hallgató sor olvashatóvá tétele az interwiki nélküli cikkek listájában (bot nélkül)
[szerkesztés]Valami rossz helyettesítés folytán az összes csonkok (akármilyen téma)
formájú kategória nevéből eltűnt a zárójeles rész, és csak az egeret a cím fölé tolva volt látható, melyik kategóriáról van szó. Szerettem volna visszaalakítani őket. A megoldás:
- Megnyitjuk szerkesztésre a cikket, és kivágjuk a hibás részt, mint az almából. :-) (Csak oda nem tesszük vissza javítás után.) Beillesztjük az Excelbe.
- A mellette levő oszlopokban megkeressük, hányadik helyen találhatóak a (, ) és a ]] szövegrészek.
- Egy újabb oszlopban a HELYETTE függvénnyel kicseréljük a záró ]] karaktereket a két kerek zárójel közötti szövegre a zárójelekkel együtt, előtte egy szóközzel, a végén a ]] jelekkel.
- Vágólappal visszatesszük a szerkesztőablakba, és kijelölés közben leolvassuk az utolsó sor számát, hogy örülhessünk, milyen sok cserét végeztünk egy mozdulattal.
Harmadik feladat: tömeges szövegcsere egy kategóriában bottal
[szerkesztés]Egy sor regény szócikkében ki kellett cserélni a „Története” szakaszcímet a „Cselekménye” szövegre. Szerencsére mindegyik a Regények kategóriában vagy alkategóriáiban volt, és nemrég módosították őket. A megoldás három eszközt használ:
- CatScan
- Excel
- pywikipedia bot (replace.py)
A Wikipédia:Hogyan használd a kategóriákat#Külső eszközök útmutatóban találtam rá a CatScanre, amellyel a megadott kategóriában és alkategóriáiban levő lapokat lehet listázni, jelen esetben az elmúlt 48 órában módosítottakra szűkítve a keresést. Sajnos ez az eszköz nem mindig működik. Ha igen, akkor választhatjuk a CSV formátumú eredménylistát is, amely köztudottan közel áll az Excel szívéhez. A kapott listából az Excel szövegkezelő eszközeivel lehetett legyártani a batch file-t. (Íme.) Ezt a szócikkek címében levő ékezetek miatt végül a copycon-módszerrel lehetett elmenteni a csere.bat állományba, amelynek futása közben derült ki, hogy a hosszú ő betűt tartalmazó szócikkekre még mindig nem működik, de szerencsére ezekből csak pár darab volt.
Negyedik feladat: harmincöt rosszul elnevezett sablon átnevezése bottal
[szerkesztés]A sablonok idegesítően ortopéd nevet viseltek. Szerencsére mindannyian a Természetes számok sablonjai kategóriában helyezkednek el, és hab a tortán, hogy kategóriabeli rendezés híján kivétel nélkül az S betűnél. Tehát könnyű volt az összes sablonnevet az Excel munkalap A oszlopába másolni. Hogy a linkeket eltávolítsam, egyszerűen lemásoltam az A oszlop tartalmát a B-be, mert ez volt a leggyorsabb.
A szabály a fenti linken látható: „asok” helyett „sok”, „esek” helyett „sek” a toldalék, és van néhány olyan is, amit nem kell bántani. A megoldás:
- Először a Ctrl-t lenyomva végigkattintgatjuk azokat a sorokat, ahol jó nevű sablon van, és töröljük ezeket. (Sajnos vagy szerencsére ezekből van kevesebb. Ha sok lenne, ezt is lehetne automatizálni.) Most már csak az átnevezendők maradtak. Kiszíneztem azt a párat, ahol nem elég a mechanikus javítás (140-sok helyett 140-esek fog kelleni, a 0-sok helyett pedig 0-9, mert ezek az átlagnál is rosszabbul vannak elnevezve).
- A következő oszlopban a HELYETTE függvény alkalmazásával asokra javítjuk a sok szövegrészt, majd egy másik oszlopban ebből az oszlopból (nem az eredetiből) ugyanezzel a függvénnyel esekre cseréljük a seket. Ez a két lépés egyben is elvégezhető lenne összetett függvénnyel, ha az eleganciára törekednénk, de most a gyorsaság a lényeg, a táblázat úgysem fog megmaradni.) Irányított beillesztéssel az E oszlopba másoltam a kapott értékeket, hogy a kézi javításokat el lehessen végezni. Ezután kézzel kijavítottam a három kiszínezett sor képletét.
- A pywikipedia-bot movepages.py modulját fogjuk használni az átnevezéshez. Ennek van egy -file paramétere is, de annak nincs megadva a szintaxisa, és nem tudtam kikísérletezni, ezért minden sorhoz külön fogom elindítani a botot, ami nem több munka, csak kevésbé elegáns. Készítettem róla egy másolatot mp.py néven, hogy átírhassam a szerkesztési összefoglalót, és ne az eredetit bolygassam. Most tehát a B oszlopban vannak az eredeti sablonnevek, az E oszloban az újak, és a mp.py segítségével kell az átnevezést elvégezni.
- A G oszlopba a következő képlet kerül:
="mp.py -from:"&KARAKTER(34)&B1&KARAKTER(34)&" -to:"&KARAKTER(34)&E1&KARAKTER(34)
- Figyeljük meg, hogy az idézőjelet a KARAKTER(34) szöveggel kell helyettesíteni, mivel idézőjelen belül van. Az idézőjelre azért van szükség, mert a sablonok nevében szóköz van. Az eredmény első néhány sora:
mp.py -from:"Sablon:Számok (0-sok)" -to:"Sablon:Számok (0-9)"
mp.py -from:"Sablon:Számok (10-sek)" -to:"Sablon:Számok (10-esek)"
mp.py -from:"Sablon:Számok (100-sok)" -to:"Sablon:Számok (100-asok)"
mp.py -from:"Sablon:Számok (1000-sek)" -to:"Sablon:Számok (1000-esek)"
mp.py -from:"Sablon:Számok (110-sek)" -to:"Sablon:Számok (110-esek)"
- A pywikipedia könyvtárában elindítunk egy parancssori ablakot, és az ékezetek miatt a copycon-módszerrel létrehozzuk az m.bat állományt, amelybe vágólappal átmásoljuk a G oszlop tartalmát. (Szükség esetén ezt is lemásolhatjuk előtte egy másik oszlopba az irányított beillesztéssel.) Fontos: először csak külön az első sort illesztjük be, és próbafuttatást végzünk! Ez minden nagyobb robotmunka előtt szükséges, mert nagy tömegű hibás szerkesztést visszaállítani több munka lehet, mint amit meg akartunk takarítani!
- A sikeres próba után egyszerűen beírjuk az m parancsot, és elmegyünk reggelizni. Ez azért kell, hogy maradjon energiánk a Wikipédia további szerkesztésére is, amiben az éhenhalás erőst akadályozna.
Mindezt végigcsinálni persze lényegesen kevesebb idő, mint leírni – a reggelizés kivételével.
- megjegyzés: A feladat közvetenül Pythonban is megoldható lenne, csak én jobban értek az Excelhez, és így sokkal kevesebb időbe került.
Ötödik feladat: kétszáz helyesírási hiba előkészítése javításra
[szerkesztés]A pywikibot replace.py moduljával akarunk javítani hibásan egybe-, illetve különírt szavakat. Ehhez be kell gépelni egy csomó összetett szót, illetve szókapcsolatot a helyesírási szótárból, amelyek az előtag szerinti bokrokban találhatóak, és ezekből a lenti táblázat G oszlopában látható sorokat előállítani a fixes.py számára. (A replace.py a fixes.py-ból veszi az előre meghatározott szövegcserék sablonjait, és ilyen alakú sorokat keres.) A munka természetesen gépies és lélektelen, tehát vagy programozást, vagy Excelt igényel. (A programozás az Excellel megoldható feladatoknak általános alternatívája, de ez a cikk nem arról szól.)
A B oszlopba beírjuk a szavakat a helyes alakjukban; ez a szavak egy részénél egybe van írva, más részénél meg külön. Mellé az A oszlopba beírjuk az előtagot. Ez nem nagy munka, mert a szavakat bokrokból vesszük, tehát alapvetően automatikus kitöltéssel (azaz egérhúzással) tölthető fel az oszlop. A további magyarázat az alsó táblázat alatt található.
A | B | C | D | E | F | G | |
---|---|---|---|---|---|---|---|
1 | Szóköz helye |
Szókezdet | Hibás alak | Helyes alak | Javítósor | ||
2 | nagy | nagy számban | 5 | (n|N)agy | (n|N)agyszámban | \1agy számban | (ur'(n|N)agyszámban', ur'\1agy számban'), |
3 | nagy | nagyszámú | 0 | (n|N)agy | (n|N)agy számú | \1agyszámú | (ur'(n|N)agy számú', ur'\1agyszámú'), |
… | |||||||
99 | más | más szóval | 4 | (m|M)ás | (m|M)ásszóval | \1ás szóval | (ur'(m|M)ásszóval', ur'\1ás szóval'), |
A | B | C | D | E | F | G | |
---|---|---|---|---|---|---|---|
1 | Szóköz helye |
Szókezdet | Hibás alak | Helyes alak | Javítósor | ||
2 | =HA(HIBÁS(SZÖVEG.KERES(" ";B2));0;SZÖVEG.KERES(" ";B2)) | ="("&BAL(A2;1)&"|"&NAGYBETŰS(BAL(A2;1))&")"&CSERE(A2;1;1;"") | =HA(C2=0;HELYETTE(B2;A2;D2&" ";1);CSERE(B2;1;C2;D2)) | =CSERE(B2;1;1;"\1") | =ÖSSZEFŰZ(" (ur'";E2;"', ur'";F2;"'),") |
Mint látható, az A és a B oszlop üres, hiszen oda kézzel írjuk be az adatokat. A többi oszlop képleteitől sem kell megijedni, még ha elsőre itt bonyolultnak látszanak is, hiszen a varázsló segít az elkészítésükben. A képletek bogarászása előtt érdemes a felső táblázatban az eredményt megtekinteni.
- Célszerű meghatározni a szóköz helyét a kifejezés feldolgozásához, ezt végezzük el a C oszlopban a SZÖVEG.KERES függvénnyel. Sajnos ez a függvény (az Excel 2000-es verziójában) nem úgy működik, ahogy elvárnánk, hogy nullát adjon vissza, ha nincs szóköz a beírt szövegben, ezért a HA függvénnyel külön kezelni kell ezt az esetet, és így a végére tényleg nulla lesz a C oszlopban, ha a B oszlopba egyetlen szót írtunk.
- A D oszlopba egy olyan részlet kerül, amelyre az E oszlop két helyen is hivatkozik, és áttekinthetőbb, ha kiemeljük egy külön cellába, mint kétszer is beírni ugyanazt a képletet. Az & jel a szövegek egyesítésére szolgál; idézőjelben vannak megadva a konstans részletek, idézőjel nélkül a szövegkezelő függvények. Először vesszük az A oszlopban levő szó első betűjét a megadott kisbetűs alakban, valamint ugyanennek a nagybetűs változatát, és ezeket összerakjuk a zárójellel és a vonallal:
nagy → (n|N)
. Utána vesszük a szó többi részét, amit úgy kapunk, hogy a CSERE függvénnyel az első betűt semmire (üres stringre) cseréljük, és ezt összerakjuk a meglévő résszel. Így kapjuk az eredményt:nagy → (n|N) → (n|N)agy
. Erre az egészre azért volt szükség, hogy a bot a mondat elején és közepén is megtalálja a hibásan írt kifejezést. A(n|N)
azt jelenti, hogy vagy n, vagy N betűt keresünk. - Immár felkészültünk, hogy az E oszlopban előállítsuk a keresendő (azaz a hibás) alakot. Kétféle, egymástól kissé különböző szövegfüggvényt használunk: a HELYETTE és a CSERE függvényeket. Ha a C oszlopban nulla áll, akkor a szó helyesen egybe van írva, tehát a hibás alak két szóból áll. Megkeressük benne az A oszlopban látható előtagot, és kicseréljük a D oszlopban előkészített kifejezésre, egy szóközzel bővítve. Ellenkező esetben egybeírjuk a hibás alakot, tehát a szónak a szóközig tartó részét egyszerűen lecseréljük a D oszlop tartalmára.
- Az F oszlopban határozzuk meg, hogy mire kell cserélni. a megtalált hibás szöveget. Ez majdnem azonos a B oszlopban található helyes szöveggel, csak az első betűjét kell a
\1
szövegre cserélni; ez azt jelenti, hogy helyettesítse be az első kerek zárójel tartalmát, azaz tegye vissza a kezdőbetűt változatlanul (ez ugyanis vagy kisbetű volt, vagy nagy, és ezért nem lehet konstansként beírni). - Végül a G oszlopban egyszerűen összerakjuk a kész elemeket, mint a Legót; ehhez az & jel helyett ezúttal az ÖSSZEFŰZ függvényt használjuk a varázslóval, hogy kevesebbet kelljen gépelni. Figyelnünk kell a sor eleji szóközökre is, hogy a fixes.py-ba megfelelő behúzással kerüljenek be a sorok. (Ha kicsi a monitorod felbontása, használd a vízszintes gördítősávot is, hogy lássad a teljes képletet!)
Hatodik feladat: két címlista összehasonlítása (bot nélkül)
[szerkesztés]Tegyük fel, hogy rendelkezésünkre áll két címlista. Mondjuk az egyikben a kigyűjtött szócikkek címe szerepel, a másikban a már kijavítottaké. Keressük a két lista metszetét, unióját, különbségét vagy szimmetrikus differenciáját. Például azon cikkek címeit, amelyeket már kigyűjtöttünk, de még nem javítottunk. Vagy amelyek két különböző szempontú lista közül csak az egyikben szerepelnek.
Tegyük fel, hogy a rövidebbik címlista részhalmaza hosszabbiknak. Illesszük be a hosszabbikat az A oszlopba, a rövidebbet a C-be (szükség esetén irányított beillesztéssel). Most a B1 cellába írjuk a következő képletet:
=DARABTELI(C:C;A1)
A cella fogantyújára kettőt kattintva a képlet kitöltődik az A oszlop teljes hosszában. (Ezért tettük a képletet közvetlenül a hosszabbik lista mellé.) Most a B és az A oszlopot együtt kijelölve rendezzük a B oszlop szerinti csökkenő sorrendbe őket. Az A oszlopban felül lesznek azok a cikkek, amelyek mellett 1 áll, azaz amelyek a C-ben is megvannak. Ha akarjuk, ellenőrzésképpen külön-külön ábécébe rendezhetjük az A oszlop felső részét és a C-t, hogy lássuk, azonos címek vannak egymás mellett.
Most az A oszlop alsó része (a 0 melletti cellák) tartalmazza a két lista különbségét, az A oszlop alsó része a C oszlop alá másolva pedig a két lista unióját ismétlődések nélkül. A metszet maga a C, de ez már az elején is nyilvánvaló volt, ha egyszer részhalmaza a rövidebb lista a hosszabbnak.
Ha egyik lista sem részhalmaza a másiknak, akkor külön-külön kell elvégezni a fenti műveletet rájuk (azaz a C mellé is kell egy hasonló DARABTELI függvény), és külön sorbarendezni; ekkor az 1-esek mellett a metszet, a 0-sok mellett pedig a két lista külön része áll. Ez utóbbiak együtt adják a szimmetrikus differenciát.
Hetedik feladat: piros, kék és zöld lapok szétválogatása (bot nélkül)
[szerkesztés]Adva van egy csaknem 4200 lapot tartalmazó felsorolás. Ezek között vannak pirosak (már törölt lapok), zöldek (átirányítások) és kékek (önállóan létező lapok). Válogassuk szét őket! (A példában ebből a listából törölni kéne a pirosakat, kitenni külön lapra a zöldeket, amelyek bottal ipari méretekben törölhetőek, és meghagyni a kékeket további vizsgálódásra.)
A wikilap önmagában semmilyen információt nem tartalmaz a tételek színéről (természetesen a szín csak egy indikátor, a mögötte álló tulajdonságról beszélünk). Annál inkább a lap HTML-forrása: ez tartalmazza a stílusosztályt, amelynek alapján a színezés történik. Megnyitjuk tehát a böngészőben a lap forrását, és magát a felsorolást tartalmazó részt, azaz az <ol> és a </ol> közötti, <li> taggel kezdődő sorokat az Excelbe másoljuk. (Célszerű az első ilyen sortól shift ctrl enddel a lap aljáig kijelölni, majd shift felfele nyíllal visszamenni a kívánt utolsó sorig; ez sokkal gyorsabb, mint 4182 sort kijelölni.) Szerencsére a HTML-kód szépen néz ki, egy listaelem egy sor. Számozott lista esetén könnyen ellenőrizhetjük az Excelben, hogy a darabszám megfelelő.
Keressük meg a „színkódokat”!
- A piros lapok forráskódjában class="new" áll.
- A zöldekében class="mw-redirect".
- A kékekében nincs class (ez a MediaWiki alapstílusa).
Lehetnek további színek is, szükség szerint keressük meg a kódokat.
A konkrét esetben a B oszlopba kerültek a kódok, az A-ban pedig egérrel végighúztam egy sorszámot, ami segít megtartani az eredeti sorrendet. Egy másik munkalap A1 cellájába került a fenti class="new", az A2-be a class="mw-redirect". Erre azért volt szükség, mert így egyszerűbb az idézőjelet tartalmazó szövegre keresni.
A C1 képlete: =SZÖVEG.KERES(Munka2!A$1;B1), a D1 képlete: =SZÖVEG.KERES(Munka2!A$2;B1), természetesen ezeket is kitöltjük az aljáig. A C-ben számot kapunk, ha piros a szócikk, hibaüzenetet, ha nem; a D-ben akkor kapunk számot, ha zöld. A kékeknél mindkét oszlop #ÉRTÉK! hibát tartalmaz (nem baj!). Mivel a HTML-forrásból nehéz lenne helyreállítani a címeket, az E oszlopba szerkesztési nézetből bemásoltam a lista wikiforrását. Ennek a sorrendje megegyezik a B oszlopéval, ha valaki bele nem piszkált közben. (Ha igen, az majd kiderül.) Az F1 képlete: =HA(TÍPUS(C1)=1;"piros";HA(TÍPUS(D1)=1;"zöld";"kék")).
Lényegében kész vagyunk; az egészet rendezzük első kulcsként az F oszlopban látható színek, második kulcsként az A oszlop sorszámai szerint, és az egy színhez tartozó szócikkeket az F oszlopból 1-1 allapra másoljuk, majd szabad szemmel ellenőrizzük, hogy tényleg egyszínűek-e, illetve az utolsó sorszámokat összeadva megnézzük, hogy a kapott listák elemszáma egyezik-e az eredetiével.
Nyolcadik feladat: 277 sor rendezése az utolsó betű alapján
[szerkesztés]A közlekedési balesetben elhunyt személyek kategóriáját fel kellett osztani alkategóriákra. Ehhez kilistáztam a szócikkeket egy allapra, és megkértem a szerkesztőket, hogy segítsenek a besorolásban: írjanak szóközzel elválasztva egy-egy betűt a sor végére aszerint, hogy milyen típusú balesetről van szó. Az eredményt szerkesztési nézetben megnyitva a cikklistát egy Excel-táblázat A oszlopába másoltam. A B1 cellába az =JOBB(A1;1) képlet került, majd a B oszlop szerint rendeztem a táblázatot. Néhány sort kézzel kellett javítani, ahol nem volt szabályos a végződés, majd újból rendezni, és az A oszlopot visszamásolni a Wikipédiába.
Kilencedik feladat: kilenc kategória átnevezése
[szerkesztés]- Lista: Wikipédia:Botgazdák üzenőfala#Kategória címváltozások (Archív35 vagy 36 lesz majd)
A botgazdák üzenőfalán kilenc kategória cikkeinek áthelyezését kérték. Egy kategóriamódosítás egy ehhez hasonló paranccsal végezhető el:
python2 category.py move -"from:Régi kategória" -"to:Új kategória"
Ebben az esetben további paramétereket is használtam, de a megoldás menetét ez nem befolyásolja. Nem volt kedvem 18 kategórianevet kijelölni és átmásolni. Ezért a listát Excelbe másoltam, és a következő módosításokat tettem:
- Adatok → szövegből oszlopok, határolójel: (
- Ugyanez még egyszer, határolójel: >
- Most a fölösleg törlésével egymás mellett állnak a régi és új kategóriák.
- Az A oszlopban csere: Kategória → -"from
- A B oszlopban csere: Kategória → -"to
- Az & operátor használatával összefűzöm a parancsok konstans és változó részét.
Így nagyon gyorsan kilenc kész parancsot kapok. Ezt be lehet másolni egyenként (már nem kell pontos kijelölés, csak a cellára állni), egyben az egészet, vagy be is lehet másolni egy kötegelt állományba. Ezek után csak idő kérdése, hogy a bot elrágcsáljon 993 szerkesztést.