<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2Ftrappist_the_monk%2Fairports_convert</id>
	<title>Module:Sandbox/trappist the monk/airports convert - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2Ftrappist_the_monk%2Fairports_convert"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/trappist_the_monk/airports_convert&amp;action=history"/>
	<updated>2026-05-07T02:53:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/trappist_the_monk/airports_convert&amp;diff=146600&amp;oldid=prev</id>
		<title>imported&gt;Trappist the monk at 22:31, 23 July 2018</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/trappist_the_monk/airports_convert&amp;diff=146600&amp;oldid=prev"/>
		<updated>2018-07-23T22:31:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[--------------------------&amp;lt; M A I N &amp;gt;----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
This module reads a lua table of tables and creates a similar table of tables where the data are less redundant.&lt;br /&gt;
The redundant form may be convenient for creates of the tables but occupies a rather large amount of space to&lt;br /&gt;
hold unused data.  The original form:&lt;br /&gt;
&lt;br /&gt;
local master= {&lt;br /&gt;
	{&amp;#039;Africa&amp;#039;,&amp;#039;Algeria&amp;#039;,&amp;#039;AZR&amp;#039;,&amp;#039;DAUA&amp;#039;,&amp;#039;Touat-Cheikh Sidi Mohamed Belkebir Airport&amp;#039;,&amp;#039;Adrar&amp;#039;},&lt;br /&gt;
	{&amp;#039;Africa&amp;#039;,&amp;#039;Algeria&amp;#039;,&amp;#039;QMH&amp;#039;,&amp;#039;DABO&amp;#039;,&amp;#039;Oum el Bouaghi Airport&amp;#039;,&amp;#039;Aïn Beïda&amp;#039;, &amp;#039;Q16896254&amp;#039;},&lt;br /&gt;
	{&amp;#039;Africa&amp;#039;,&amp;#039;Algeria&amp;#039;,   &amp;#039;&amp;#039;,&amp;#039;DAAQ&amp;#039;,&amp;#039;Aïn Oussera Airport&amp;#039;,&amp;#039;Aïn Oussera&amp;#039;},&lt;br /&gt;
	{&amp;#039;Africa&amp;#039;,&amp;#039;Botswana&amp;#039;,   &amp;#039;&amp;#039;,&amp;#039;FBXG&amp;#039;,&amp;#039;Xugana Airport&amp;#039;,&amp;#039;Xugana&amp;#039;},&lt;br /&gt;
	{&amp;#039;Africa&amp;#039;,&amp;#039;Burkina Faso&amp;#039;,&amp;#039;XAR&amp;#039;,&amp;#039;DFOY&amp;#039;,&amp;#039;Aribinda Airport&amp;#039;,&amp;#039;Aribinda&amp;#039;},&lt;br /&gt;
	{&amp;#039;Africa&amp;#039;,&amp;#039;Democratic Republic of the Congo&amp;#039;,&amp;#039;MNO&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;Manono&amp;#039;},&lt;br /&gt;
	{&amp;#039;Antartica&amp;#039;,&amp;#039;Antarctica&amp;#039;,&amp;#039;TNM&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;King George Island&amp;#039;},&lt;br /&gt;
	{&amp;#039;Asia&amp;#039;,&amp;#039;Afghanistan&amp;#039;,&amp;#039;LQN&amp;#039;,&amp;#039;OAQN&amp;#039;,&amp;#039;Qala i Naw Airport&amp;#039;,&amp;#039;Badghis&amp;#039;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
None of the continent and country data are used.  This module reads the old format and creates a table of tables&lt;br /&gt;
in the form:&lt;br /&gt;
&lt;br /&gt;
master = {&lt;br /&gt;
	[&amp;#039;Africa&amp;#039;] = {&lt;br /&gt;
		[&amp;#039;Burkina Faso&amp;#039;] = {&lt;br /&gt;
			{&amp;#039;XAR&amp;#039;, &amp;#039;DFOY&amp;#039;, &amp;#039;Aribinda Airport&amp;#039;, &amp;#039;Aribinda&amp;#039;},&lt;br /&gt;
			},&lt;br /&gt;
		[&amp;#039;Botswana&amp;#039;] = {&lt;br /&gt;
			{&amp;#039;&amp;#039;   , &amp;#039;FBXG&amp;#039;, &amp;#039;Xugana Airport&amp;#039;, &amp;#039;Xugana&amp;#039;},&lt;br /&gt;
			},&lt;br /&gt;
		[&amp;#039;Algeria&amp;#039;] = {&lt;br /&gt;
			{&amp;#039;AZR&amp;#039;, &amp;#039;DAUA&amp;#039;, &amp;#039;Touat-Cheikh Sidi Mohamed Belkebir Airport&amp;#039;, &amp;#039;Adrar&amp;#039;},&lt;br /&gt;
			{&amp;#039;QMH&amp;#039;, &amp;#039;DABO&amp;#039;, &amp;#039;Oum el Bouaghi Airport&amp;#039;, &amp;#039;Aïn Beïda&amp;#039;, &amp;#039;Q16896254&amp;#039;},&lt;br /&gt;
			{&amp;#039;&amp;#039;   , &amp;#039;DAAQ&amp;#039;, &amp;#039;Aïn Oussera Airport&amp;#039;, &amp;#039;Aïn Oussera&amp;#039;},&lt;br /&gt;
			},&lt;br /&gt;
		[&amp;#039;Democratic Republic of the Congo&amp;#039;] = {&lt;br /&gt;
			{&amp;#039;MNO&amp;#039;, &amp;#039;&amp;#039;    , &amp;#039;&amp;#039;, &amp;#039;Manono&amp;#039;},&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	[&amp;#039;Asia&amp;#039;] = {&lt;br /&gt;
		[&amp;#039;Afghanistan&amp;#039;] = {&lt;br /&gt;
			{&amp;#039;LQN&amp;#039;, &amp;#039;OAQN&amp;#039;, &amp;#039;Qala i Naw Airport&amp;#039;, &amp;#039;Badghis&amp;#039;},&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	[&amp;#039;Antartica&amp;#039;] = {&lt;br /&gt;
		[&amp;#039;Antarctica&amp;#039;] = {&lt;br /&gt;
			{&amp;#039;TNM&amp;#039;, &amp;#039;&amp;#039;    , &amp;#039;&amp;#039;, &amp;#039;King George Island&amp;#039;},&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	};&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function main ()&lt;br /&gt;
local master = mw.loadData (&amp;quot;Module:Sandbox/trappist_the_monk/airports_convert/data&amp;quot;)&lt;br /&gt;
local _master = master._master&lt;br /&gt;
&lt;br /&gt;
local out = {};&lt;br /&gt;
local result = {};&lt;br /&gt;
local cc_list ={};&lt;br /&gt;
	&lt;br /&gt;
	for _, airport in ipairs (_master) do										-- for each airport table in _master&lt;br /&gt;
		if not out[airport[1]] then												-- if out{} does not have a table for the continent&lt;br /&gt;
			out[airport[1]] = {};												-- make one&lt;br /&gt;
		end&lt;br /&gt;
		if not out[airport[1]][airport[2]] then									-- if the continent table does not have a table for the country&lt;br /&gt;
			out[airport[1]][airport[2]] = {}									-- make one&lt;br /&gt;
		end&lt;br /&gt;
		table.insert (out[airport[1]][airport[2]], {airport[3], airport[4], airport[5]:gsub (&amp;quot;&amp;#039;&amp;quot;, &amp;quot;\\&amp;#039;&amp;quot;), airport[6]:gsub (&amp;quot;&amp;#039;&amp;quot;, &amp;quot;\\&amp;#039;&amp;quot;), airport[7]});&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.insert (result, &amp;#039;&amp;lt;pre&amp;gt;master = {&amp;lt;br /&amp;gt;&amp;#039;)								-- open master table&lt;br /&gt;
	table.insert (cc_list, &amp;#039;&amp;lt;pre&amp;gt;master = {&amp;lt;br /&amp;gt;&amp;#039;)								-- open master table&lt;br /&gt;
	for continent_key, continent_table in pairs (out) do						-- for each continent table in out{}&lt;br /&gt;
		table.insert (result, table.concat ({&amp;#039;&amp;amp;#9;[\&amp;#039;&amp;#039;, continent_key, &amp;#039;\&amp;#039;] = {&amp;lt;br /&amp;gt;&amp;#039;}))			-- write the index&lt;br /&gt;
		table.insert (cc_list, table.concat ({&amp;#039;&amp;amp;#9;[\&amp;#039;&amp;#039;, continent_key, &amp;#039;\&amp;#039;] = {&amp;lt;br /&amp;gt;&amp;#039;}))			-- write the index&lt;br /&gt;
		for country_key, country_table in pairs (continent_table) do								-- for each country in continent_table{}&lt;br /&gt;
			table.insert (result, table.concat ({&amp;#039;&amp;amp;#9;&amp;amp;#9;[\&amp;#039;&amp;#039;, country_key, &amp;#039;\&amp;#039;] = {&amp;lt;br /&amp;gt;&amp;#039;}));	-- write the country index&lt;br /&gt;
			table.insert (cc_list, table.concat ({&amp;#039;&amp;amp;#9;&amp;amp;#9;[\&amp;#039;&amp;#039;, country_key, &amp;#039;\&amp;#039;],&amp;#039;}));	-- write the country index&lt;br /&gt;
			for _, airport in ipairs (country_table) do												-- for each airport in country_table{}&lt;br /&gt;
				local airport_table = {}															-- create airport tables&lt;br /&gt;
				for i, v in ipairs (airport) do														-- extract items from the airport table&lt;br /&gt;
					local item;&lt;br /&gt;
					if (3 &amp;gt; i) and (&amp;#039;&amp;#039; == v) then													-- for IATA and ICAO codes&lt;br /&gt;
						item = table.concat ({&amp;#039;&amp;amp;#39;&amp;amp;#39;&amp;#039;, string.rep (&amp;#039; &amp;#039;, i+2)});				-- add enough spaces to make the tables pretty&lt;br /&gt;
					else&lt;br /&gt;
						item = table.concat ({&amp;#039;&amp;amp;#39;&amp;#039;, v, &amp;#039;&amp;amp;#39;&amp;#039;})									-- numeric character entities to prevent empty string from being treated as italic markup&lt;br /&gt;
					end&lt;br /&gt;
					table.insert (airport_table, item);												-- add the item to the airport table&lt;br /&gt;
				end&lt;br /&gt;
				table.insert (result, table.concat ({&amp;#039;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;{&amp;#039;, table.concat (airport_table, &amp;#039;, &amp;#039;), &amp;#039;},&amp;lt;br /&amp;gt;&amp;#039;}))	-- add the airport table to the country table&lt;br /&gt;
			end&lt;br /&gt;
			table.insert (result, &amp;#039;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;},&amp;lt;br /&amp;gt;&amp;#039;);						-- close country table&lt;br /&gt;
			table.insert (cc_list, &amp;#039;&amp;lt;br /&amp;gt;&amp;#039;);									-- close country table&lt;br /&gt;
		end&lt;br /&gt;
		table.insert (result, &amp;#039;&amp;amp;#9;&amp;amp;#9;},&amp;lt;br /&amp;gt;&amp;#039;);								-- close continnent table&lt;br /&gt;
		table.insert (cc_list, &amp;#039;&amp;amp;#9;&amp;amp;#9;},&amp;lt;br /&amp;gt;&amp;#039;);										-- close continnent table&lt;br /&gt;
	end&lt;br /&gt;
	table.insert (result, &amp;#039;&amp;amp;#9;};&amp;lt;/pre&amp;gt;&amp;lt;br /&amp;gt;&amp;#039;);								-- close master table&lt;br /&gt;
	table.insert (cc_list, &amp;#039;&amp;amp;#9;};&amp;lt;/pre&amp;gt;&amp;lt;br /&amp;gt;&amp;#039;);								-- close master table&lt;br /&gt;
&lt;br /&gt;
	return table.concat ({table.concat (result), table.concat (cc_list)}, &amp;#039;&amp;lt;br /&amp;gt;&amp;lt;hr /&amp;gt;&amp;lt;br /&amp;gt;&amp;#039;);												-- put it all together and done&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; D U P L I C A T E _ C H E C K &amp;gt;------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
This function looks at new form IATA and ICAO code data in Module:IATA and ICAO code/data.  It attempts to locate&lt;br /&gt;
invalid (by length) codes and attempts to detect duplicate codes.&lt;br /&gt;
&lt;br /&gt;
  1               2     3     4&lt;br /&gt;
{&amp;#039;North America&amp;#039;,&amp;#039;USA&amp;#039;,&amp;#039;ABE&amp;#039;,&amp;#039;KABE&amp;#039;,&amp;#039;Lehigh Valley International Airport&amp;#039;,&amp;#039;Allentown/Bethlehem&amp;#039;},&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function duplicate_check ()&lt;br /&gt;
local master = mw.loadData (&amp;quot;Module:IATA_and_ICAO_code/data/sandbox&amp;quot;)&lt;br /&gt;
local iata_count_table = {};&lt;br /&gt;
local icao_count_table = {};&lt;br /&gt;
&lt;br /&gt;
local _master = master._master&lt;br /&gt;
&lt;br /&gt;
local iata = {}&lt;br /&gt;
local icao = {}&lt;br /&gt;
&lt;br /&gt;
	for continent_key, continent_table in pairs (_master) do									-- for each continent table in _master{}&lt;br /&gt;
		for country_key, country_table in pairs (continent_table) do						-- for each country in continent_table{}&lt;br /&gt;
			for i, airport in ipairs (country_table) do							-- for each airport table in country_table{}&lt;br /&gt;
				if &amp;#039;&amp;#039; ~= airport[1] then&lt;br /&gt;
					if not iata[airport[1]] then&lt;br /&gt;
						iata[airport[1]] = 1;									-- state that this is the first time we&amp;#039;ve seen this code&lt;br /&gt;
					else&lt;br /&gt;
						iata[airport[1]] = iata[airport[1]] + 1;				-- bump the count for this code&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if &amp;#039;&amp;#039; ~= airport[2] then&lt;br /&gt;
					if not icao[airport[2]] then&lt;br /&gt;
						icao[airport[2]] = 1;									-- state that this is the first time we&amp;#039;ve seen this code&lt;br /&gt;
					else&lt;br /&gt;
						icao[airport[2]] = icao[airport[2]] + 1;				-- bump the count for this code&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs (iata) do&lt;br /&gt;
		if 1 &amp;lt; v then&lt;br /&gt;
			table.insert (iata_count_table, table.concat ({k, &amp;#039; (&amp;#039;, v, &amp;#039;×)&amp;#039;}))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs (icao) do&lt;br /&gt;
		if 1 &amp;lt; v then&lt;br /&gt;
			table.insert (icao_count_table, table.concat ({k, &amp;#039; (&amp;#039;, v, &amp;#039;×)&amp;#039;}))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local iata_msg = &amp;#039;&amp;#039;;														-- error messages go here&lt;br /&gt;
	local icao_msg = &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	if 0 ~= #iata_count_table then&lt;br /&gt;
		iata_msg = make_err_msg (err_msg[&amp;#039;extra_iata&amp;#039;], table.concat (iata_count_table, &amp;#039;, &amp;#039;))&lt;br /&gt;
--		iata_msg = table.concat ({&amp;#039;&amp;lt;span style=\&amp;quot;font-size:100%; font-style:normal;\&amp;quot; class=\&amp;quot;error\&amp;quot;&amp;gt;error: more than one IATA code:&amp;lt;br /&amp;gt;	&amp;#039;, table.concat (iata_count_table, &amp;#039;, &amp;#039;), &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;})&lt;br /&gt;
	end&lt;br /&gt;
	if 0 ~= #icao_count_table then&lt;br /&gt;
		icao_msg = make_err_msg (err_msg[&amp;#039;extra_iata&amp;#039;], table.concat (icao_count_table, &amp;#039;, &amp;#039;))&lt;br /&gt;
--		icao_msg = table.concat ({&amp;#039;&amp;lt;span style=\&amp;quot;font-size:100%; font-style:normal;\&amp;quot; class=\&amp;quot;error\&amp;quot;&amp;gt;error: more than one ICAO code:&amp;lt;br /&amp;gt;	&amp;#039;, table.concat (icao_count_table, &amp;#039;, &amp;#039;), &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if (0 ~= #iata_count_table) or (0 ~= #icao_count_table) then				-- TODO find a better way of doing this&lt;br /&gt;
		return table.concat ({iata_msg, &amp;#039;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;#039;, icao_msg})&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;ok&amp;#039;;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	main = main,&lt;br /&gt;
	duplicate_check = duplicate_check,&lt;br /&gt;
	};&lt;/div&gt;</summary>
		<author><name>imported&gt;Trappist the monk</name></author>
	</entry>
</feed>