Slide 22 de 74

Tabelas e CSV

Linhas, colunas e cortes
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"]]
}
Lendo um CSV
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.