2

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

4

3 回答 3

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

请记住,值是通过列号访问的,然后是行号。

我希望这有帮助。

于 2012-08-24T05:40:41.557 回答
0

您需要做的只是将其转换为 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);

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

于 2012-08-24T05:37:27.717 回答
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];
    }
}
于 2016-10-26T16:49:28.573 回答