在c#中的控制台应用程序中显示csv读取数据

时间:2017-10-23 12:48:03

标签: c# csv

我是编程新手,并尝试根据c#中的列值从csv文件中获取完整的行数据。示例数据如下: Mat_No;Device;Mat_Des;Dispo_lvl;Plnt;MS;IPDS;TM;Scope;Dev_Cat 1111;BLB A601;BLB A601;T2;PW01;10;;OP_ELE;LED; 2222;ALP A0001;ALP A0001;T2;PW01;10;;OP_ELE;LED;

如果用户输入Mat_No,他将获得该特定号码的完整行数据。
我有两个文件program.cs和filling.cs
overViewArea.cs包含以下csv文件读取代码:
我不知道如何从program.cs文件访问读取值并在控制台中显示

`using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Data;

namespace TSDB
{
    class fillData

    {
        public static fillData readCsv()
        {
            fillData getData= new fillData ();

            using (var reader = new StreamReader(@"myfile.csv"))
            {
                List<string> headerList = null;


                while (!reader.EndOfStream)

                {
                    var line = reader.ReadLine();
                    if(headerList==null)
                    {
                        headerList = line.Split(';').ToList();
                    }
                    else
                    {
                        var values = line.Split(';');
                        for(int i = 0; i< headerList.Count; i++)
                        {
                            Console.Write(headerList[i] + "=" + values[i]+";");
                        }
                        Console.WriteLine();
                    }

                }
            }

            return fillData;
        }



    }
}`


Program.cs有以下代码

class Program
{
    static void Main(string[] args)
    {
        fillData data= fillData.readCsv();
        Console.ReadLine();
    }

}

1 个答案:

答案 0 :(得分:3)

首先,请不要重新发明轮子:有许多可用的CSV阅读器:只使用其中一个。如果您必须使用您自己的例程(例如,对于学生项目),我建议提取方法。尝试使用File课程代替Stream / StreamReader

// Simple: quotation has not been implemented
// Disclamer: demo only, do not use your own CSV readers
public static IEnumerable<string[]> ReadCsvSimple(string file, char delimiter) {
  return File
    .ReadLines(file)
    .Where(line => !string.IsNullOrEmpty(line)) // skip empty lines if any
    .Select(line => line.Split(delimiter));
}

实施此例程后,您可以使用 Linq 查询数据,例如

  

如果用户输入Mat_No,他将获得该特定的完整行数据   号。

Console.WriteLine("Mat No, please?");  
string Mat_No_To_Filter = Console.ReadLine();

var result = ReadCsvSimple(@"myfile.csv", ';')
  .Skip(1)
  .Where(record => record[0] == Mat_No_To_Filter);

foreach (var items in result) 
  Console.WriteLine(string.Join(";", items));