CSV dosyasını okuma ve değerleri bir diziye kaydetme


317

Bir *.csvdosya okumaya çalışıyorum .

*.csv-Dosya noktalı virgül ile ayrılmış iki sütun oluşur ( " ; ").

*.csvStreamReader kullanarak -file okuyabilir ve Split()işlevi kullanarak her satırı ayırmak mümkün . Her sütunu ayrı bir dizide saklamak ve sonra görüntülemek istiyorum.

Bunu yapmak mümkün mü?


2
@Marc: maalesef olmayan ingilizce kültürler (örneğin İtalyan) içinde sizi kullandığı CSV bir excel kaydet ";"ayırıcı olarak ... Bu yapmıştır CSV standart dışı imo :(
digEmAll

25
İnsanlar ayırıcı olarak virgül kullanmasalar bile CSV'yi dosya çağırdığından, CSV'yi her zaman karakterle ayrılmış değerler olarak okurum. Ve pratikte farklı alıntı veya kaçan kurallara sahip çok sayıda lehçe var, teoride bir RFC olsa bile gerçekten bir standarttan konuşamazsınız.
Kodlar

1
CSV dosya uzantısı adı şimdi DSV olarak değiştirilmelidir - Sınırlayıcı Ayrılmış Değerler Dosyası
Ambuj

Dizeyi ayırıcı karakterde bölen tüm cevaplar için, bu en iyi yol değildir. CSV biçiminde bunun kapsamadığı daha fazla kural vardır. Üçüncü taraf ayrıştırıcı kullanmak en iyisidir. Daha fazla bilgi- dotnetcoretutorials.com/2018/08/04/csv-parsing-in-net-core
iliketocode

Yanıtlar:


415

Bunu şu şekilde yapabilirsiniz:

using System.IO;

static void Main(string[] args)
{
    using(var reader = new StreamReader(@"C:\test.csv"))
    {
        List<string> listA = new List<string>();
        List<string> listB = new List<string>();
        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            var values = line.Split(';');

            listA.Add(values[0]);
            listB.Add(values[1]);
        }
    }
}

5
Bunun için teşekkürler, nasıl bir csv dosyasında (aptal beni!) Satır bölmeyi unuttum ama çözüm bana yardımcı oldu :)
Hallaghan

4
3 yıl sonra ve bu soru hala birisine yardım ediyor. Bu konuda kabul görmediğiniz için üzülüyorum.
AdamMc331

12
Alan değerlerini virgül vb.
Mike

12
Bir kullanmalı mıyım usingburada maddesi, ya da en azından elle de buna gibi bir var bir kaynak. Close()readerIDisposible
Assaf İsrail

30
Bu ayrıca şu şekilde yazılmış bir CSV'yi düzgün bir şekilde ayrıştırmayacaktır column1;"Special ; char in string";column3- tools.ietf.org/html/rfc4180
Ole K

173

En sevdiğim CSV ayrıştırıcı. Bu, Microsoft.VisualBasic ad alanı içinde gizli bir hazinedir. Aşağıda bir örnek kod verilmiştir:

using Microsoft.VisualBasic.FileIO;

var path = @"C:\Person.csv"; // Habeeb, "Dubai Media City, Dubai"
using (TextFieldParser csvParser = new TextFieldParser(path))
{
 csvParser.CommentTokens = new string[] { "#" };
 csvParser.SetDelimiters(new string[] { "," });
 csvParser.HasFieldsEnclosedInQuotes = true;

 // Skip the row with the column names
 csvParser.ReadLine();

 while (!csvParser.EndOfData)
 {
  // Read current line fields, pointer moves to the next line.
  string[] fields = csvParser.ReadFields();
  string Name = fields[0];
  string Address = fields[1];
 }
}

Referans eklemeyi unutmayın Microsoft.VisualBasic

Ayrıştırıcı hakkında daha fazla ayrıntı burada verilmiştir: http://codeskaters.blogspot.ae/2015/11/c-easiest-csv-parser-built-in-net.html


6
Bu seçeneği en çok seviyorum. Sınıf bir CSV ayrıştırıcı ve manuel olarak inşa bir şey değil çünkü kaçış karakterleri hakkında endişelenmenize gerek yok.
Timothy Gonzalez

22
Herhangi birinin Microsoft.VisualBasicbununla karşılaşması ve merak etmesi durumunda, varsayılan olarak varsayılan olarak referans verilmediği için çerçeve montajına başvuruyu dahil etmeniz gerekir .
apokryfos

3
Keşke bunu VB6 günlerimden hatırlasaydım, yıllar boyunca bana çok zaman kazandıracaktı. Bazı VB hakkında rant olsa da, değer varsa benim kod için dll & ad alanı ekleme sorunum yok. Bu bir çok LOT değerine sahiptir.
Walter

2
Bu çözüm bir homerun. deneyimlerimden çok güvenilir ayrıştırıcı.
Glenn Ferrie

3
Neden sadece VB dll?
Mark Choi

75

LINQ yolu:

var lines = File.ReadAllLines("test.txt").Select(a => a.Split(';'));
var csv = from line in lines
          select (from piece in line
                  select piece);

^^ Yanlış - Nick tarafından Düzenle

Orijinal yanıtlayıcının csv2 boyutlu bir dizi (diziler içeren bir dizi) ile doldurmaya çalıştığı anlaşılıyor . İlk dizideki her öğe, iç içe dizideki her öğenin o sütuna ait verileri içeren o satır numarasını temsil eden bir dizi içerir.

var csv = from line in lines
          select (line.Split(',')).ToArray();

2
Belki bir şey eksik, ama csv değişkeninin amacının ne olduğundan emin değilim - sadece satırlarda alread aynı veri yapısını yeniden oluşturmak değil mi?
Ben Hughes

13
@ClayShannon .NET 1.1? Ben ... senin için çok üzgünüm.
contactmatt

5
@contactmatt: Seni o duygudan mahrum bırakmayacağım.
B. Clay Shannon

9
Ayrıca csv's alıntı olabilir işaret etmek istiyorum ... Yani string.Split kullanmak uygun bir seçenek değil.
Alxandr

5
Ben alıyorum: 'System.Array' 'Split' için bir tanım içermiyor ve 'System.Array' türünün ilk bağımsız değişkenini kabul eden 'Split' uzantısı yöntemi bulunamadı (kullanma yönergesi veya derleme başvurusu eksik mi? ?)
Kala J

36

Hemen bir dizi oluşturamazsınız çünkü en baştan satır sayısını bilmeniz gerekir (ve bunun için csv dosyasını iki kez okumak gerekir)

Değerleri ikiye depolayabilir List<T>ve daha sonra bunları kullanabilir veya kullanarak bir diziye dönüştürebilirsiniz.List<T>.ToArray()

Çok basit bir örnek:

var column1 = new List<string>();
var column2 = new List<string>();
using (var rd = new StreamReader("filename.csv"))
{
    while (!rd.EndOfStream)
    {
        var splits = rd.ReadLine().Split(';');
        column1.Add(splits[0]);
        column2.Add(splits[1]);
    }
}
// print column1
Console.WriteLine("Column 1:");
foreach (var element in column1)
    Console.WriteLine(element);

// print column2
Console.WriteLine("Column 2:");
foreach (var element in column2)
    Console.WriteLine(element);

NB

Lütfen bunun çok basit bir örnek olduğunu unutmayın . Kullanımı string.Split, bazı kayıtların ;içinde ayırıcı içerdiği durumları dikkate almaz .
Daha güvenli bir yaklaşım için, nuget üzerinde CsvHelper gibi csv'ye özgü bazı kütüphaneleri kullanmayı düşünün.


;Örneğin, değerin bir parçası olduğunu hesaba katmaz "value with ; inside it". Özel karakter içeren CSV surround değerleri, çift tırnak işareti ile değişmez bir dizedir.
ChickenFeet

1
@ChickenFeet: tabiki, altyazının nedeni budur: "Çok basit bir örnek" . Her neyse, bu konuda bir not ekleyebilirim;)
digEmAll

Endişeye gerek yok, diğer cevapların
birçoğunu

1
Regex.Split (sr.ReadLine (), ", (? = (?: [^ \"] * \ "[^ \"] * \ ") * [^ \"] * $) "); // Bulundu SO'da ... bir kütüphaneden daha hızlı
çimdik

34

Bu kütüphaneyle yeni karşılaştım: https://github.com/JoshClose/CsvHelper

Çok sezgisel ve kullanımı kolaydır. Yapılan bir nuget paketine de sahip olmak hızlıdır: http://nuget.org/packages/CsvHelper/1.17.0 . Ayrıca hangi gibi aktif olarak korunur gibi görünüyor.

Noktalı virgül kullanacak şekilde yapılandırmak kolaydır: https://github.com/JoshClose/CsvHelper/wiki/Custom-Configurations


3
Bu en iyi cevap! İçeri girmesi ve yuvarlanması kolay olan sağlam kütüphane.
Tyler Forsythe

3
CsvHelper kütüphanesi harika. Süper hızlı ve kullanımı kolaydır.
Steve Parish

3
Alıntılanan dizeler de dahil olmak üzere csv biçiminin her yönüyle ilgilenebilecek bir kütüphane arıyorsanız, bunu kullanın. Müthiş!
Matt

Teşekkürler, gerçekten güzel bir kütüphane, kullanımı kolay ve çok sağlam.
Sebastián Guerrero

2
Performans Microsoft.VisualBasic.FileIO.TextFieldParser(cf. @ Habeeb'in cevabı) ile nasıl karşılaştırılır ?
bovender

33

Bu ayrıştırıcıyı genellikle kod projesinden kullanıyorum , çünkü bir sürü karakter kaçıyor ve benim için işlediği gibi.


2
bu şey çok iyi ve hızlı. Bir iş durumundaysanız ve çatlamak gerekiyorsa bunu kullanın.
gjvdkamp

8
Bu ayrıştırıcı, NugPro galerisinde LumenWorks.Framework.IO olarak kullanılabilir, eğer indirmek için CodeProject'e kaydolmak istemiyorsanız.
Greg McCoy

30

İşte en çok oy alan cevabın varyasyonu:

var contents = File.ReadAllText(filename).Split('\n');
var csv = from line in contents
          select line.Split(',').ToArray();

csvDeğişken aşağıdaki örnekte olduğu gibi kullanılabilir:

int headerRows = 5;
foreach (var row in csv.Skip(headerRows)
    .TakeWhile(r => r.Length > 1 && r.Last().Trim().Length > 0))
{
    String zerothColumnValue = row[0]; // leftmost column
    var firstColumnValue = row[1];
}

Csv değişkenindeki satırlara ve sütunlara nasıl erişirsiniz?
Matthew Lock

1
kaçış virgülüyle nasıl başa çıkıyorsunuz?
Kuangwei Zhang

Sütunlar içindeki virgülleri işlemez. Daha sağlam kütüphane kullanma CsvHelper başına joshb en olarak cevap
Tim Partridge

11

Satırları ve / veya sütunları atlamanız (kafa-) yapmanız gerekiyorsa, bunu 2 boyutlu bir dizi oluşturmak için kullanabilirsiniz:

    var lines = File.ReadAllLines(path).Select(a => a.Split(';'));
    var csv = (from line in lines               
               select (from col in line
               select col).Skip(1).ToArray() // skip the first column
              ).Skip(2).ToArray(); // skip 2 headlines

Daha fazla işlem yapmadan önce verileri şekillendirmeniz gerekiyorsa oldukça kullanışlıdır (ilk 2 satırın başlıktan oluştuğunu ve ilk sütunun bir satır başlığı olduğunu varsayalım. verileri dikkate almak istiyorum).

Not Aşağıdaki kodu kullanarak başlıkları ve 1. sütunu kolayca alabilirsiniz:

    var coltitle = (from line in lines 
                    select line.Skip(1).ToArray() // skip 1st column
                   ).Skip(1).Take(1).FirstOrDefault().ToArray(); // take the 2nd row
    var rowtitle = (from line in lines select line[0] // take 1st column
                   ).Skip(2).ToArray(); // skip 2 headlines

Bu kod örneği, *.csvdosyanızın aşağıdaki yapısını varsayar :

CSV Matrisi

Not: Boş satırları atlamanız gerekiyorsa - ki bu bazen kullanışlı olabilir, bunu ekleyerek yapabilirsiniz

    where line.Any(a=>!string.IsNullOrWhiteSpace(a))

arasında fromve selectiçinde deyimi LINQ yukarıdaki kod örnekleri.


10

Daha iyi performans için C # Microsoft.VisualBasic.FileIO.TextFieldParser dll kullanabilirsiniz

Yukarıdaki makaleden kod örneğini aşağıda görebilirsiniz

static void Main()
{
    string csv_file_path=@"C:\Users\Administrator\Desktop\test.csv";

    DataTable csvData = GetDataTabletFromCSVFile(csv_file_path);

    Console.WriteLine("Rows count:" + csvData.Rows.Count);

    Console.ReadLine();
}


private static DataTable GetDataTabletFromCSVFile(string csv_file_path)
{
    DataTable csvData = new DataTable();

    try
    {

    using(TextFieldParser csvReader = new TextFieldParser(csv_file_path))
        {
            csvReader.SetDelimiters(new string[] { "," });
            csvReader.HasFieldsEnclosedInQuotes = true;
            string[] colFields = csvReader.ReadFields();
            foreach (string column in colFields)
            {
                DataColumn datecolumn = new DataColumn(column);
                datecolumn.AllowDBNull = true;
                csvData.Columns.Add(datecolumn);
            }

            while (!csvReader.EndOfData)
            {
                string[] fieldData = csvReader.ReadFields();
                //Making empty value as null
                for (int i = 0; i < fieldData.Length; i++)
                {
                    if (fieldData[i] == "")
                    {
                        fieldData[i] = null;
                    }
                }
                csvData.Rows.Add(fieldData);
            }
        }
    }
    catch (Exception ex)
    {
    }
    return csvData;
}

9
Bu kadar verimli değil çünkü Split TextFieldParser'ın yaptığı her şeyi yapmıyor. Örneğin, yorum satırlarını atlayın, tırnak içine alınan alanları işleyin ve başlangıç ​​/ sondaki boşlukları kaldırın. Tam olarak 1: 1 karşılaştırması değil.
Robert McKee

5

Merhabalar, bunu yapmak için statik bir sınıf oluşturdum. + sütun kontrolü + kota işaretinin kaldırılması

public static class CSV
{
    public static List<string[]> Import(string file, char csvDelimiter, bool ignoreHeadline, bool removeQuoteSign)
    {
        return ReadCSVFile(file, csvDelimiter, ignoreHeadline, removeQuoteSign);
    }

    private static List<string[]> ReadCSVFile(string filename, char csvDelimiter, bool ignoreHeadline, bool removeQuoteSign)
    {
        string[] result = new string[0];
        List<string[]> lst = new List<string[]>();

        string line;
        int currentLineNumner = 0;
        int columnCount = 0;

        // Read the file and display it line by line.  
        using (System.IO.StreamReader file = new System.IO.StreamReader(filename))
        {
            while ((line = file.ReadLine()) != null)
            {
                currentLineNumner++;
                string[] strAr = line.Split(csvDelimiter);
                // save column count of dirst line
                if (currentLineNumner == 1)
                {
                    columnCount = strAr.Count();
                }
                else
                {
                    //Check column count of every other lines
                    if (strAr.Count() != columnCount)
                    {
                        throw new Exception(string.Format("CSV Import Exception: Wrong column count in line {0}", currentLineNumner));
                    }
                }

                if (removeQuoteSign) strAr = RemoveQouteSign(strAr);

                if (ignoreHeadline)
                {
                    if(currentLineNumner !=1) lst.Add(strAr);
                }
                else
                {
                    lst.Add(strAr);
                }
            }

        }

        return lst;
    }
    private static string[] RemoveQouteSign(string[] ar)
    {
        for (int i = 0;i< ar.Count() ; i++)
        {
            if (ar[i].StartsWith("\"") || ar[i].StartsWith("'")) ar[i] = ar[i].Substring(1);
            if (ar[i].EndsWith("\"") || ar[i].EndsWith("'")) ar[i] = ar[i].Substring(0,ar[i].Length-1);

        }
        return ar;
    }

}

4
var firstColumn = new List<string>();
var lastColumn = new List<string>();

// your code for reading CSV file

foreach(var line in file)
{
    var array = line.Split(';');
    firstColumn.Add(array[0]);
    lastColumn.Add(array[1]);
}

var firstArray = firstColumn.ToArray();
var lastArray = lastColumn.ToArray();

Yardımın için teşekkürler. Sorunumu çözmeye yardımcı olabilir. Aslında dosyadan veri okumak ve sonra veritabanına eklemek zorunda. Ekleme sırasında (zaten veritabanında veri var) birincil anahtar kısıtlama hatası alıyorum. Bu nedenle, değişkenli zaten var, sonra verileri güncelleyecek şekilde programlamam gerekiyor.
Rushabh Shah

Ben ilk değeri varsayalım PK - veritabanından kimliğine göre bir kayıt almak gerekiyorsa ve bir UPDATE deyimi sorunu varsa, aksi takdirde yeni bir kayıt ekleyin.
Jakub Konecki

3

İşte veri alanlarından birinin verinin bir parçası olarak noktalı virgül (";") olduğu özel bir durum, bu durumda yukarıdaki cevapların çoğu başarısız olacaktır.

Çözüm bu durumda olacak

string[] csvRows = System.IO.File.ReadAllLines(FullyQaulifiedFileName);
string[] fields = null;
List<string> lstFields;
string field;
bool quoteStarted = false;
foreach (string csvRow in csvRows)
{
    lstFields = new List<string>();
    field = "";
    for (int i = 0; i < csvRow.Length; i++)
    {
        string tmp = csvRow.ElementAt(i).ToString();
        if(String.Compare(tmp,"\"")==0)
        {
            quoteStarted = !quoteStarted;
        }
        if (String.Compare(tmp, ";") == 0 && !quoteStarted)
        {
            lstFields.Add(field);
            field = "";
        }
        else if (String.Compare(tmp, "\"") != 0)
        {
            field += tmp;
        }
    }
    if(!string.IsNullOrEmpty(field))
    {
        lstFields.Add(field);
        field = "";
    }
// This will hold values for each column for current row under processing
    fields = lstFields.ToArray(); 
}

2

Açık kaynaklı Angara.Table kitaplığı, CSV'yi yazılan sütunlara yüklemeye izin verir, böylece dizileri sütunlardan alabilirsiniz. Her sütun hem ada hem de dizine göre dizine eklenebilir. Bkz. Http://predictionmachines.github.io/Angara.Table/saveload.html .

Kütüphane CSV için RFC4180'i izler; tür çıkarımı ve çok satırlı dizeleri etkinleştirir.

Misal:

using System.Collections.Immutable;
using Angara.Data;
using Angara.Data.DelimitedFile;

...

ReadSettings settings = new ReadSettings(Delimiter.Semicolon, false, true, null, null);
Table table = Table.Load("data.csv", settings);
ImmutableArray<double> a = table["double-column-name"].Rows.AsReal;

for(int i = 0; i < a.Length; i++)
{
    Console.WriteLine("{0}: {1}", i, a[i]);
}

Sütun türünü kullanarak bir sütun türü görebilirsiniz, ör.

Column c = table["double-column-name"];
Console.WriteLine("Column {0} is double: {1}", c.Name, c.Rows.IsRealColumn);

Kitaplık F # üzerinde odaklandığından, FSharp.Core 4.4 derlemesine bir başvuru eklemeniz gerekebilir; projede 'Referans Ekle'yi tıklayın ve "Montajlar" -> "Uzantılar" altında FSharp.Core 4.4'ü seçin.


2

Doğru bir kütüphane aramak için birkaç saat geçirdim, ama sonunda kendi kodumu yazdım :) İstediğiniz araçlarla dosya (veya veritabanı) okuyabilir ve her satıra aşağıdaki rutini uygulayabilirsiniz:

private static string[] SmartSplit(string line, char separator = ',')
{
    var inQuotes = false;
    var token = "";
    var lines = new List<string>();
    for (var i = 0; i < line.Length; i++) {
        var ch = line[i];
        if (inQuotes) // process string in quotes, 
        {
            if (ch == '"') {
                if (i<line.Length-1 && line[i + 1] == '"') {
                    i++;
                    token += '"';
                }
                else inQuotes = false;
            } else token += ch;
        } else {
            if (ch == '"') inQuotes = true;
            else if (ch == separator) {
                lines.Add(token);
                token = "";
                } else token += ch;
            }
    }
    lines.Add(token);
    return lines.ToArray();
}

1

Yıllardır csvreader.com (ücretli bileşen) kullanıyorum ve hiç sorun yaşamadım. Sağlam, küçük ve hızlı, ancak bunun için ödeme yapmanız gerekiyor. Sınırlayıcıyı istediğiniz gibi ayarlayabilirsiniz.

using (CsvReader reader = new CsvReader(s) {
    reader.Settings.Delimiter = ';';
    reader.ReadHeaders();  // if headers on a line by themselves.  Makes reader.Headers[] available
    while (reader.ReadRecord())
        ... use reader.Values[col_i] ...
}

1

Ben sadece yüksek lisans tezim üzerinde çalışan bir öğrenciyim, ama bunu çözme şeklim ve benim için iyi çalıştı. Önce dosyanızı dizinden seçin (yalnızca csv biçiminde) ve sonra verileri listelere koyarsınız.

List<float> t = new List<float>();
List<float> SensorI = new List<float>();
List<float> SensorII = new List<float>();
List<float> SensorIII = new List<float>();
using (OpenFileDialog dialog = new OpenFileDialog())
{
    try
    {
        dialog.Filter = "csv files (*.csv)|*.csv";
        dialog.Multiselect = false;
        dialog.InitialDirectory = ".";
        dialog.Title = "Select file (only in csv format)";
        if (dialog.ShowDialog() == DialogResult.OK)
        {
            var fs = File.ReadAllLines(dialog.FileName).Select(a => a.Split(';'));
            int counter = 0;
            foreach (var line in fs)
            {
                counter++;
                if (counter > 2)    // Skip first two headder lines
                {
                    this.t.Add(float.Parse(line[0]));
                    this.SensorI.Add(float.Parse(line[1]));
                    this.SensorII.Add(float.Parse(line[2]));
                    this.SensorIII.Add(float.Parse(line[3]));
                }
            }
        }
    }
    catch (Exception exc)
    {
        MessageBox.Show(
            "Error while opening the file.\n" + exc.Message, 
            this.Text, 
            MessageBoxButtons.OK, 
            MessageBoxIcon.Error
        );
    }
}

0

Hala yanlış. Tırnak işaretinde "" değerini telafi etmeniz gerekir. İşte benim çözüm Microsoft tarzı csv.

               /// <summary>
    /// Microsoft style csv file.  " is the quote character, "" is an escaped quote.
    /// </summary>
    /// <param name="fileName"></param>
    /// <param name="sepChar"></param>
    /// <param name="quoteChar"></param>
    /// <param name="escChar"></param>
    /// <returns></returns>
    public static List<string[]> ReadCSVFileMSStyle(string fileName, char sepChar = ',', char quoteChar = '"')
    {
        List<string[]> ret = new List<string[]>();

        string[] csvRows = System.IO.File.ReadAllLines(fileName);

        foreach (string csvRow in csvRows)
        {
            bool inQuotes = false;
            List<string> fields = new List<string>();
            string field = "";
            for (int i = 0; i < csvRow.Length; i++)
            {
                if (inQuotes)
                {
                    // Is it a "" inside quoted area? (escaped litteral quote)
                    if(i < csvRow.Length - 1 && csvRow[i] == quoteChar && csvRow[i+1] == quoteChar)
                    {
                        i++;
                        field += quoteChar;
                    }
                    else if(csvRow[i] == quoteChar)
                    {
                        inQuotes = false;
                    }
                    else
                    {
                        field += csvRow[i];
                    }
                }
                else // Not in quoted region
                {
                     if (csvRow[i] == quoteChar)
                    {
                        inQuotes = true;
                    }
                    if (csvRow[i] == sepChar)
                    {
                        fields.Add(field);
                        field = "";
                    }
                    else 
                    {
                        field += csvRow[i];
                    }
                }
            }
            if (!string.IsNullOrEmpty(field))
            {
                fields.Add(field);
                field = "";
            }
            ret.Add(fields.ToArray());
        }

        return ret;
    }
}

3
Sütun değerlerinde yeni satırlar olduğunda bu durum ele alınmaz;)
Emil

0

Tam olarak ihtiyacınız olan bir kütüphanem var.

Bir süre önce CSV dosyalarıyla çalışmak için yeterince basit ve hızlı bir kütüphane yazmıştım. Aşağıdaki bağlantıdan bulabilirsiniz: https://github.com/ukushu/DataExporter

2 boyutlu dizi ile CSV gibi çalışır. Tam ihtiyacınız gibi.

Örneğin, 3. satırın tüm değerlerine ihtiyaç duymanız durumunda tek yapmanız gereken aşağıdakileri yazmaktır:

Csv csv = new Csv();

csv.FileOpen("c:\\file1.csv");

var allValuesOf3rdRow = csv.Rows[2];

veya 2. hücresini okumak için

var value = csv.Rows[2][1];

-1

şuna bak

CsvFramework kullanarak;

System.Collections.Generic kullanarak;

ad alanı CvsParser {

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Order> Orders { get; set; }        
}

public class Order
{
    public int Id { get; set; }

    public int CustomerId { get; set; }
    public int Quantity { get; set; }

    public int Amount { get; set; }

    public List<OrderItem> OrderItems { get; set; }

}

public class Address
{
    public int Id { get; set; }
    public int CustomerId { get; set; }

    public string Name { get; set; }
}

public class OrderItem
{
    public int Id { get; set; }
    public int OrderId { get; set; }

    public string ProductName { get; set; }
}

class Program
{
    static void Main(string[] args)
    {

        var customerLines = System.IO.File.ReadAllLines(@"Customers.csv");
        var orderLines = System.IO.File.ReadAllLines(@"Orders.csv");
        var orderItemLines = System.IO.File.ReadAllLines(@"OrderItemLines.csv");

        CsvFactory.Register<Customer>(builder =>
        {
            builder.Add(a => a.Id).Type(typeof(int)).Index(0).IsKey(true);
            builder.Add(a => a.Name).Type(typeof(string)).Index(1);
            builder.AddNavigation(n => n.Orders).RelationKey<Order, int>(k => k.CustomerId);

        }, false, ',', customerLines);

        CsvFactory.Register<Order>(builder =>
        {
            builder.Add(a => a.Id).Type(typeof(int)).Index(0).IsKey(true);
            builder.Add(a => a.CustomerId).Type(typeof(int)).Index(1);
            builder.Add(a => a.Quantity).Type(typeof(int)).Index(2);
            builder.Add(a => a.Amount).Type(typeof(int)).Index(3);
            builder.AddNavigation(n => n.OrderItems).RelationKey<OrderItem, int>(k => k.OrderId);

        }, true, ',', orderLines);


        CsvFactory.Register<OrderItem>(builder =>
        {
            builder.Add(a => a.Id).Type(typeof(int)).Index(0).IsKey(true);
            builder.Add(a => a.OrderId).Type(typeof(int)).Index(1);
            builder.Add(a => a.ProductName).Type(typeof(string)).Index(2);


        }, false, ',', orderItemLines);



        var customers = CsvFactory.Parse<Customer>();


    }
}

}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.