阅读csv文件C# [英] reading csv file c#

查看:111
本文介绍了阅读csv文件C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有什么办法来读取csv文件为一个矩阵,所以文件中的每一方将在基质细胞?


解决方案

有很多开源CSV读者,而且也很容易自己编写



有关开始采取看codeplex.com:
http://kbcsv.codeplex.com/



或者CodeProject上的教程:
http://www.codeproject.com/KB /database/CsvReader.aspx



有关完成的缘故,这里是我自己的工具类读取CSV文件一行:

  ///<总结> 
///定义CSV读者州
///< /总结>
枚举州
{
初始,
报价,
数据,
NestedQuote
}

/// <总结>
///初始化中的<一个新的实例;见CREF =CsvReader/>类。
///< /总结>
///&下; PARAM NAME =InputStream的>将输入流与所述; /参数>
公共CsvReader(流的InputStream)
{
如果(InputStream的== NULL)
抛出新的ArgumentNullException(InputStream的);

=读者新的StreamReader(InputStream的);
}

///<总结>
///读取CSV数据的一行。
///< /总结>
///<退货和GT; CSV字段<的阵列; /回报>
公共字符串[]阅读()
{
无功行= reader.ReadLine();
变种RETVAL =新的List<串GT;();

如果(行== NULL)
返回NULL;

VAR状态= State.Initial;
变种文字=新的StringBuilder();

的foreach(在网上变种CH)
开关(州)
{
情况下State.Initial:
如果(CH =='')
状态= State.Quote;
如果别人(CH =='')
retval.Add(的String.Empty);
,否则
{
text.Append(CH);
状态= State.Data;
}

中断;

情况下State.Data:
如果(CH ==',')
{
retval.Add(text.ToString());
text.Length = 0;
状态= State.Initial;
}
,否则
text.Append(CH);

中断;

情况下State.Quote:
如果(CH =='')
状态= State.NestedQuote;
,否则
text.Append(CH);

中断;

情况下State.NestedQuote:
如果(CH =='')
{
text.Append('');
状态= State.Quote;
中断;
}

状态= State.Data;
转到情况下State.Data;
}

retval.Add(text.ToString());

返回retval.ToArray();
}

///<总结>
///执行与释放或重置非托管资源相关的应用程序定义的任务。
///< /总结>
公共无效的Dispose()
{
reader.Dispose();
}

为使矩阵(未经测试):

  VAR数据=新的List<字符串[]>(); 
的String []线;使用(读者=新CsvReader(流))


,而((行= reader.Read())!= NULL)
data.Add(线);

结果= data.Select(行= GT; row.Select(小区=方式> int.Parse(单元))的ToArray())。ToArray的();


is there any way to read a csv file into a matrix, so every square in the file will be a cell in the matrix?

解决方案

There are many open source CSV readers, and it's also easy to code your own.

For a start take look at codeplex.com: http://kbcsv.codeplex.com/

Or Codeproject tutorials: http://www.codeproject.com/KB/database/CsvReader.aspx

For sake of completion, here is my own utility class to read a line from a CSV file:

    /// <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();
    }

To make the matrix (untested):

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

这篇关于阅读csv文件C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆