gpt4 book ai didi

c# - 读取csv文件c#

转载 作者:太空宇宙 更新时间:2023-11-03 19:33:33 24 4
gpt4 key购买 nike

有什么方法可以将 csv 文件读入矩阵,以便文件中的每个方 block 都是矩阵中的一个单元格?

最佳答案

有许多开源 CSV 阅读器,编写您自己的代码也很容易。

首先看看 codeplex.com: http://kbcsv.codeplex.com/

或 Codeproject 教程: http://www.codeproject.com/KB/database/CsvReader.aspx

为了完成,这是我自己的实用程序类,用于从 CSV 文件中读取一行:

    /// <summary>
/// Defines CSV reader states
/// </summary>
enum State
{
Initial,
Quote,
Data,
NestedQuote
}

/// <summary>
/// Initializes a new instance of the <see cref="CsvReader"/> class.
/// </summary>
/// <param name="inputStream">The input stream.</param>
public CsvReader(Stream inputStream)
{
if (inputStream == null)
throw new ArgumentNullException("inputStream");

reader = new StreamReader(inputStream);
}

/// <summary>
/// Reads a single line of CSV data.
/// </summary>
/// <returns>Array of CSV fields</returns>
public string[] Read()
{
var line = reader.ReadLine();
var retval = new List<string>();

if (line == null)
return null;

var state = State.Initial;
var text = new StringBuilder();

foreach (var ch in line)
switch (state)
{
case State.Initial:
if (ch == '"')
state = State.Quote;
else if (ch == ',')
retval.Add(string.Empty);
else
{
text.Append(ch);
state = State.Data;
}

break;

case State.Data:
if (ch == ',')
{
retval.Add(text.ToString());
text.Length = 0;
state = State.Initial;
}
else
text.Append(ch);

break;

case State.Quote:
if (ch == '"')
state = State.NestedQuote;
else
text.Append(ch);

break;

case State.NestedQuote:
if (ch == '"')
{
text.Append('"');
state = State.Quote;
break;
}

state = State.Data;
goto case State.Data;
}

retval.Add(text.ToString());

return retval.ToArray();
}

/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
public void Dispose()
{
reader.Dispose();
}

制作矩阵(未测试):

var data = new List<string[]>();
string[] line;

using(reader = new CsvReader(stream))
while((line = reader.Read()) != null)
data.Add(line);

result = data.Select(row => row.Select(cell => int.Parse(cell)).ToArray()).ToArray();

关于c# - 读取csv文件c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3509640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com