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
GetRecords<Run>mapea filas CSV a un record por nombre de encabezado.GroupByyMaxdan forma al resumen por lenguaje.- La tabla de Spectre le da al reporte números alineados a la derecha.
Palabras clave y builtins usados aquí
doubleforeachinintnewrecordstringusingvar
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.
Paso 1 de 2 en Bis; paso 15 de 16 en El ecosistema abierto.