Escritura CSV
std/csv provee creación y serialización de CSV. new_doc crea un documento con encabezados, add_row agrega filas de datos, y stringify serializa a una cadena CSV. El módulo maneja el entrecomillado, el escape y delimitadores personalizados. Ver la receta 18 para el parseo de CSV.
Código
// CSV creation and serialization with std/csv
import "std/csv"
fn main() -> int {
let headers: Array = ["name", "age", "city"]
let doc: CsvDoc = csv.new_doc(headers)
csv.add_row(doc, ["Alice", "30", "Buenos Aires"])
csv.add_row(doc, ["Bob", "25", "New York"])
csv.add_row(doc, ["Charlie", "35", "London"])
let output: String = csv.stringify(doc)
print(output)
print("")
let parsed: CsvDoc = csv.parse(output)
let data: Array = csv.data_rows(parsed)
print("rows: " + int_to_string(data.length()))
print("cols: " + int_to_string(csv.col_count(parsed)))
let row0: Array = data[0]
let name: String = csv.get_by_name(parsed, row0, "city")
print("first city: " + name)
return 0
}
Salida
name,age,city Alice,30,Buenos Aires Bob,25,New York Charlie,35,London rows: 3 cols: 3 first city: Buenos Aires
Explicación
csv.new_doc(headers) crea una struct CsvDoc con la primera fila como encabezados. add_row agrega una fila (array de strings). stringify serializa todo el documento, escapando automáticamente los campos que contienen comas, comillas o saltos de línea.
El round-trip funciona: parse lee la cadena CSV de vuelta a un CsvDoc, y get_by_name permite acceder a los campos por nombre de columna en vez de por índice. Para TSV u otros formatos, usa parse_with_delimiter y stringify_with_delimiter.