typestar

csv_report.cs en C#

CsvHelper parsea, LINQ agrega, Spectre renderiza.

// csv_report: parsea CSV con CsvHelper, agrega y renderiza con Spectre
using System.Globalization;
using CsvHelper;
using Spectre.Console;

var csv = """
Language,Tpm,Accuracy
csharp,95,98.2
rust,88,97.1
csharp,101,99.0
python,104,98.8
rust,92,98.5
""";

using var reader = new StringReader(csv);
using var parser = new CsvReader(reader, CultureInfo.InvariantCulture);
var runs = parser.GetRecords<Run>().ToList();

var table = new Table();
table.AddColumn("language");
table.AddColumn(new TableColumn("runs").RightAligned());
table.AddColumn(new TableColumn("best tpm").RightAligned());

foreach (var g in runs.GroupBy(r => r.Language).OrderBy(g => g.Key))
{
    table.AddRow(g.Key, g.Count().ToString(),
                 g.Max(r => r.Tpm).ToString());
}
AnsiConsole.Write(table);
Console.WriteLine($"{runs.Count} runs total");

record Run(string Language, int Tpm, double Accuracy);

Cómo funciona

  1. GetRecords<Run> mapea filas CSV a un record por nombre de encabezado.
  2. GroupBy y Max dan forma al resumen por lenguaje.
  3. La tabla de Spectre le da al reporte números alineados a la derecha.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
32
Caracteres a escribir
864
Tokens
220
Ritmo de tres estrellas
85 tpm

Al ritmo de tres estrellas de 85 tokens por minuto, este intento toma unos 155 segundos.

Escribe este fragmento

Paso 1 de 2 en Bis; paso 15 de 16 en El ecosistema abierto.

← Anterior Siguiente →