Ugrás a tartalomhoz

Wikipédia:Elemzőfüggvények

A Wikipédiából, a szabad enciklopédiából

Az elemzőfüggvények (angolul ParserFunctions) a kapcsolókhoz és a változókhoz hasonló varázsszavak; olyan kifejezések, melyek egy vagy több bemeneti érték (argumentum) alapján kimeneti értéket (függvényérték) határoznak meg. Az elemzőfüggvények az alábbi formátumúak:

{{#függvénynév: argumentum 1 | argumentum 2 | argumentum 3 ... }}

Függvények

[szerkesztés]

Jelenleg az alábbi elemzőfüggvényeket tartalmazza a MediaWiki:

függvény alkalmazási területe
#expr számtani, logikai műveletek elvégzésére
#if paraméter megadásának vizsgálatára
#ifeq két paraméter egyezőségének vizsgálatára
#ifexist lap létezésének vizsgálatára
#ifexpr számtani, logikai állítás ellenőrzésére
#switch paraméter értékének vizsgálatára, üres paraméterek kiszűrésére
#time dátumokkal végzett műveletek elvégzésére, dátumok formázására
#timel mint a #time, helyi idő szerinti dátumokkal
#rel2abs relatív elérési útból abszolút elérési út előállítására
#titleparts adott szintű allapok lekérdezésére
#iferror hibás paraméterek kiszűrésére
formátuma: {{#expr: műveletek }}

Az #expr függvény számtani vagy logikai műveletet hajt végre.

A műveletek sorrendje az alábbi:

  1. zárójeles kifejezés;
  2. előjelek, tagadás (+, -, not);
  3. hatványozás (^)
  4. szorzás, osztás (*, /, div, mod);
  5. összeadás, kivonás (+, -);
  6. kerekítés (round);
  7. összehasonlítás (=, !=, <, >, stb.);
  8. logikai és-kapcsolat (and);
  9. logikai vagy-kapcsolat (or).

Logikai műveletek esetén – kivéve az = operátort – a „0” felel meg a logikai hamisnak, míg minden más, szóköztől különböző érték a logikai igaznak felel meg. (Például: a {{#expr: 30 and 7}} értéke 1.)

Számoknál a tizedesvessző helyett pontot (.) kell használni. (Például: {{#expr: 3.14*2}} értéke 6.28, azaz 6,28) A számot tudományos alakban is megadhatjuk az E segítségével. (Például: {{#expr: 2E5}} értéke 200000)

Az elemzőfüggvényt a {{szám}}(?) sablonnal együtt használva kapjuk a helyesen írt alakot.

operátor művelet példák értéke számsablonnal
számtani műveletek
+ pozitív előjel {{#expr:+30}} 30 30
- negatív előjel {{#expr:-30}} -30 −30
^ hatványozás {{#expr:30 ^ 7}} 21870000000 21 870 000 000
* szorzás {{#expr:30 * 7}} 210 210
/
div
osztás {{#expr:30 / 7}}
{{#expr:30 div 7}}
4.2857142857143
4.2857142857143
4,2857142857143
4,2857142857143
+ összeadás {{#expr:30 + 7}} 37 37
- kivonás {{#expr:30 - 7}} 23 23
logikai műveletek, összehasonlítások
not logikai nem {{#expr: not 0 }}
{{#expr: not 30}}
1
0
1
0
and logikai és {{#expr: 4<5 and 4 mod 2}} 0 0
or logikai vagy {{#expr: 4<5 or 4 mod 2}} 1 1
= egyenlő (számtani változókkal) {{#expr:30 = 7}} 0 0
<>
!=
nem egyenlő, logikai kizáró vagy {{#expr:30 <> 7}}
{{#expr:1 != 0}}
1
1
1
1
< kisebb mint {{#expr: 30 < 7}} 0 0
> nagyobb mint {{#expr: 30 > 7}} 1 1
<= kisebb vagy egyenlő {{#expr: 30 <= 7}} 0 0
>= nagyobb vagy egyenlő {{#expr: 30 >= 7}} 1 1
csoportosítás, maradékos osztás, kerekítések
( ) csoportosítás {{#expr:(30 + 7) * 7 }} 259 259
mod maradékos osztás {{#expr:30 mod 7}}
{{#expr:-8 mod -3}}
{{#expr:8 mod 2.7}}
2
-2
0
2
−2
0
round kerekítés {{#expr: 30/7 round 4}}
{{#expr: 30/7 round 1}}
{{#expr:1911 round -2}}
{{#expr:-2.5 round 0}}
4.2857
4.3
1900
-3
4,2857
4,3
1900
−3
trunc tizedesek levágása {{#expr: trunc 1.2}}
{{#expr: trunc -1.2}}
1
-1
1
−1
floor lefelé kerekítés {{#expr: floor 1.2}}
{{#expr: floor -1.2}}
1
-2
1
−2
ceil felfelé kerekítés {{#expr: ceil 1.2}}
{{#expr: ceil -1.2}}
2
-1
2
−1
konstansok, normálalak
e Euler-féle szám {{#expr:e}} 2.718281828459 2,718281828459
pi π {{#expr:pi}} 3.1415926535898 3,1415926535898
E normálalak {{#expr:2E5}}
{{#expr:5.4321E15}}
200000
5.4321E+15
200 000
5 432 100 000 000 000
abszolút érték, logaritmus, szögfüggvények
abs abszolút érték {{#expr:abs(-2)}}
{{#expr:abs0}}
{{#expr:abs2}}
2
0
2
2
0
2
ln természetes alapú logaritmus {{#expr:ln (e^3)}} 3 3
sin szinusz (radiánban) {{#expr:sin0}}
{{#expr:sin(pi/2)}}
{{#expr:sin(pi)}}
0
1
1.2246467991474E-16
0
1
kerekítendő!
cos koszinusz (radiánban) {{#expr:cos0}}
{{#expr:cos(pi/2)}}
{{#expr:cos(pi)}}
1
6.1232339957368E-17
-1
1
kerekítendő!
−1
tan tangens (radiánban) {{#expr:tan0}}
{{#expr:tan(pi/2)}}
{{#expr:tan(pi)}}
0
1.6331239353195E+16
-1.2246467991474E-16
0
nincs értelmezve!
kerekítendő!
asin arkusz szinusz (a függvényérték radiánban) {{#expr:asin0}}
{{#expr:asin0.5}}
{{#expr:asin1}}
0
0.5235987755983
1.5707963267949
0
0,5235987755983
1,5707963267949
acos arkusz koszinusz (a függvényérték radiánban) {{#expr:acos0}}
{{#expr:acos0.5}}
{{#expr:acos1}}
1.5707963267949
1.0471975511966
0
1,5707963267949
1,0471975511966
0
atan arkusz tangens (a függvényérték radiánban) {{#expr:atan0}}
{{#expr:atan5}}
{{#expr:atan10}}
0
1.373400766945
1.4711276743037
0
1,373400766945
1,4711276743037

Korlátok az #expr elemzőfüggvény használatában

[szerkesztés]

A számábrázolás sajátosságai miatt egyes esetekben – például a túl sok (≈15) hasznos számjegyből álló számok esetén, vagy több művelet esetén – a függvény hibás eredményt adhat. Erre a használat során ügyelni kell, ugyanakkor a gyakorlatban használt számoknál ez a jelenség általában nem jelentkezik.

Például:
{{#expr:123456789012345}} értéke 1.2345678901234E+14 (az utolsó számjegyet lenyeli a függvény)
{{#expr:sin(pi)}} értéke (0 helyett) 1.2246467991474E-16
{{#expr:trunc((4.35-4)*60)}} értéke (21 helyett) 20
{{#expr:trunc(ln(1000)/ln(10))}} értéke (3 helyett) 2

A szögfüggvényeket érdemes a {{kerekít}}(?) sablonnal együtt használni:

Például:
{{#expr:sin(pi)}} értéke (0 helyett) egy nagyon kicsi pozitív szám: 1.2246467991474E-16
{{kerekít|{{#expr:sin(pi)}}|8}} értéke (a 8. tizedesre kerekítve) helyesen 0

A trunc használatánál többnyire megoldás lehet egy „epszilon” érték hozzáadása. Az előző példákkal:

{{#expr:trunc((4.35-4)*60+1E-12)}} értéke helyesen 21
{{#expr:trunc(ln(1000)/ln(10)+1E-12)}} értéke helyesen 3
Bővebben lásd a Help:Calculation lapot.
formátuma: {{#if: vizsgálandó szöveg | ha létezik | ha nem létezik }}

Az #if függvény egy feltételes utasítást valósít meg az első argumentum vizsgálatával. Ha az első argumentum nem üres és nem szóköz (ideértve a nulla értéket), a függvény értéke a második argumentum. Ha az első argumentum üres vagy csak szóközöket tartalmaz, a függvény értéke a harmadik argumentum. A második és/vagy a harmadik argumentum üres is lehet, vagy el is maradhat; ez esetben a függvény értéke is üres lesz.

Nem tévesztendő össze az #ifexpr függvénnyel.

Például:

  • {{#if: valami | van ott valami | nincs ott semmi }} → van ott valami
  • {{#if: valami || nincs ott semmi }}
  • {{#if: valami | van ott valami}} → van ott valami
  • {{#if: | van ott valami | nincs ott semmi }} → nincs ott semmi
  • {{#if: | van ott valami}}
  • {{#if: 0 | van ott valami | nincs ott semmi }} → van ott valami
formátuma: {{#ifeq: vizsgálandó szöveg 1 | vizsgálandó szöveg 2 | ha azonosak | ha nem azonosak }}

Az #ifeq függvény az első két argumentum azonosságát vizsgálja. Ha az első és a második argumentum értéke azonos, a függvény értéke a harmadik argumentum. Ha az első és a második argumentum értéke nem azonos, a függvény értéke a negyedik argumentum. A harmadik és/vagy a negyedik argumentum üres is lehet, vagy el is maradhat; ez esetben a függvény értéke is üres lesz.

Például:

  • {{#ifeq: a | a | igen | nem }} → igen
  • {{#ifeq: A | a | igen | nem }} → nem
  • {{#ifeq: 1 | 01 | igen | nem }} → igen
  • {{#ifeq: "01" | "1" | igen | nem}} → nem
  • {{#ifeq: 1e3 | 1000 | igen | nem}} → igen
  • {{#ifeq: {{#expr:1+1}} | 2 | igen | nem}} → igen
  • {{#ifeq: 1+1 | 2 | igen | nem}} → nem

#ifexist

[szerkesztés]
formátuma: {{#ifexist: lap neve | ha kék v. zöld | ha piros }}

Az #ifexist függvény megvizsgálja, hogy az első argumentumában megadott lap létezik-e. Ha az első argumentumban megadott lap létezik (ideértve az átirányításokat és a kiürített lapokat is), a függvény értéke a második argumentum. Ha az első argumentumban megadott lap nem létezik (ideértve a törölt lapokat is), a függvény értéke a harmadik argumentum. A második és/vagy a harmadik argumentum üres is lehet, vagy el is maradhat; ez esetben a függvény értéke is üres lesz.

Az elemzőfüggvény használható speciális lapok létezésének vizsgálatára is. Nem használható viszont a másnyelvű wikik és a társprojektek lapjainak vizsgálatára általában, kivéve a Media fájlokat, mert azokra működik. Tehát a Commons képeinek létezését Media típusként ellenőrizhetjük.

Az #ifexist egy költséges elemzőfüggvény, egy lapon csak korlátozott számban használható. Ha egy bizonyos értéket átlép a függvényhívások száma, a függvényvizsgálat minden esetben hamis értéket fog adni.

Például:

  • {{#ifexist: Wikipédia:Elemzőfüggvények | van | nincs }} → van
  • {{#ifexist: Wikipédia:Elemzőfüggvények123456 | van | nincs }} → nincs
  • {{#ifexist: Petőfi Sándor | van | nincs }} → van
  • {{#ifexist: Petrovics Sándor | van | nincs }} → van (pedig átirányítás)
  • {{#ifexist: petofi sandor | van | nincs }} → nincs
  • {{#ifexist: en:Sándor Petőfi | van | nincs }} → nincs (pedig létezik)
  • {{#ifexist: Sablon:Infobox | van | nincs }} → van
  • {{#ifexist: m:Help:Calculation | van | nincs }} → nincs (pedig létezik)
  • {{#ifexist: Fájl:Egyszerikép.jpg | van | nincs }} → nincs
  • {{#ifexist: File:Egyszerikép.jpg | van | nincs }} → nincs
  • {{#ifexist: Fájl:Ady_Endre.jpg | van | nincs }} → nincs (pedig létezik)
  • {{#ifexist: Media:Ady_Endre.jpg | van | nincs }} → van (így már megtalálja)
  • {{#ifexist: Special:Watchlist | van | nincs }} → van

#ifexpr

[szerkesztés]
formátuma: {{#ifexpr: állítás | ha nemnulla v. igaz | ha nulla v. hamis v. üres }}

Az #ifexpr függvény az első argumentumban megadott számtani műveletet, illetve logikai kifejezést (állítást) ellenőrzi. Ha a művelet értéke nullától különböző, vagy az állítás igaz, a függvény értéke a második argumentum. Ha az első argumentumban megadott művelet eredménye nulla, vagy az állítás hamis, illetve ha az első argumentum üres, a függvény értéke a harmadik argumentum. A második és/vagy a harmadik argumentum üres is lehet, vagy el is maradhat; ez esetben a függvény értéke is üres lesz.

Például:

  • {{#ifexpr: 42 > 24 | ez igaz | ez hamis }} → ez igaz
  • {{#ifexpr: 42 = 24 | ez igaz | ez hamis }} → ez hamis
  • {{#ifexpr: 1+1=2 | ez igaz | ez hamis }} → ez igaz
  • {{#ifexpr: 1+1=11 | ez igaz | ez hamis }} → ez hamis
  • {{#ifexpr: 1-1 | nem nulla | nulla }} → nulla
  • {{#ifexpr: 42 | nem nulla | nulla }} → nem nulla
  • {{#ifexpr: 1 | nem nulla | nulla }} → nem nulla
  • {{#ifexpr: 0 | nem nulla | nulla }} → nulla
  • {{#ifexpr: | nem üres | üres }} → üres

#switch

[szerkesztés]
formátuma:
{{#switch: vizsgálandó szöveg
 | első eset = első érték
 | második eset = második érték
 | ...
 | n-edik eset = n-edik érték
 | alapértelmezett érték
}}

A #switch függvény az első argumentumban adott szöveget összehasonlítja a második, harmadik, … n-edik argumentumban adott érték egyenlőségjel előtti részével. Ha az első argumentum értéke megegyezik ezen szövegrészek valamelyikével, a függvény értéke az adott esethez tartozó, egyenlőségjel utáni érték. Ha nincs egyezés, a függvény értéke az utolsó argumentumban megadott alapértelmezett érték. Az alapértelmezett érték üres is lehet, vagy el is maradhat; ez esetben a függvény értéke is üres lesz.

Az egyes eseteket össze lehet vonni. Az esetek nem tartalmazhatnak egyenlőségjelet, az értékek tartalmazhatnak egyenlőségjelet. Ha az alapértelmezett értékben egyenlőségjel van, elé kell írni, hogy #default = .

{{#switch: vizsgálandó szöveg
 | első eset | második eset | harmadik eset = első érték
 | negyedik eset = második érték
 | ötödik eset | hatodik eset = harmadik érték
 | ...
 | n-edik eset = n-edik érték
 | #default = alapértelmezett érték
}}

Például:

{{#switch: {{HELYIHÉTFELE}} 
 | 1  = A hét első felében járunk.
 | 2  = A hét második felében járunk.
}}

eredménye: A hét második felében járunk.

{{#switch: {{HELYIÓRA}} 
 | 0 | 1 | 2 | 3 | 4  = Jó éjszakát!
 | 5 | 6 | 7 | 8 | 9 | 10 = Jó reggelt!
 | 20 | 21 | 22 | 23 = Jó estét!
 | Jó napot!
}}

eredménye: Jó éjszakát!

További példák:

  • {{#switch: a | A = nagybetű | a = kisbetű | egyik sem }} → kisbetű
  • {{#switch: 1+2 | 1 = egy | 2 = kettő | 3 = három | szövegként értelmezi }} → szövegként értelmezi
  • {{#switch: {{#expr:1+2}} | 1 = egy | 2 = kettő | 3 = három | szövegként értelmezi }} → három
  • {{#switch: {{#expr: 1 + 1 = 3 }} | 1 = 1 + 1 = 3 | #default = 1 + 1 = 2 }} → 1 + 1 = 2
  • {{#switch: +07 | 7 = igen | 007 = Bond | nem }} → igen
  • {{#switch: "+07" | "7"= igen |"007"= Bond | nem }} → nem
formátuma: {{#time: dátumformátum | dátum }}

A #time függvény a második argumentumban megadott dátum formázását végzi el, az első argumentumban megadott formátumnak megfelelően. A második argumentum üres is lehet, vagy el is maradhat; ez esetben a függvény értéke az adott lap megnyitásának időpontja. Fontos megjegyezni, hogy ez érték nem azonos a helyi idővel (lásd #timel), illetve gyorsítótár-problémák miatt ez az időpont a valós időponttól jelentősen eltérhet.

Az első argumentumban használt formátumkódok megegyeznek a PHP nyelv által használt formátumkódokkal. A második argumentumban megadható abszolút vagy relatív dátum. (Például: 2010-12-31; +2 days; -20 weeks; 2001-01-01 + 5 years; stb.)

kód leírás minta eredménye
év
Y az évszám, négy számjeggyel írva pl. 2006 2024
y az évszám, két számjeggyel írva 00 és 99 közötti érték, pl. 2006 esetén 06 24
o a hét számához tartozó évszám (ISO 8601 szerint), négy számjeggyel írva pl. 2006 2024
hónap
n a hónap számmal, nulla nélkül 1 és 12 között 12
m a hónap számmal, nullával 01 és 12 között 12
M a hónap neve rövidítve, pont nélkül (nemzetközi) jan, dec dec
F a hónap neve (nemzetközi) január, december december
hét
W a hét száma (ISO 8601 szerint), nullával 01 és 52 vagy 53 között (évtől függően) 51
nap
j a hónap napja, nulla nélkül 1 és 31 között 22
d a hónap napja, nullával 01 és 31 között 22
z az év napja (0-tól kezdve) 0 és 364 vagy 365 (évtől függően) között 356
D a hét napja rövidítve (nemzetközi) magyarul nem használatos vas
l a hét napja (nemzetközi) hétfő, vasárnap vasárnap
N a hét napja számmal (ISO 8601 szerint) 1 (hétfő) és 7 (vasárnap) között 7
w a hét napja számmal (más szabvány szerint) 0 (vasárnap) és 6 (szombat) között 0
napszak
a am (1.00 és 12.59 között) vagy pm am vagy pm am
A AM vagy PM, nagybetűkkel AM vagy PM AM
óra
g az óra, 12 órás formátumban, nulla nélkül 1 és 12 között 3
h az óra, 12 órás formátumban, nullával 01 és 12 között 03
G az óra, 24 órás formátumban, nulla nélkül 0 és 23 között 3
H az óra, 24 órás formátumban, nullával 00 és 23 között 03
perc
i a perc, nullával 00 és 59 között 31
másodperc
s a másodperc, nullával 00 és 59 között 04
U az 1970. január 1. 00.00 óta eltelt idő másodpercben 0-tól 1734838264
további kódok
L szökőév (logikai) szökőévben 1, különben 0 1
t a hónap napjainak száma 28 és 31 között 31
c ISO 8601 szerinti dátumformátum: {{#time:Y-m-dTH:i:s+00:00}} fix hosszúságú szöveg 2024-12-22T03:31:04+00:00
r RFC 2822 szerinti dátumformátum: {{#time:D, j M Y H:i:s +0000}}, ahol a hónap és a nap nevének rövidítése angolul szerepel változó hosszúságú szöveg Sun, 22 Dec 2024 03:31:04 +0000

Például:

  • {{#time: Y. F j.}} → 2024. december 22.
  • {{#time: G:i }} → 3:31
  • {{#time: o/W }} → 2024/51
  • {{#time: o/W | 2010-03-03}} → 2010/09
  • {{#time: Y. F j. | 2010-03-03}} → 2010. március 3.
  • {{#time: o/W | +20 weeks}} → 2025/19
  • {{#time: o". év "W". hete" }} → 2024. év 51. hete

#timel

[szerkesztés]
formátuma: {{#timel: dátumformátum | dátum }}

A #timel függvény működése teljesen azonos a #time függvénnyel, azzal az eltéréssel, hogy a dátumot a helyi idő szerint számolja. Fontos megjegyezni, hogy gyorsítótár-problémák miatt ez az időpont a valós időponttól jelentősen eltérhet.

Például:

  • {{#timel: Y. F j. G.i }} → 2024. december 22. 4.31
  • {{#time: Y. F j. G.i }} → 2024. december 22. 3.31

#rel2abs

[szerkesztés]
formátuma: {{#rel2abs: relatív elérési út | elérési út }}

A #rel2abs függvény relatív elérési utat alakít át abszolút elérési úttá. A függvény a második argumentumban adott elérési utat az első argumentumban adott relatív út szerint átalakítja (egy vagy több szintet feljebb vagy lentebb lép). A második argumentum el is maradhat; ez esetben alapértelmezett értéke az aktuális lap elérési útja.

A pont (.) a jelenlegi szintet, a két pont (..) az eggyel fentebbi szintet, a perjel az allap nevével (például /fejrész) az eggyel lentebbi szintet jelenti.

Például:

  • {{#rel2abs: ./fejrész | Wikipédia:Kocsmafal (kezdőknek) }} → Wikipédia:Kocsmafal (kezdőknek)/fejrész
  • {{#rel2abs: ../Archív1 | Wikipédia:Kocsmafal (kezdőknek)/fejrész }} → Wikipédia:Kocsmafal (kezdőknek)/Archív1
  • {{#rel2abs: ./Archív1 }} → Wikipédia:Elemzőfüggvények/Archív1
  • {{#rel2abs: ../Archív1 }} → Archív1

#titleparts

[szerkesztés]
formátuma: {{#titleparts: szegmensek | szegmensek száma | első szegmens }}

A #titleparts függvény az első argumentumban megadott szegmensek közül a harmadik argumentumban megadott értéktől kezdődően, a második argumentumban megadott darabbal tér vissza. Ha a második argumentum értéke 0, a függvény értéke az első argumentum. A második és/vagy a harmadik argumentum el is maradhat; ekkor a második argumentum alapértelmezett értéke 0, harmadik argumentumé 1.

Például:

  • {{#titleparts: Abc/Xyz/Pqr/123 | 0 }} → Abc/Xyz/Pqr/123
  • {{#titleparts: Abc/Xyz/Pqr/123 | 1 }} → Abc
  • {{#titleparts: Abc/Xyz/Pqr/123 | 2 }} → Abc/Xyz
  • {{#titleparts: Abc/Xyz/Pqr/123 | 3 }} → Abc/Xyz/Pqr
  • {{#titleparts: Abc/Xyz/Pqr/123 | 4 }} → Abc/Xyz/Pqr/123
  • {{#titleparts: Abc/Xyz/Pqr/123 | 1 | 2 }} → Xyz
  • {{#titleparts: Abc/Xyz/Pqr/123 | 2 | 3 }} → Pqr/123

#iferror

[szerkesztés]
formátuma: {{#iferror: ellenőrzendő művelet | ha hibás | ha helyes }}

Az #iferror függvény segítségével ellenőrizhető, hogy a #expr, #ifexpr, #time, #rel2abs függvényekkel megadott kifejezések helyesek-e. Ha az első argumentumban megadott kifejezés hibás, a függvény értéke a második argumentum. Ha az első argumentumban megadott kifejezés helyes, a függvény értéke a harmadik argumentum. A második és/vagy a harmadik argumentum üres is lehet, vagy el is maradhat; a második argumentum hiánya esetén a függvény értéke is üres lesz, míg a harmadik argumentum alapértelmezett értéke az első argumentum értéke.

Például:

  • {{#iferror: {{#expr:1+a}} | ezt így nem lehet | jó lesz az }} → ezt így nem lehet
  • {{#iferror: {{#expr:1+1}} | ezt így nem lehet | jó lesz az }} → jó lesz az
  • {{#iferror: {{#expr:1+a}} | ezt így nem lehet }} → ezt így nem lehet
  • {{#iferror: {{#expr:1+1}} | ezt így nem lehet }} → 2
  • {{#iferror: {{#expr:1+a}} }}
  • {{#iferror: {{#expr:1+1}} }} → 2

Lásd még

[szerkesztés]