proc main(): void {
Table crew = [["name", "role"], ["ada", "engineer"], ["grace", "admiral"]]
echo row(crew, "ada") // ["ada", "engineer"]
echo column(crew, "role") // ["role", "engineer", "admiral"]
echo toTable(["a", "b", "c", "d", "e"], 2) // [["a", "b"], ["c", "d"], ["e"]]
}proc main(): void {
hive.file.write("./crew.csv", "name,role\nada,\"engineer, first\"\ngrace\n")
read := hive.file.csv("./crew.csv", ",")
if read is Result.Ok(table) {
for each line in table {
echo "{len(line)} células: {line}" // a última linha tem uma
}
} else if read is Result.Error(why) {
echo "{why.path}: {why.message}"
}
}Table é o nome de Str[dyn][dyn]: um vetor de linhas de células. Três funções nativas trabalham com uma:
row(table, key) é a primeira linha cuja primeira célula é key, e column(table, key) a coluna cuja célula do topo é key — cada uma [] quando não há nenhuma.toTable(cells, wide) corta um vetor plano em linhas de wide, a última ficando com o que sobrou.hive.file.csv(path, separator) lê um arquivo separado para uma delas. O separador é sempre escrito — não existem parâmetros opcionais em Hive — e é um caractere só. Um campo entre aspas pode conter o separador, uma quebra de linha ou um "" dobrado; linhas em branco são puladas; uma marca de ordem de bytes no início, que planilhas costumam escrever, é descartada; e toda linha mantém o tamanho que tem, então um arquivo irregular é uma tabela de linhas irregulares e uma célula ainda precisa da sua guarda. Uma falha é um hive.file.TableError, com o path e uma message.
Planilhas, bancos de dados e mapas também respondem com tabelas, cada um no seu slide.