簡體   English   中英

使用 C# 將 CSV 文件讀入數組

[英]Read a CSV file in to an array using C#

我正在嘗試編寫將拉入、讀取和分離 csv 文件的代碼。 它有四列,沒有標題。 我已經在網上搜索了幾個小時,但似乎沒有人真正知道答案,所以我希望這里有人可以。 讀入后,我需要它能夠非常具體地拉出,因為它是設計的一部分。 提前致謝!

你的問題有點含糊,但我會盡力回答。

CSV 文件(根據定義)是一個包含逗號分隔值的文件 - 這里的關鍵是逗號用作分隔符。 就我個人而言,我發現在解析時使用不同的分隔符容易減少麻煩。

我創建了以下測試 CSV 文件:

Column1,Column2,Column3,Column4
Row1Value1,Row1Value2,Row1Value3,Row1Value4
Row2Value1,Row2Value2,Row2Value3,Row2Value4
Row3Value1,Row3Value2,Row3Value3,Row3Value4
Row4Value1,Row4Value2,Row4Value3,Row4Value4
Row5Value1,Row5Value2,Row5Value3,Row5Value4

下面是一些代碼,用於將該文件讀入一些簡單的結構中,然后您可以對其進行操作。 您可能希望通過為列和行(以及值)創建類來擴展此代碼。

        string sFileContents = "";

        using (StreamReader oStreamReader = new StreamReader(File.OpenRead("Test.csv")))
        {
            sFileContents = oStreamReader.ReadToEnd();
        }

        List<string[]> oCsvList = new List<string[]>();

        string[] sFileLines = sFileContents.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
        foreach (string sFileLine in sFileLines)
        {
            oCsvList.Add(sFileLine.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries));
        }

        int iColumnNumber = 0;
        int iRowNumber = 0;

        Console.WriteLine("Column{0}, Row{1} = \"{2}\"", iColumnNumber, iRowNumber, oCsvList[iColumnNumber][iRowNumber]);

        iColumnNumber = 4;
        iRowNumber = 2;

        Console.WriteLine("Column{0}, Row{1} = \"{2}\"", iColumnNumber, iRowNumber, oCsvList[iColumnNumber][iRowNumber]);

請記住,值是通過列號訪問的,然后是行號。

我希望這有幫助。

您需要做的只是將其轉換為 byte[] 數組,然后再轉換回 string[builder?]。 然后將每個條目分開,並像這樣解析它。

http://www.digitalcoding.com/Code-Snippets/C-Sharp/C-Code-Snippet-Convert-file-to-byte-array.html

並轉換為字符串:

    // C# to convert a byte array to a string.
byte [] dBytes = ...
string str;
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
str = enc.GetString(dBytes);

你必須明白你需要做一個解析器。 我做了一個拉入雅虎股票,基本上將冒號拆分為數據。

這是一種更簡單的方法來做你想做的事。

var lineCount = File.ReadLines(@"C:\file.txt").Count();
var reader = new StreamReader(File.OpenRead(@"C:\location1.csv"));
int[,] properties = new int[lineCount,4];
for(int i2 = 0; i2 < 4; i2++)
{
    for(int i = 0; i < lineCount; i++)
    {
        var line = reader.ReadLine();
        var values = line.Split(';');
        properties[i,i2] = Convert.ToInt32(values[i2];
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM