使用C#将CSV文件读入数组

时间:2012-08-24 03:35:19

标签: c# arrays csv

我正在尝试创建一个可以拉入,读取和分离csv文件的代码。它有四列没有标题。我一直在网上搜索几个小时,似乎没有人真的有答案,所以我希望有人在这里。在读入之后,我需要它能够非常特别地拉动,因为它是设计的一部分。提前谢谢!

3 个答案:

答案 0 :(得分:6)

你的问题有点模糊,但我会尽力回答。

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

请记住,值由列号访问,然后是行号。

我希望这会有所帮助。

答案 1 :(得分:0)

您只需将其转换为byte []数组并返回字符串[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);

你必须明白你需要做一个解析器。我做了一个拉入雅虎股票,基本上将冒号分成数据。

答案 2 :(得分:0)

这是一种更简单的方法,可以做你想做的事。

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