-5

我想在 C# 的某个数组中读取 4-5 个 CSV 文件

我知道有人问过这个问题,并且我已经完成了这些问题……但是我对 CSV 的使用太简单了……

我有 csv 字段,其中包含以下数据类型的列....

string , string

这些字符串没有','所以没有张力......就是这样。而且它们并不大。每个只有大约 20 条记录。

只想将它们入 C# 数组中......

有没有非常非常简单直接的方法来做到这一点

4

3 回答 3

3

这包括字段中的引号和逗号。(假设你一次做一条线)

using Microsoft.VisualBasic.FileIO;   //For TextFieldParser

// blah blah blah

StringReader csv_reader = new StringReader(csv_line);

TextFieldParser csv_parser = new TextFieldParser(csv_reader);
csv_parser.SetDelimiters(",");
csv_parser.HasFieldsEnclosedInQuotes = true;
string[] csv_array = csv_parser.ReadFields();
于 2015-01-15T15:42:10.243 回答
3

要读取文件,请使用

TextReader reader = File.OpenText(filename);

读取一行:

string line = reader.ReadLine()

然后

string[] tokens = line.Split(',');

将它们分开。

通过在最后两个示例行周围使用循环,您可以将每个标记数组添加到列表中,如果这是您需要的话。

于 2013-04-24T15:07:39.977 回答
1

这是将 CSV 内容获取到字符串数组的简单方法。CSV 文件可以有双引号、回车换行和分隔符是逗号。以下是您需要的库:

System.IO; System.Collection.Generic;

System.IO是为了FileStreamStreamReader类来访问你的文件。这两个类都实现了IDisposable接口,因此您可以使用这些using语句来关闭您的流。(下面的例子)

System.Collection.Generic命名空间用于集合,例如IListListArrayList等。在这个例子中,我们将使用List该类,因为在我看来,列表比数组更好。但是,在返回出站变量之前,我将调用.ToArray()成员方法来返回数组。

有很多方法可以从文件中获取内容,我个人更喜欢使用while(condition)循环来迭代内容。在condition子句中,使用!lReader.EndOfStream. 虽然不是流结束,但继续迭代文件。

public string[] GetCsvContent(string iFileName)
{
    List<string> oCsvContent = new List<string>();
    using (FileStream lFileStream = 
                  new FileStream(iFilename, FileMode.Open, FileAccess.Read))
    {
        StringBuilder lFileContent = new StringBuilder();
        using (StreamReader lReader = new StreamReader(lFileStream))
        {
            // flag if a double quote is found
            bool lContainsDoubleQuotes = false; 
            // a string for the csv value
            string lCsvValue = "";
            // loop through the file until you read the end
            while (!lReader.EndOfStream)
            {
                // stores each line in a variable
                string lCsvLine = lReader.ReadLine();
                // for each character in the line...
                foreach (char lLetter in lCsvLine)
                {
                    // check if the character is a double quote
                    if (lLetter == '"')
                    {
                        if (!lContainsDoubleQuotes)
                        {
                            lContainsDoubleQuotes = true;
                        }
                        else
                        {
                            lContainsDoubleQuotes = false;
                        }
                    }
                    // if we come across a comma 
                    // AND it's not within a double quote..
                    if (lLetter == ',' && !lContainsDoubleQuotes)
                    {
                        // add our string to the array
                        oCsvContent.Add(lCsvValue);
                        // null out our string
                        lCsvValue = "";
                    }
                    else
                    {
                        // add the character to our string
                        lCsvValue += lLetter;
                    }
                }
            }
        }
    }
    return oCsvContent.ToArray();
}

希望这可以帮助!非常容易而且非常快速。干杯!

于 2015-03-02T16:11:39.753 回答