Put PlatformIO Boards In A Spreadsheet

Summary

This text will be hidden

The PlatformIO board listing is formatted for each platform group by a Python pretty-print library. The fields do not align if pasted into a file and it is not structured like CSV or Json for computer input. A speadsheet view might be optionally desirable so I provide a Lua script to do that.

-- file: make_csv.lua
-- RMM; 2022.apr.17

--[[
  From PlatformIO boards.txt to boards.csv for spreadsheet view..
  
  The pio "boards" listing is not intended to be processed by a program.
  This Lua script fixes the irregular text format and outputs CSV.
  Usage:
  1. pio boards > btmp.txt
  2. Lua make_csv.lua
  3. Open boards.csv in a spreadsheet
]]--


local filename1 = "btmp.txt"    -- capture of "pio boards > btmp.txt"
local filename2 = "boards.csv"  -- output board list in CSV format
local header = "ID, MCU, Freq, Flash,  RAM, Platform, Remarks\n"
local num_out = 0
local line1 = ""

local strPlatform = ""
local numPlatforms = 0
local infile = assert(io.open(filename1, "r"))
local outfile = io.open(filename2,"w");
outfile:write(header)
num_out = num_out+1

-----------------------------------
 local function parse_line(s1)
   -- skip lines malformed or not having MCU properties
   if not s1 then return end
   local x = string.sub(s1, 1,1)
   if x == '-' then return end
   if x == '=' then return end
   if string.sub(s1,1,2) == "ID" then return end
   if string.sub(s1,1,8) == "Platform" then
      strPlatform = string.sub(s1,10)
      numPlatforms = numPlatforms + 1
      return
   end

   -- capture the MCU properties from columns 1-5, skip spaces
   -- capture all the characters in the "name" column
   local a1,a2,a3,a4,a5,a6 = string.match( s1,
     "(%g+)%s* (%g+)%s* (%g+)%s* (%g+)%s* (%g+)%s* (.*)")
   if a6 then
        -- commas are invalid within a data field
   	a6 = string.gsub(a6, ",", "_" )
   end

   local tmp = string.format("%s, %s, %s, %s, %s, %s, %s",
      a1,a2,a3,a4,a5,strPlatform,a6)
   if not a1 then return end
   -- the Bonfires have no MCU field
   if a1 == "bonfire-basic-dram" then return end
   if a1 == "arty-axi-dram" then return end
   
   -- print the CSV line and write it to the result file
   print(tmp);
   outfile:write(tmp .. "\n")
   num_out = num_out+1  
   return
end  -- function parse_line()

----------------  main loop  -------------------
while true do
   line1 = infile:read()
   if not line1 then break end
   if type(line1) == "string" then
      parse_line(line1)
   end
end

print("Lines out=", num_out)
print("Number Platforms =", numPlatforms)

infile:close()
outfile:close()

-- end make_csv.lua

Summary

This text will be hidden