Ir para conteúdo
Entre para seguir isso  
Killua

function printTable(table)

Recommended Posts

Killua    11
Killua

@Edit Agora está com recursividade, ou seja, ela mostra tables dentro de tables etc

 

Se você já leu o manual de referência já deve ter visto uma função parecida com essa.

 

O que ela faz?

Ela printa uma tabela completa, por exemplo:

 

Executando ela em seu OT:

 

O chamado printTable{1,3,4,[5] = 5, [6] = 1} mostra  2gx1mih.png

Instalação

Crie printTable.lua em data/lib e cole:


function printTable(table, includeIndices,prnt) -- By Killua
    if includeIndices == nil then includeIndices = true end
    if prnt == nil then prnt = true end
    if type(table) ~= "table" then
        error("Argument must be a table")
        return
    end
    local str, c = "{", ""
    for v, b in pairs(table) do
        if type( == "table" then
            str = includeIndices and str..c.."["..v.."]".." = "..printTable(b,true,false) or str..c..printTable(b,false,false)
        else
            str = includeIndices and str..c.."["..v.."]".." = "..b or str..c..b
        end
        c = ", "
    end
    str = str.."}"
    if prnt then print(str) end
    return str
 end

Utilização

 

Basta chamar ela colocoando sua tabela como primeiro argumento, exemplo:

printTable({1,2,3,4})

O segundo parâmetro (includeIndices) define se os indices vão ou não ser mostrados no print. Como padrão, ele tem valor true. Por exemplo:

printTable({1,2,3,4}) ou printTable({1,2,3,4}, true)

Vai printar: {[1] = 1, [2] = 2, [3] = 3, [4] = 4}

 

E

printTable({1,2,3,4}, false)

Vai printar: {1, 2, 3 ,4}

 

 

Além de printar sua tabela, a função ainda retorna ela como string. Sendo assim, você pode usar essa string para oque precisar. Por exemplo:

doPlayerSendTextMessage(cid, 25, printTable{1,2,3,4})

Vai enviar para o player a mensagem: "{[1] = 1, [2] = 2, [3] = 3, [4] = 4}"

 

 

Obrigado, espero que sjea útil.

Editado por Killua

Compartilhar este post


Link para o post
Convidado Avuenja   
Convidado Avuenja

Olá Killua, eu gostei cara... Mas como sou meio leigo nisso de script, apesar dos exemplos de uso, para o que ele me serviria realmente... Tipo passar coordenadas, ou eu conseguiria passar dados dentro dessa tabela?

 

Exemplo:

{['player_id'] = 25, ['player'] = 'Killua'}

Tipo algo do gênero?

Compartilhar este post


Link para o post
Killua    11
Killua

Ele serve somente para visualizar uma tabela.

 

Em lua é muito comum criarmos uma tabela vazia no início do código e, ao decorrer do código, ela ir sendo preenchida "sozinha" de acordo com várias condições. Entao no fim do código vc pode pedir pra printar essa tabela pra ver como ela está.

 

Além disso, várias funções nos retornam tabelas e muitas vezes não sabemos o que elas contém.

 

Exemplos úteis com funções do TFS são:

printTable(getThingFromPos(pos))
printTable(getPlayerSlotItem(cid,slot))
Além de muitos outros. Editado por Killua

Compartilhar este post


Link para o post
Convidado Avuenja   
Convidado Avuenja

Obrigado pela ótima explicação Killua! >.<

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn

é interessante para debug e etc, da pra reduzir um pouco, mas está bom assim;

a unica coisa que acho que tu poderia fazer é dar recursividade quando os valores dentro da tabela forem outras tabelas, pois se usar dessa forma ai, só vai aparecer o endereço da tabela

 

bom script, parabéns e obrigado pela contribuição

Compartilhar este post


Link para o post
Killua    11
Killua

Valeu Avu

 

Obrigado dalvo, n tinha pensado nisso mesmo... Vou editar o script e editar o tópico

Compartilhar este post


Link para o post
Lordfire    110
Lordfire

Legal cara, printa no mesmo formato que se escreve mesmo :P muito bom!

 

Só uma coisinha:

 

str = includeIndices and str..c.."["..v.."]".." = "..printTable(b,true,false) or str..c..printTable(b,false,false)

 

Tu deveria só passar o includeIndices adiante:

 

str = str..c.."["..v.."]".." = "..printTable(b,includeIndices,false)

Compartilhar este post


Link para o post
Killua    11
Killua

 

Legal cara, printa no mesmo formato que se escreve mesmo :P muito bom!

 

Só uma coisinha:

str = includeIndices and str..c.."["..v.."]".." = "..printTable(b,true,false) or str..c..printTable(b,false,false)

Tu deveria só passar o includeIndices adiante:

str = str..c.."["..v.."]".." = "..printTable(b,includeIndices,false)

 

Valeu lord :)

 

Mas na verdade se eu fizesse assim, ele ia sempre mostrar os índices cujo elemento é uma tabela

Editado por Killua

Compartilhar este post


Link para o post
Lordfire    110
Lordfire

Hmmmm bem notado, falha minha :P ficou impecável

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×