模块:AskSubtotal

来自PRTS
跳到导航 跳到搜索

调用ask函数,并生成分类汇总表格。

参数:

参数名 默认值 值域 描述 使用例
1 情报编号 —— ask函数的查找项(askitem),必填 情报编号
2 —— 以逗号分隔的字符串 预设类。使用此参数时,将优先以预设类进行分类。类之间用逗号相隔 R,A,PA
askcondition [[askitem::+]] —— ask函数的查找条件 askcondition=[[分类:干员]]
replacenumber yes yes/no 将查找项的数字删除,以便分类。相当于replaceitem=%d replacenumber=no
replaceitem —— 以逗号分隔的字符串 将查找项的指定目标删除,以便分类。支持lua的字符串模式匹配语法。目标之间用逗号相隔 replaceitem=<.->
comparemode strict strict/loose 分类比较模式。使用strict时,要求类名与查找项完全相同。使用loose时,要求类名包含查找项或查找项包含类名。 comparemode=loose
row 8 整数 表格的列数 row=6
sortclass no yes/no 对类按照查询结果从小到大进行排序 sortclass=yes
matchpattern no yes/no 模式匹配。在comparemode=loose的情况下,对类名中含有matchpattern_tag的类分类时进行模式匹配。支持lua的字符串模式匹配语法 matchpattern=yes
matchpattern_tag 模式匹配 —— 模式匹配标记。见参数“matchpattern” matchpattern_tag=
hideempty no yes/no 隐藏空类。将隐藏查询结果为0的类 hideempty=yes
displaytarget 对象 —— 表格中显示的对象名 displaytarget=干员
displayclass —— 表格中显示的类名 displaytarget=种

用法:

{{#invoke:AskSubtotal|get|情报编号|sortclass=yes}}
情报编号(345对象-50类)
AZ(1) BW(1) DWDB(1) HT(1) RR(1) RV(1) SK(1) U(1)
对象 情报编号
赫拉格 AZ01
对象 情报编号
维什戴尔 B00W
对象 情报编号
魔王 DWDB
对象 情报编号
苇草 HT03
对象 情报编号
星极 RR01
对象 情报编号
风笛 RV02
对象 情报编号
天火 SK01
对象 情报编号
U-Official U007
CR(2) DB(2) L(2) US(2) FO(3) IU(3) MH(3) ST(3)
对象 情报编号
浊心斯卡蒂 CR01
归溟幽灵鲨 CR02
对象 情报编号
焰影苇草 DB02
和弦 DB03
对象 情报编号
魏彦吾 L205
文月 L206
对象 情报编号
猎蜂 US10
苦艾 US11
对象 情报编号
闪灵 FO01
临光 FO02
夜莺 FO03
对象 情报编号
艾丝黛尔 IU04
蛇屠箱 IU05
嘉维尔 IU07
对象 情报编号
泰拉大陆调查团 MH01
麒麟R夜刀 MH02
火龙S黑角 MH03
对象 情报编号
守林人 ST01
流星 ST02
陨星 ST03
SW(3) A(4) BV(4) GG(4) SS(4) AA(5) MN(5) NM(5)
对象 情报编号
阿斯卡纶 SW00
SW01
清道夫 SW02
对象 情报编号
夜刀 A41
巡林者 A42
黑角 A43
杜林 A44
对象 情报编号
龙舌兰 BV12
羽毛笔 BV13
跃跃 BV32
露托 BV33
对象 情报编号
推进之王 GG01
摩根 GG02
因陀罗 GG03
达格达 GG04
对象 情报编号
锡兰 SS01
SS02
苍苔 SS03
青枳 SS04
对象 情报编号
斯卡蒂 AA01
幽灵鲨 AA02
蓝毒 AA03
深海色 AA04
歌蕾蒂娅 AA05
对象 情报编号
断罪者 MN01
火神 MN02
调香师 MN03
帕拉斯 MN04
埃拉托 MN07
对象 情报编号
NM01
NM02
NM03
重岳 NM04
NM05
PL(5) RCX(5) SI(5) USS(5) B(6) BS(6) II(6) RF(6)
对象 情报编号
德克萨斯 PL02
能天使 PL03
可颂 PL04
PL05
缄默德克萨斯 PL07
对象 情报编号
Lancet-2 RCX2
Castle-3 RCX3
THRM-EX RCX4
Friston-3 RCX5
PhonoR-0 RCX6
对象 情报编号
远山 SI01
寒檀 SI02
雪绒 SI03
凛视 SI06
提丰 SI07
对象 情报编号
凛冬 USS1
真理 USS2
古米 USS3
早露 USS4
烈夏 USS5
对象 情报编号
凯尔希 B003
凯尔希(回声测试) B003
博士 B101
W B214
伊内丝 B215
赫德雷 B216
对象 情报编号
芙兰卡 BS01
雷蛇 BS02
杰西卡 BS03
香草 BS04
杏仁 BS05
涤火杰西卡 BS30
对象 情报编号
棘刺 II01
安哲拉 II04
深靛 II05
艾丽妮 II07
流明 II09
海沫 II10
对象 情报编号
炎狱炎熔 RF01
寒芒克洛丝 RF02
濯尘芙蓉 RF03
历阵锐枪芬 RF04
百炼嘉维尔 RF22
承曦格雷伊 RF23
HK(7) None(7) RE(7) RS(8) JC(9) SG(9) LN(10) RL(10)
对象 情报编号
缠丸 HK01
HK03
赤冬 HK04
绮良 HK05
水月 HK07
风丸 HK09
嵯峨 HK13
对象 情报编号
暮落(集成战略) None
郁金香 None
预备干员-后勤 None
预备干员-术师 None
预备干员-狙击 None
预备干员-近战 None
预备干员-重装 None
对象 情报编号
逻各斯 RE03
Pith RE07
Touch RE18
Sharp RE26
Stormeye RE31
RE41
迷迭香 RE45
对象 情报编号
灰烬 RS01
闪击 RS02
霜华 RS03
战车 RS04
艾拉 RS05
医生 RS06
双月 RS07
导火索 RS08
对象 情报编号
耶拉 JC00
银灰 JC01
灵知 JC02
角峰 JC03
讯使 JC04
初雪 JC05
崖心 JC06
JC07
极光 JC09
对象 情报编号
狮蝎 SG01
森蚺 SG03
特米米 SG05
燧石 SG06
异客 SG07
图耶 SG08
至简 SG09
铅踝 SG11
红隼 SG12
对象 情报编号
地灵 LN01
艾雅法拉 LN02
卡涅利安 LN04
黑键 LN05
车尔尼 LN06
止颂 LN07
纯烬艾雅法拉 LN10
薇薇安娜 LN11
深律 LN13
折光 LN21
对象 情报编号
赫默 RL01
塞雷娅 RL02
伊芙利特 RL03
白面鸮 RL04
梅尔 RL05
麦哲伦 RL06
多萝西 RL07
星源 RL08
缪尔赛思 RL09
淬羽赫默 RL10
SR(10) YD(11) KZ(12) LT(12) RB(12) CB(13) LM(14) PA(15)
对象 情报编号
拉普兰德 SR01
安洁莉娜 SR02
普罗旺斯 SR03
贾维 SR26
布洛卡 SR27
奥斯塔 SR28
斥罪 SR35
伺夜 SR36
子月 SR37
阿罗玛 SR39
对象 情报编号
食铁兽 YD01
桑葚 YD03
惊蛰 YD05
左乐 YD06
九色鹿 YD09
乌有 YD11
万顷 YD13
小满 YD14
截云 YD15
铎铃 YD17
仇白 YD20
对象 情报编号
耀骑士临光 KZ01
白金 KZ03
KZ04
鞭刃 KZ07
玛恩纳 KZ08
瑕光 KZ09
但书 KZ10
焰尾 KZ11
灰毫 KZ12
远牙 KZ13
野鬃 KZ14
正义骑士号 KZ15
对象 情报编号
送葬人 LT01
安比尔 LT02
翎羽 LT05
芳汀 LT06
空弦 LT08
见行者 LT10
菲亚梅塔 LT11
空构 LT12
隐现 LT13
塑心 LT22
圣约送葬人 LT40
莫斯提马 LT77
对象 情报编号
暴行 RB01
暗索 RB02
莱恩哈特 RB03
断崖 RB04
石棉 RB05
蜜莓 RB06
四月 RB07
火哨 RB09
洋灰 RB11
夜半 RB12
温米 RB14
莱伊 RB15
对象 情报编号
布丁 CB03
CB05
卡夫卡 CB06
罗宾 CB08
松果 CB09
罗比菈塔 CB11
蚀清 CB12
豆苗 CB16
石英 CB18
掠风 CB19
玫拉 CB22
冰酿 CB28
霍尔海雅 CB88
对象 情报编号
LM04
星熊 LM05
诗怀雅 LM08
白雪 LM10
阿消 LM11
槐琥 LM12
LM14
拜松 LM15
雪雉 LM16
老鲤 LM18
LM19
LM20
LM21
琳琅诗怀雅 LM22
对象 情报编号
PA11
克洛丝 PA12
芙蓉 PA13
米格鲁 PA14
炎熔 PA15
玫兰莎 PA41
史都华德 PA42
安赛尔 PA43
安德切尔 PA44
卡缇 PA45
梓兰 PA61
月见夜 PA62
空爆 PA63
斑点 PA64
泡普卡 PA65
VC(21) R(52)
对象 情报编号
VC01
夜烟 VC02
夜魔 VC03
慕斯 VC04
格拉尼 VC05
暮落 VC07
薄绿 VC08
澄闪 VC09
琴柳 VC10
熔泉 VC11
爱丽丝 VC12
贝娜 VC14
号角 VC16
白铁 VC17
洛洛 VC18
海蒂 VC19
谜图 VC21
戴菲恩 VC23
刺玫 VC24
维荻 VC25
哈洛德 VC27
对象 情报编号
阿米娅 R001
阿米娅(医疗) R001
阿米娅(近卫) R001
杜宾 R100
末药 R104
红豆 R105
华法琳 R106
苏苏洛 R107
桃金娘 R108
傀影 R109
灰喉 R110
史尔特尔 R111
假日威龙陈 R112
温蒂 R117
格雷伊 R119
夏栎 R121
红云 R122
霜叶 R123
坚雷 R124
铸铁 R126
格劳克斯 R128
月禾 R129
伊桑 R130
极境 R131
微风 R132
亚叶 R133
褐果 R134
炎客 R137
柏喙 R138
酸糖 R139
卡达 R140
晓歌 R143
刻刀 R144
鸿雪 R145
泡泡 R146
蜜蜡 R147
巫恋 R148
刻俄柏 R155
波登可 R157
慑砂 R158
泥岩 R159
清流 R160
罗小黑 R161
稀音 R162
絮雨 R163
暴雨 R164
杰克 R166
奥达 R167
休谟斯 R171
铃兰 R172
明椒 R175
12F R303
{{#invoke:AskSubtotal|get |askcondition=[[职业::术师]][[:+]] |特性|攻击造成法术伤害$,^攻击造成群体法术伤害,超远距离,浮游单元,跳跃,通常时不攻击| replacenumber=no |sortclass=no |row=6 |comparemode=loose |replaceitem=<.->| matchpattern=yes |matchpattern_tag=| displaytarget=干员 |displayclass=类特性 |hideempty=no |}}
特性(47干员-8类特性)
攻击造成法术伤害$(13) ^攻击造成群体法术伤害(11) 超远距离(3) 浮游单元(5) 跳跃(4) 通常时不攻击(4)
干员 特性
刻俄柏 攻击造成法术伤害
史都华德 攻击造成法术伤害
夜烟 攻击造成法术伤害
夜魔 攻击造成法术伤害
杜林 攻击造成法术伤害
特米米 攻击造成法术伤害
艾雅法拉 攻击造成法术伤害
苦艾 攻击造成法术伤害
逻各斯 攻击造成法术伤害
阿米娅 攻击造成法术伤害
雪绒 攻击造成法术伤害
霍尔海雅 攻击造成法术伤害
预备干员-术师 攻击造成法术伤害
干员 特性
12F 攻击造成群体法术伤害
Pith 攻击造成群体法术伤害
攻击造成群体法术伤害
天火 攻击造成群体法术伤害
寒檀 攻击造成群体法术伤害
格雷伊 攻击造成群体法术伤害
炎熔 攻击造成群体法术伤害
炎狱炎熔 攻击造成群体法术伤害
莫斯提马 攻击造成群体法术伤害
莱恩哈特 攻击造成群体法术伤害
远山 攻击造成群体法术伤害
干员 特性
伊芙利特 攻击造成超远距离的群体法术伤害
蚀清 攻击造成超远距离的群体法术伤害
阿罗玛 攻击造成超远距离的群体法术伤害
干员 特性
卡达 操作浮游单元造成法术伤害
单元攻击同一敌人伤害提升(最高造成干员110%攻击力的伤害)
洛洛 操作浮游单元造成法术伤害
单元攻击同一敌人伤害提升(最高造成干员110%攻击力的伤害)
澄闪 操作浮游单元造成法术伤害
单元攻击同一敌人伤害提升(最高造成干员110%攻击力的伤害)
耶拉 操作浮游单元造成法术伤害
单元攻击同一敌人伤害提升(最高造成干员110%攻击力的伤害)
至简 操作浮游单元造成法术伤害
单元攻击同一敌人伤害提升(最高造成干员110%攻击力的伤害)
干员 特性
布丁 攻击造成法术伤害,且会在4个敌人间跳跃,每次跳跃伤害降低15%并造成短暂停顿术语: 停顿
移动速度降低80%
星源 攻击造成法术伤害,且会在4个敌人间跳跃,每次跳跃伤害降低15%并造成短暂停顿术语: 停顿
移动速度降低80%
异客 攻击造成法术伤害,且会在4个敌人间跳跃,每次跳跃伤害降低15%并造成短暂停顿术语: 停顿
移动速度降低80%
(0.5s)
惊蛰 攻击造成法术伤害,且会在4个敌人间跳跃,每次跳跃伤害降低15%并造成短暂停顿术语: 停顿
移动速度降低80%
(0.5s)
干员 特性
卡涅利安 通常时不攻击且防御力和法术抗性大幅度提升,技能开启时攻击造成群体法术伤害
通常时不攻击且防御力和法术抗性大幅度提升,技能开启时攻击造成群体法术伤害
薄绿 通常时不攻击且防御力和法术抗性大幅度提升,技能开启时攻击造成群体法术伤害
蜜蜡 通常时不攻击且防御力和法术抗性大幅度提升,技能开启时攻击造成群体法术伤害
攻击造成法术伤害,可以造成元素伤害(2) 攻击造成法术伤害,在找不到攻击目标时可以将攻击能量储存起来之后一齐发射(最多3个)(5)
干员 特性
折光 攻击造成法术伤害,可以造成元素伤害
温米 攻击造成法术伤害,可以造成元素伤害
干员 特性
和弦 攻击造成法术伤害,在找不到攻击目标时可以将攻击能量储存起来之后一齐发射(最多3个)
戴菲恩 攻击造成法术伤害,在找不到攻击目标时可以将攻击能量储存起来之后一齐发射(最多3个)
深靛 攻击造成法术伤害,在找不到攻击目标时可以将攻击能量储存起来之后一齐发射(最多3个)
爱丽丝 攻击造成法术伤害,在找不到攻击目标时可以将攻击能量储存起来之后一齐发射(最多3个)
黑键 攻击造成法术伤害,在找不到攻击目标时可以将攻击能量储存起来之后一齐发射(最多3个)

p={}


function spilt_ask(str,sep2)
	--name=""
	--prop={}
	hasprop=string.find(str, "(.*)")
	if(hasprop)then
		name=string.gsub(str,"(.*)","")
		prop_str=string.sub(str, string.find(str, "(.*)"))
		prop_str=string.sub(prop_str, 4,-4)
		
		prop=mw.text.split(prop_str, sep2, true)
	else
		name=str
		prop=nil
	end
	
	
	--print("aa"..name.."bb")
	--print("aa"..prop_str.."bb")
	
	return name,prop
end

function ask_fileNumber(frame,askitem,askcondition)
	local sep1='@sep1@'
	local sep2='@sep2@'
	local sep3='@sep2@'
	
	
	local str=frame:callParserFunction{
		name = '#ask:'..askcondition, args={
		'?'..askitem,
		format='plainlist',
		propsep=sep2,
		valuesep=sep3,
		sep=sep1,
		headers='hide',
		link='none',
		limit='1000',
		order='asc'
	}}

	local str_table = mw.text.split(str, sep1, true)
	local name_table={}
	local prop_table={}

	for i = 1, #str_table do
		
		name_table[i],temp=spilt_ask(str_table[i],sep2)
		if(temp)then
			prop_table[i]=temp[1]
		else
			prop_table[i]=""
		end
		
	end

	return name_table ,prop_table
end

function stringcanceltrans(str)
	local tranlist={'%','(',')','.','+','-','*','?','[','^','$'}
	for i = 1, #tranlist do
		str=string.gsub(str,"%"..tranlist[i],"%%%"..tranlist[i])
	end
	
	return str
end

function findclass(class_table,tag,comparemode,matchpattern,matchpattern_tag)
	local rtn={}
	
	for i = 1, #class_table do
		local compareresult
		if(comparemode =="strict")then
			compareresult=(class_table[i]==tag)
		else
			local tempstra=class_table[i]
			local tempstrb=tag
			
			local temptaga
			local temptagb
			if(matchpattern~="no" and string.find(tempstra,matchpattern_tag))then
				temptaga=string.gsub(tempstra,matchpattern_tag,"")
			else
				temptaga=stringcanceltrans(tempstra)
			end
			if(matchpattern~="no" and string.find(tempstrb,matchpattern_tag))then
				temptagb=string.gsub(tempstrb,matchpattern_tag,"")
			else
				temptagb=stringcanceltrans(tempstrb)
			end

			compareresult=(string.find(tempstrb,temptaga) or string.find(tempstra,temptagb))
		end
		if(compareresult)then
			--rtn=i
			--break
			table.insert(rtn,i)
		end
	end
	
	return rtn
end

local function intableSort2( a, b )
	if(#a[2] < #b[2])then
		return true
	end
	if(#a[2] > #b[2])then
		return false
	end
	if(a[1] < b[1])then
		return true
	end
	return false
end

local function intableSort( a, b )
	local str_a=a[2]
	local str_b=b[2]
	local tag_a=string.gsub(str_a,"%d","")
	local tag_b=string.gsub(str_b,"%d","")
	
	if(tag_a == tag_b)then
		local num_a_str=string.gsub(str_a,"%D","")
		local num_b_str=string.gsub(str_b,"%D","")
		local num_a=tonumber(num_a_str)
		local num_b=tonumber(num_b_str)
		if(num_a and num_b)then
			if(num_a < num_b)then
				return true
			else 
				if(num_a > num_b)then
					return false
				end
			end
		end
	end
	
    if(str_a < str_b)then
		return true
	end
	if(str_a > str_b)then
		return false
	end
	
	if(a[1] < b[1])then
		return true
	end
	return false
end


function sorttablebynum(name_table,fileNumber_table)
	local temptable={}
	for i = 1, #name_table do
		temptable[i]={}
		temptable[i][1]=name_table[i]
		temptable[i][2]=fileNumber_table[i]
		--table.insert(temptable[i],name_table[i])
		--table.insert(temptable[i],fileNumber_table[i])
	end
	
	table.sort(temptable,intableSort)

	for i = 1, #name_table do
		name_table[i]=temptable[i][1]
		fileNumber_table[i]=temptable[i][2]
	end
	
	return name_table,fileNumber_table
end

function makeclasstable(i_class,spilt_class_table,name_table,fileNumber_table,askitem)
	local tablehead=
[[{|border="1" style="border-collapse:collapse;border: darkgray;margin: auto;"
|-style="background-color:#eaebee;"
!style="width:80px;"|]]..displaytarget..[[!!style="width:60px;"|]]..askitem.."\n"

	local tableend="|}\n"
	
	local rtn=""
	for j = 1, #spilt_class_table[i_class] do
		local i_num=spilt_class_table[i_class][j]
		rtn=rtn.."|-\n|[["..name_table[i_num].."]]||"..fileNumber_table[i_num].."\n"
	end
	
	rtn=tablehead..rtn..tableend
	
	if(#spilt_class_table[i_class]==0)then
		rtn=""
	end
	
	return rtn
end

function makeplainoutput(class_table,spilt_class_table,name_table,fileNumber_table)
	local rtn=""
	
	for i = 1, #class_table do
		rtn=rtn..class_table[i]..": \n\n"
		for j = 1, #spilt_class_table[i] do
			i_num=spilt_class_table[i][j]
			rtn=rtn.."("..name_table[i_num]..","..fileNumber_table[i_num]..")"
		end
		rtn=rtn.."\n\n----"
	end
	
	return rtn
end

function p.get(frame)
	local args = (frame == mw.getCurrentFrame() and frame.args) or frame
	--local argv = #args
	local argv = 0
	while(args[argv+1])do
		argv=argv+1
	end
	
	local askitem="情报编号"
	local class_table_str=""
	local askcondition =""
	local replacenumber ="yes"
	local comparemode ="strict"
	local N_row=8
	local sortclass="no"
	local matchpattern="no"
	local replaceitem_str=""
	local matchpattern_tag="模式匹配"
	local hideempty="no"
	displaytarget="对象"
	displayclass="类"
	
	local class_table={}
	local replaceitem_table={}

	if(args[1])then
		askitem=args[1]
	end
	
	if(args[2])then
		class_table_str=args[2]
		class_table=mw.text.split(class_table_str, ",", true)
	end
	
	if(args["askcondition"])then
		askcondition=args["askcondition"]
	else
		askcondition='[['..askitem..'::+]][[:+]]'
	end
	
	if(args["replacenumber"])then
		replacenumber=args["replacenumber"]
	end
	
	if(args["comparemode"])then
		comparemode=args["comparemode"]
	end
	
	if(args["row"])then
		N_row=tonumber(args["row"])
	end
	
	if(args["sortclass"])then
		sortclass=args["sortclass"]
	end
	
	if(args["matchpattern"])then
		matchpattern=args["matchpattern"]
	end
	
	if(args["matchpattern_tag"])then
		matchpattern_tag=args["matchpattern_tag"]
	end
	
	if(args["replaceitem"])then
		replaceitem_str=args["replaceitem"]
		replaceitem_table=mw.text.split(replaceitem_str, ",", true)
	end
	
	if(args["hideempty"])then
		hideempty=args["hideempty"]
	end
	
	if(args["displaytarget"])then
		displaytarget=args["displaytarget"]
	end
	
	if(args["displayclass"])then
		displayclass=args["displayclass"]
	end
	
	---------------------------------------------------------------------------------------------
	
	name_table ,fileNumber_table=ask_fileNumber(frame,askitem,askcondition)
	name_table ,fileNumber_table=sorttablebynum(name_table,fileNumber_table)
	
	local tag_table={}
	
	for i = 1, #fileNumber_table do
		
		if(replacenumber=="yes")then
			tag_table[i]=string.gsub(fileNumber_table[i],"%d","")
		else
			tag_table[i]=fileNumber_table[i]
		end
		
		for j = 1, #replaceitem_table do
			tag_table[i]=string.gsub(tag_table[i],replaceitem_table[j],"")
		end
	end
	
	local spilt_class_table={}
	
	for i = 1, #class_table do
		spilt_class_table[i]={}
	end
	
	for i = 1, #name_table do
		local i_class_table=findclass(class_table,tag_table[i],comparemode,matchpattern,matchpattern_tag)
		if(#i_class_table==0)then
			table.insert(class_table,tag_table[i])
			table.insert(spilt_class_table,{})
			i_class=#class_table
			table.insert(spilt_class_table[i_class], i)
			
		else
			for j = 1, #i_class_table do
				i_class=i_class_table[j]
				table.insert(spilt_class_table[i_class], i)
			end
		end
	end
	
	if(hideempty~="no")then
		
		local temp=#spilt_class_table
		for i = temp, 1 ,-1 do
			if  #spilt_class_table[i]==0 then
				table.remove (spilt_class_table , i)
				table.remove (class_table , i)
			end
		end
	end
	
	local classsorttable={}
	if(sortclass~="no")then
		for i = 1, #spilt_class_table do
			classsorttable[i]={}
			classsorttable[i][1]=i
			classsorttable[i][2]=spilt_class_table[i]
		end
		
		table.sort(classsorttable,intableSort2)
	end
	
	local class_row_table={{}}
	local i_row=1
	local n_row=1
	local n_valid_class=0
	
	for i = 1, #class_table do
		if(n_row==N_row+1)then
			n_row=1
			i_row=i_row+1
			table.insert(class_row_table, {})
		end
		
		local i_choose=i
		if(sortclass~="no")then
			i_choose=classsorttable[i][1]
		end
		
		class_row_table[i_row][n_row]=i_choose
		n_row=n_row+1
		
		if(#spilt_class_table[i]>0)then
			n_valid_class=n_valid_class+1
		end
	end
	
	local tablehead=[[{|class="wikitable" style="white-space:normal; text-align:center;"]].."\n"
	tablehead=tablehead..'|-\n!colspan="'..N_row..'"|'..askitem..'('..#name_table..displaytarget..'-'..n_valid_class..displayclass..')\n'
	local tableend="|}\n"
	local rtn2=""
	
	local setwidthstr=""
	if(#class_table>=N_row)then
		setwidthstr='style="width:'..string.format("%.2f",(100/N_row))..'%;"|'
	end
	
	for i = 1, #class_row_table do
		local str_title=""
		local str_contant=[[|-style="vertical-align:top;"]].."\n"
		for j = 1, #class_row_table[i] do
			local i_class=class_row_table[i][j]
			
			if(j==1)then
				str_title=str_title.."|-\n!"..setwidthstr..class_table[i_class]
			else
				str_title=str_title.."!!"..setwidthstr..class_table[i_class]
			end
			
			if(#spilt_class_table[i_class]>0)then
				str_title=str_title.."("..#spilt_class_table[i_class]..")"
			end
			
			str_contant=str_contant.."||\n"..makeclasstable(i_class,spilt_class_table,name_table,fileNumber_table,askitem)
		end
		str_title=str_title.."\n"
		
		rtn2=rtn2..str_title..str_contant
	end
	
	rtn2=tablehead..rtn2..tableend
	
	
	--local rtn=makeplainoutput(class_table,spilt_class_table,name_table,fileNumber_table)

	--return rtn.."\n\n\n\n"..rtn2
	return rtn2
end
return p