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