我想在 C# 的某个数组中读取 4-5 个 CSV 文件
我知道有人问过这个问题,并且我已经完成了这些问题……但是我对 CSV 的使用太简单了……
我有 csv 字段,其中包含以下数据类型的列....
string , string
这些字符串没有','所以没有张力......就是这样。而且它们并不大。每个只有大约 20 条记录。
我只想将它们读入 C# 数组中......
有没有非常非常简单直接的方法来做到这一点?
我想在 C# 的某个数组中读取 4-5 个 CSV 文件
我知道有人问过这个问题,并且我已经完成了这些问题……但是我对 CSV 的使用太简单了……
我有 csv 字段,其中包含以下数据类型的列....
string , string
这些字符串没有','所以没有张力......就是这样。而且它们并不大。每个只有大约 20 条记录。
我只想将它们读入 C# 数组中......
有没有非常非常简单直接的方法来做到这一点?
这包括字段中的引号和逗号。(假设你一次做一条线)
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();
要读取文件,请使用
TextReader reader = File.OpenText(filename);
读取一行:
string line = reader.ReadLine()
然后
string[] tokens = line.Split(',');
将它们分开。
通过在最后两个示例行周围使用循环,您可以将每个标记数组添加到列表中,如果这是您需要的话。
这是将 CSV 内容获取到字符串数组的简单方法。CSV 文件可以有双引号、回车换行和分隔符是逗号。以下是您需要的库:
System.IO;
System.Collection.Generic;
System.IO
是为了FileStream
和StreamReader
类来访问你的文件。这两个类都实现了IDisposable
接口,因此您可以使用这些using
语句来关闭您的流。(下面的例子)
System.Collection.Generic
命名空间用于集合,例如IList
、List
和ArrayList
等。在这个例子中,我们将使用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();
}
希望这可以帮助!非常容易而且非常快速。干杯!