Módulo:Directory: mudanças entre as edições

De Wikincat
Ir para navegação Ir para pesquisar
m (uma edição)
Sem resumo de edição
Linha 3: Linha 3:
local p = {}
local p = {}
function p.makeDirectory ( frame )
function p.makeDirectory ( frame )
if not mw.smw then
return "mw.smw module not found"
end
local fieldLengths = frame:preprocess(
[=[{{#ask: [[-Has subobject::{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}]]
[[Control field data::+]]
|?Control field data
|format=plainlist
|link=none
|order=asc
|headers=hide
|outro=,|propsep=,|valuesep=&&&&|sep=,|template=ISO2709/ControlFieldDirectoryBuilder
}}{{#ask: [[-Has subobject::{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}]]
[[Field data::+]]
|?Field data
|format=plainlist
|limit=100
|link=none
|order=asc
|headers=hide
|propsep=,|valuesep=&&&&|sep=,|template=ISO2709/DataFieldDirectoryBuilder
}}]=]):gsub( '%[%[SMW::...?%]%]', '' ) or '0'
local sum = 0
local sum = 0
local directory = ''
local directory = ''
for index, tagAndLenght in ipairs(
for index, tagAndLenght in ipairs(
mw.text.split ( frame.args[1]:gsub( '%[%[SMW::...?%]%]', '' ), ',' , true )
mw.text.split ( fieldLengths, ',' , true )
) do
) do
-- frame.args[1] captura o primeiro e único argumento da chamada
-- frame.args[1] captura o primeiro e único argumento da chamada
Linha 26: Linha 49:
-- armazenados na variável 'sum'.
-- armazenados na variável 'sum'.
end
end
local baseAddressOfData = string.format("%05d", #directory + 25)
return directory
-- retorna o diretório completo:
-- Cálculo do "Record length":
-- "Field length" + "Base address of data" + 1 caractere de "Record terminator"
-- '001000700000003000900007005001700016008004100033'
local recordLength = string.format("%05d", sum + baseAddressOfData + 1)

local dataStore = {
'Directory=' .. directory,
'Base address of data=' .. baseAddressOfData,
'Record length=' .. recordLength
}

local result = mw.smw.subobject( dataStore, '000' )
if result == true then
-- everything ok
else
return 'An error occurred during the subobject storage process. Message reads ' .. result.error
end
end
end
return p
return p

Edição das 14h43min de 7 de janeiro de 2023

A documentação para este módulo pode ser criada em Módulo:Directory/doc

-- Author: @vitorsilverio
-- Author: @jaideraf
local p = {}
function p.makeDirectory ( frame )
	if not mw.smw then
        return "mw.smw module not found"
    end
	local fieldLengths = frame:preprocess(
	[=[{{#ask: [[-Has subobject::{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}]]
		[[Control field data::+]]
		 |?Control field data
		 |format=plainlist
		 |link=none
		 |order=asc
		 |headers=hide
		 |outro=,|propsep=,|valuesep=&&&&|sep=,|template=ISO2709/ControlFieldDirectoryBuilder
		}}{{#ask: [[-Has subobject::{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}]]
		[[Field data::+]]
		 |?Field data
		 |format=plainlist
		 |limit=100
		 |link=none
		 |order=asc
		 |headers=hide
		 |propsep=,|valuesep=&&&&|sep=,|template=ISO2709/DataFieldDirectoryBuilder
		}}]=]):gsub( '%[%[SMW::...?%]%]', '' ) or '0'
	
	local sum = 0
	local directory = ''
	for index, tagAndLenght in ipairs( 
		mw.text.split ( fieldLengths, ',' , true ) 
		) do
		-- frame.args[1] captura o primeiro e único argumento da chamada 
		-- {{#invoke:Directory|makeDirectory|...}} que é o resultado das consultas
		-- #ask da Predefinição:Directory. Ele retorna, portanto, valores como: 
		-- '0010007,0030009,0050017,0080041'. 
		-- É necessário remover as marcações invisíveis [[SMW::off]] e [[SMW::on]] 
		-- para que a conta abaixo seja efetuada com sucesso. 
		-- mw.text.split divide a string recebida, tendo como delimitadora, 
		-- literalmente (true), a vírgula, e armazena os dados em uma tabela: 
		-- { '0010007', '0030009', '0050017', '0080041' }
		-- os valores capturados são passados para a variável 'tagAndLenght'.
		directory = string.format( '%s%s%05d', directory, tagAndLenght, sum )
		-- o diretório é montado concatenando as variáveis 'directory', 'tagAndLenght' 
		-- e 'sum'. '%s%s%05d' significa que 'directory' é uma string, 
		-- 'tagAndLenght' é uma string e 'sum' são 5 dígitos completados com 0)
		sum = sum + tagAndLenght:sub( 4, 7 )
		-- a cada iteração, os últimos 4 números de 'tagAndLenght' são somados e 
		-- armazenados na variável 'sum'.
	end
	local baseAddressOfData = string.format("%05d", #directory + 25)
	-- Cálculo do "Record length": 
	-- "Field length" + "Base address of data" + 1 caractere de "Record terminator"
	local recordLength = string.format("%05d", sum + baseAddressOfData + 1)

	local dataStore = {
        'Directory=' .. directory,
        'Base address of data=' .. baseAddressOfData,
        'Record length=' .. recordLength
    }

	local result = mw.smw.subobject( dataStore, '000' )
    if result == true then
        -- everything ok
    else
		return 'An error occurred during the subobject storage process. Message reads ' .. result.error
	end
end
return p