Lua сделать красивый вывод результата (таблицы) в консоль

Я делаю вывод таблицы с результатом в консоль. Если значение ячеек длинное, то получается плохо (все сдвигается). Хочется, чтобы значения оставались под заголовками и структура таблицы сохранялась при любых значениях в ячейках.

os.setlocale("");

function printtab(ltab)
print("----------------------------------------")
    for i = 1, #ltab do
        for j = 1, #ltab[i] do
            io.write(ltab[i][j]) io.write "\t"
        end
        io.write "\n"
    end
print("----------------------------------------")
end


ltab = {{"B", "cB", "x1", "x2", "vK"},
        {"x3", -2, 1, -2, ""},
        {"x4", -4, -1, -1, ""},
        {"x5", 2, 1, -1, ""},
        {"x6", 6, 0, 1, ""},
        {"F", 0, -1, -2, ""}}


printtab(ltab)

ltab[2][2] = 4/3

ltab[5][5] = 1/3

printtab(ltab)

введите сюда описание изображения

Как сделать красивый вывод моего результата? Заранее спасибо.


Ответы (1 шт):

Автор решения: Mike V.

Надо использовать разные возможности string.format(), для ограничения количества выводимых символов после запятой ("%.3f") и для вывода строки определенной длины ("%8s").

Например, так:

local function fmt(s)
         if s then  return string.format("%.3f",s) else return ''
         end
end

local function printtab(ltab)
print("----------------------------------------")
    for i = 1, #ltab do
        for j = 1, #ltab[i] do
            io.write( string.format("%8s",  ltab[i][j])  )
            --io.write(ltab[i][j]) 
            --io.write "\t"
        end
        io.write "\n"
    end
print("----------------------------------------")
end


ltab = {{"B", "cB", "x1", "x2", "vK"},
        {"x3", -2, 1, -2, ""},
        {"x4", -4, -1, -1, ""},
        {"x5", 2, 1, -1, ""},
        {"x6", 6, 0, 1, ""},
        {"F", 0, -1, -2, ""}}


printtab(ltab)

ltab[2][2] = fmt(4/3)

ltab[5][5] = fmt(1/3)

printtab(ltab)

вывод будет таким:

   B      cB      x1      x2      vK
  x3      -2       1      -2        
  x4      -4      -1      -1        
  x5       2       1      -1        
  x6       6       0       1        
   F       0      -1      -2        


   B      cB      x1      x2      vK
  x3   1,333       1      -2        
  x4      -4      -1      -1        
  x5       2       1      -1        
  x6       6       0       1   0,333
   F       0      -1      -2        

→ Ссылка