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.
// CSV creation and serialization with std/csv // Creación y serialización CSV con std/csv import "std/csv" fn main() -> int { // Create a CSV document with headers let headers: Array = ["name", "age", "city"] let doc: CsvDoc = csv.new_doc(headers) // Add data rows csv.add_row(doc, ["Alice", "30", "Buenos Aires"]) csv.add_row(doc, ["Bob", "25", "New York"]) csv.add_row(doc, ["Charlie", "35", "London"]) // Serialize to CSV string let output: String = csv.stringify(doc) print(output) print("") // Parse it back 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))) // Access by column name let row0: Array = data[0] let name: String = csv.get_by_name(parsed, row0, "city") print("first city: " + name) return 0 }
name,age,city Alice,30,Buenos Aires Bob,25,New York Charlie,35,London rows: 3 cols: 3 first city: Buenos Aires
Cómo funciona
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.