Modèles simples d’analyse CSV
Analysez les lignes CSV : utilisez Split de manière naïve pour les fichiers simples, TryParse de manière sûre pour les nombres, puis un petit séparateur tenant compte des guillemets pour les virgules incluses dans les guillemets.
Modèles simples d’analyse CSV est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 3 leçons au total.
Vue d’ensemble de l’analyse CSV
Objectif : analyser correctement de petits fichiers CSV.
- Commencer par un simple Split pour les fichiers sans guillemets
- Utiliser TryParse pour les nombres
- Gérer les champs entre guillemets avec un petit analyseur
Découpage naïf (sans guillemets)
Pour un fichier CSV sans guillemets, un simple Split fonctionne et reste facile à comprendre.
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]);
}
}
Analyse numérique sûre
Utilisez Trim et TryParse avec une culture (par exemple, InvariantCulture) pour éviter les plantages dus à des données incorrectes.
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);
}
}
Pourquoi le découpage naïf échoue
Les champs entre guillemets peuvent contenir des virgules ; un simple Split séparera le champ en plusieurs morceaux.
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 + "]");
}
}
Découpage tenant compte des guillemets
Un petit analyseur bascule inQuotes et ignore les virgules situées entre guillemets ; il gère également les guillemets doublés ("").
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 + "]");
}
}
Du CSV aux objets
Combinez le séparateur avec TryParse et un nettoyage minimal pour construire des objets typés en toute sécurité.
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);
}
}
}
Règle des champs entre guillemets
Récapitulatif
Récapitulatif : utilisez un simple Split pour les CSV sans guillemets, analysez les nombres avec TryParse et passez à un analyseur tenant compte des guillemets lorsque les champs peuvent contenir des virgules.
Questions Fréquemment Posées
La leçon « Modèles simples d’analyse CSV » est-elle gratuite ?
Oui — le texte complet de « Modèles simples d’analyse CSV » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 3 leçons au total.
Qu'est-ce que j'apprendrai dans « Modèles simples d’analyse CSV » ?
Analysez les lignes CSV : utilisez Split de manière naïve pour les fichiers simples, TryParse de manière sûre pour les nombres, puis un petit séparateur tenant compte des guillemets pour les virgules… Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C# Academy ?
Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 3.
Combien de temps prend la leçon « Modèles simples d’analyse CSV » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?
Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- System.IO (chemins et flux)
- JSON avec System.Text.Json (activations explicites et convertisseurs)
- Modèles simples d’analyse CSV