Pattern semplici per l’analisi CSV
Analizzate le righe CSV: usate Split in modo essenziale per i file semplici, TryParse sicuro per i numeri e infine un piccolo splitter consapevole delle virgolette per le virgole interne alle virgolette.
Pattern semplici per l’analisi CSV è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 3 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 3 lezioni in totale.
Panoramica del parsing CSV
Obiettivo: analizzare piccoli file CSV in modo affidabile.
- Iniziare con un semplice Split per i file senza virgolette
- Usare TryParse per i numeri
- Gestire i campi tra virgolette con un piccolo scanner
Split ingenuo (senza virgolette)
Per i CSV senza virgolette, un semplice Split è sufficiente ed è facile da leggere.
using System;
public class Program
{
public static void Main(string[] args)
{
// Simple: no quotes, commas separate fields
string line = "Apple,10,2.5";
string[] parts = line.Split(','); // naive split
Console.WriteLine("Name = " + parts[0]);
Console.WriteLine("Qty = " + parts[1]);
Console.WriteLine("Price= " + parts[2]);
}
}
Parsing numerico sicuro
Usare Trim e TryParse con una cultura (ad es. InvariantCulture) per evitare arresti anomali dovuti a dati non validi.
using System;
using System.Globalization;
public class Program
{
public static void Main(string[] args)
{
string line = "Banana, 7, 1.99";
string[] p = line.Split(',');
string name = p[0].Trim();
int qty;
double price;
bool okQty = Int32.TryParse(p[1].Trim(), NumberStyles.Integer, CultureInfo.InvariantCulture, out qty);
bool okPrice = Double.TryParse(p[2].Trim(), NumberStyles.Float, CultureInfo.InvariantCulture, out price);
Console.WriteLine("Parsed: " + name + " | ok=" + (okQty && okPrice) + " -> " + qty + " x " + price);
}
}
Perché lo Split ingenuo non funziona
I campi tra virgolette possono contenere virgole; un semplice Split dividerà il campo in più parti.
using System;
public class Program
{
public static void Main(string[] args)
{
// Name has a comma inside quotes; naive split breaks it
string line = "\"Orange, Blood\",12,3.40";
string[] parts = line.Split(','); // wrong: splits inside the quoted name
Console.WriteLine("Parts found = " + parts.Length); // 4, not 3
foreach (string s in parts) Console.WriteLine("[" + s + "]");
}
}
Split con gestione delle virgolette
Un piccolo scanner alterna lo stato di inQuotes e ignora le virgole tra virgolette; gestisce anche le virgolette raddoppiate ("").
using System;
using System.Collections.Generic;
using System.Text;
public class Program
{
// Splits a CSV line handling quotes and doubled "" inside quoted fields.
static List<string> SplitCsvLine(string line)
{
List<string> fields = new List<string>();
StringBuilder sb = new StringBuilder();
bool inQuotes = false;
for (int i = 0; i < line.Length; i++)
{
char c = line[i];
if (c == '\"')
{
if (inQuotes && i + 1 < line.Length && line[i + 1] == '\"')
{
// Escaped quote ("") inside a quoted field
sb.Append('\"');
i++; // skip next quote
}
else
{
inQuotes = !inQuotes; // toggle
}
}
else if (c == ',' && !inQuotes)
{
fields.Add(sb.ToString());
sb.Length = 0; // reset
}
else
{
sb.Append(c);
}
}
fields.Add(sb.ToString());
return fields;
}
public static void Main(string[] args)
{
string line = "\"Orange, Blood\",12,\"He said \"\"Hi!\"\"\"";
List<string> parts = SplitCsvLine(line);
Console.WriteLine("Fields = " + parts.Count);
foreach (string f in parts) Console.WriteLine("[" + f + "]");
}
}
Dal CSV agli oggetti
Combinare lo splitter con TryParse e una pulizia minima per creare oggetti tipizzati in modo sicuro.
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
public sealed class Product
{
public string Name;
public int Quantity;
public double Price;
}
public class Program
{
static List<string> SplitCsvLine(string line)
{
List<string> fields = new List<string>();
StringBuilder sb = new StringBuilder();
bool inQuotes = false;
for (int i = 0; i < line.Length; i++)
{
char c = line[i];
if (c == '\"')
{
if (inQuotes && i + 1 < line.Length && line[i + 1] == '\"')
{ sb.Append('\"'); i++; }
else { inQuotes = !inQuotes; }
}
else if (c == ',' && !inQuotes)
{ fields.Add(sb.ToString()); sb.Length = 0; }
else
{ sb.Append(c); }
}
fields.Add(sb.ToString());
return fields;
}
static bool TryParseProduct(string line, out Product p)
{
p = null;
List<string> f = SplitCsvLine(line);
if (f.Count < 3) return false;
string name = f[0].Trim().Trim('\"');
int qty;
double price;
bool okQty = Int32.TryParse(f[1].Trim(), NumberStyles.Integer, CultureInfo.InvariantCulture, out qty);
bool okPrice = Double.TryParse(f[2].Trim(), NumberStyles.Float, CultureInfo.InvariantCulture, out price);
if (!okQty || !okPrice) return false;
p = new Product { Name = name, Quantity = qty, Price = price };
return true;
}
public static void Main(string[] args)
{
string[] lines = new string[]
{
"\"Orange, Blood\",12,3.4",
"Apple,10,2.5",
"\"He said \"\"Hi\"\"\",1,0.0"
};
List<Product> list = new List<Product>();
foreach (string line in lines)
{
Product p;
if (TryParseProduct(line, out p)) list.Add(p);
}
foreach (Product p in list)
{
Console.WriteLine(p.Name + " -> " + p.Quantity + " @ " + p.Price);
}
}
}
Regola per i campi tra virgolette
Riepilogo
Riepilogo: usare un semplice Split per i CSV senza virgolette, analizzare i numeri con TryParse e passare a uno scanner che gestisce le virgolette quando i campi possono contenere virgole.
Impara C# con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 93
- Lezioni
- 346
Domande Frequenti
La lezione «Pattern semplici per l’analisi CSV» è gratuita?
Sì — il testo completo di «Pattern semplici per l’analisi CSV» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 3 lezioni in totale.
Cosa imparerò in «Pattern semplici per l’analisi CSV»?
Analizzate le righe CSV: usate Split in modo essenziale per i file semplici, TryParse sicuro per i numeri e infine un piccolo splitter consapevole delle virgolette per le virgole interne alle virgole… Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C# Academy?
Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 3.
Quanto tempo richiede la lezione «Pattern semplici per l’analisi CSV»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C# Academy?
Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- System.IO (percorsi, stream)
- JSON con System.Text.Json (opt-in, converter)
- Pattern semplici per l’analisi CSV