0Pricing
C# Academy · Aula

Padrões simples de análise de CSV

Analise linhas de CSV: use Split de forma ingênua para arquivos simples, TryParse seguro para números e, em seguida, um pequeno separador ciente de aspas para vírgulas dentro delas.

Padrões simples de análise de CSV é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 3 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 3 aulas no total.

Visão geral da análise de CSV

Objetivo: Analisar CSV pequeno de forma confiável.

  • Comece com um Split simples para arquivos sem aspas
  • Use TryParse para números
  • Trate campos entre aspas com um pequeno analisador

Divisão ingênua (sem aspas)

Para CSV sem aspas, um Split simples funciona e é fácil de ler.

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]);
  }
}

Análise numérica segura

Use Trim e TryParse com uma cultura (por exemplo, InvariantCulture) para evitar falhas com dados inválidos.

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);
  }
}

Por que a divisão ingênua falha

Os campos entre aspas podem conter vírgulas; um Split simples dividirá o campo em várias partes.

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 + "]");
  }
}

Divisão com tratamento de aspas

Um pequeno analisador alterna inQuotes e ignora vírgulas dentro das aspas; ele também trata aspas duplicadas ("").

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 + "]");
  }
}

De CSV a objetos

Combine o divisor com TryParse e uma limpeza mínima para criar objetos tipados com segurança.

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);
    }
  }
}

Regra dos campos entre aspas

Verificação rápida: como tratar corretamente as vírgulas dentro de campos CSV entre aspas?

Recapitulação

Recapitulação: use Split simples para CSV sem aspas, analise números com TryParse e mude para um analisador que reconheça aspas quando os campos puderem conter vírgulas.

Perguntas Frequentes

A aula “Padrões simples de análise de CSV” é grátis?

Sim — o texto completo de “Padrões simples de análise de CSV” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 3 aulas no total.

O que vou aprender em “Padrões simples de análise de CSV”?

Analise linhas de CSV: use Split de forma ingênua para arquivos simples, TryParse seguro para números e, em seguida, um pequeno separador ciente de aspas para vírgulas dentro delas. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 3.

Quanto tempo leva a aula “Padrões simples de análise de CSV”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. System.IO (caminhos, fluxos)
  2. JSON com System.Text.Json (adesão explícita, conversores)
  3. Padrões simples de análise de CSV
← Voltar para C# Academy