Module:Tabular data and Module:Tabular data/sandbox: Difference between pages
Appearance
(Difference between pages)
Content deleted Content added
MusikBot II (talk | contribs) m Protected "Module:Tabular data": High-risk template or module: 385 transclusions (more info) ([Edit=Require autoconfirmed or confirmed access] (indefinite)) |
make minimal version of function (explicit column indices, one occurrence etc) |
||
Line 89: | Line 89: | ||
function p._lookup(args) |
function p._lookup(args) |
||
local data = args.data or mw.ext.data.get(args[1]) |
|||
--local data = args.data or mw.ext.data.get(args[1]) |
|||
local page = mw.text.trim(args[1]) -- "UN:Total population, both sexes combined.tab" -- set page name explicitly for testing |
|||
local data = args.data or mw.ext.data.get(page) |
|||
local searchValue = args.search_value |
local searchValue = args.search_value |
||
local searchPattern = args.search_pattern |
local searchPattern = args.search_pattern |
||
Line 114: | Line 118: | ||
if (searchValue and record[searchColumnIdx] == searchValue) or |
if (searchValue and record[searchColumnIdx] == searchValue) or |
||
(searchPattern and mw.ustring.match(tostring(record[searchColumnIdx]), searchPattern)) then |
(searchPattern and mw.ustring.match(tostring(record[searchColumnIdx]), searchPattern)) then |
||
numMatchingRecords = numMatchingRecords + 1 |
|||
if numMatchingRecords == math.abs(occurrence) then |
|||
local args = mw.clone(args) |
|||
args.data = data |
|||
args.output_row = i |
|||
return p._cell(args) |
|||
end |
|||
end |
|||
end |
|||
end |
|||
function p._lookup2(args) |
|||
--local data = args.data or mw.ext.data.get(args[1]) |
|||
local page = mw.text.trim(args[1]) -- "UN:Total population, both sexes combined.tab" -- set page name explicitly for testing |
|||
local data = args.data or mw.ext.data.get(page) |
|||
local searchValue = args.search_value |
|||
local searchPattern = args.search_pattern |
|||
local searchColumnName = args.search_column |
|||
local searchValue2 = args.search_value2 |
|||
local searchPattern2 = args.search_pattern2 |
|||
local searchColumnName2 = args.search_column2 |
|||
local searchColumnIdx |
|||
for i, field in ipairs(data.schema.fields) do |
|||
if field.name == searchColumnName then |
|||
searchColumnIdx = i |
|||
end |
|||
if searchColumnIdx then |
|||
break |
|||
end |
|||
end |
|||
assert(searchColumnIdx, mw.ustring.format("Search column “%s” not found.", searchColumnName)) |
|||
local searchColumnIdx2 |
|||
for i, field in ipairs(data.schema.fields) do |
|||
if field.name == searchColumnName2 then |
|||
searchColumnIdx2 = i |
|||
end |
|||
if searchColumnIdx2 then |
|||
break |
|||
end |
|||
end |
|||
assert(searchColumnIdx2, mw.ustring.format("Search column “%s” not found.", searchColumnName2)) |
|||
local occurrence = tonumber(args.occurrence) or 1 |
|||
local numMatchingRecords = 0 |
|||
for i = (occurrence < 0 and #data.data or 1), |
|||
(occurrence < 0 and 1 or #data.data), |
|||
(occurrence < 0 and -1 or 1) do |
|||
local record = data.data[i] |
|||
if (searchValue and tostring(record[searchColumnIdx]) == searchValue) |
|||
and (searchValue2 and tostring(record[searchColumnIdx2]) == searchValue2) then |
|||
-- or (searchPattern and mw.ustring.match(tostring(record[searchColumnIdx]), searchPattern)) then |
|||
if (1==1) then return data.data[i][3] end -- just return single occurence |
|||
numMatchingRecords = numMatchingRecords + 1 |
numMatchingRecords = numMatchingRecords + 1 |
||
if numMatchingRecords == math.abs(occurrence) then |
if numMatchingRecords == math.abs(occurrence) then |
||
Line 134: | Line 198: | ||
return p._lookup(frame.args) |
return p._lookup(frame.args) |
||
end |
end |
||
--- As p.lookup() except requiring match of values in two columns |
|||
--- Usage: {{#invoke: Tabular data | lookup2 | Table name | search_value = Value to find in column | search_pattern = Pattern to find in column | search_column = Name of column to search in | search_value2 = Value to find in second column | search_pattern2 = Pattern to find in second column | search_column2 = Name of second column to search in | occurrence = 1-based index of the matching row to output | output_column = Name of column to output | output_column2 = Name of another column to output | … | output_format = String format to output the values in }} |
|||
function p.lookup2(frame) |
|||
--return p._lookup2(frame.args) |
|||
return p.lookup2_minimal(frame.args) |
|||
end |
|||
-- version for testing resources |
|||
function p.lookup2_minimal(args) |
|||
--local page = mw.text.trim(args[1]) -- "UN:Total population, both sexes combined.tab" -- set page name explicitly for testing |
|||
local data = args.data or mw.ext.data.get("UN:Total population, both sexes combined.tab" ) |
|||
local searchValue = args.search_value |
|||
--local searchPattern = args.search_pattern |
|||
--local searchColumnName = args.search_column |
|||
local searchValue2 = args.search_value2 |
|||
--local searchPattern2 = args.search_pattern2 |
|||
--local searchColumnName2 = args.search_column2 |
|||
local searchColumnIdx = 1 |
|||
local searchColumnIdx2 = 2 |
|||
--local occurrence = tonumber(args.occurrence) or 1 |
|||
local numMatchingRecords = 0 |
|||
for i = 1, #data.data, 1 do |
|||
local record = data.data[i] |
|||
if (searchValue and tostring(record[searchColumnIdx]) == searchValue) |
|||
and (searchValue2 and tostring(record[searchColumnIdx2]) == searchValue2) then |
|||
-- or (searchPattern and mw.ustring.match(tostring(record[searchColumnIdx]), searchPattern)) then |
|||
return data.data[i][3] -- just return single occurence |
|||
end |
|||
end |
|||
end |
|||
function p._wikitable(args) |
function p._wikitable(args) |