data.csv 文件内容:id,name,class,grade
1,zhao er,class 1,A
2,qian long,class 2,B
3,sun xiang, class 1,B
....要求是写一个console application 读取 d:\folder\data.csv然后提示用户输入id,比如输入:1
程序输出本id的其他信息(id是唯一的):name:zhao er; class: class 1, grade:A
谢谢!

解决方案 »

  1.   

    internal void Test()
    {
        var data = File.ReadAllLines("test.csv").Skip(1).Select(line =>
            {
                string[] fields = line.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                return new { Id = fields[0], Name = fields[1], Class = fields[2], Grade = fields[3] };
            }).ToArray();
        Console.WriteLine("输入一个id试试");
        string id = Console.ReadLine();
        var result = data.Where(t => t.Id.Trim() == id.Trim()).FirstOrDefault();
        if (result == null)
        {
            Console.WriteLine("没这个id");
        }
        else
        {
            Console.WriteLine("ID={0} , Name={1} , Class={2}, Grade={3}", result.Id, result.Name, result.Class, result.Grade);
        }
    }
      

  2.   

    class UserInfo
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Class { get; set; }
        public string Grade { get; set; }
        public override string ToString()
        {
            return string.Format("name:{0}; class:{1}; grade:{2}", Name, Class, Grade);
        }
    }class Program
    {
        static void Main(string[] Args)
        {
            if (Args.GetLength(0) == 0)
            {
                Console.WriteLine("usage: program.exe inputfilename.csv");
                return;
            }
            try
            {
                string input = "";
                using (StreamReader sr = new StreamReader(Args[0]))
                {
                    sr.ReadLine();
                    input = sr.ReadToEnd();
                }
                var data = from x in input.Split(new char[] { '\r', '\n' })
                           select new UserInfo()
                           {
                               ID = Convert.ToInt32(x.Split(',')[0]),
                               Name = x.Split(',')[1],
                               Class = x.Split(',')[2],
                               Grade = x.Split(',')[3]
                           };
                 Console.WriteLine("please input id:");
                 int id = Covert.ToInt32(Console.ReadLine());
                 var u = data.Where(x => x.ID == id).SingleOrDefault();
                 if (u == null)
                 {
                     Console.WriteLine("can not find such user.");
                 }
                 else
                 {
                     Console.WriteLine(u);
                 }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
      

  3.   

    感谢,请问wuyazhe如何释放内容呢?
      

  4.   

    哦,程序有问题,如果CSV里面有的无值,则出现异常:id,name,class,grade
    1,zhao er,class 1,A
    2,qian long,class 2,B
    3,sun xiang,,B比如第三行,class=空值
      

  5.   

    去掉参数即可internal void Test()
    {
        var data = File.ReadAllLines("test.csv").Skip(1).Select(line =>
            {
                string[] fields = line.Split(",".ToCharArray());
                return new { Id = fields[0], Name = fields[1], Class = fields[2], Grade = fields[3] };
            }).ToArray();
        Console.WriteLine("输入一个id试试");
        string id = Console.ReadLine();
        var result = data.Where(t => t.Id.Trim() == id.Trim()).FirstOrDefault();
        if (result == null)
        {
            Console.WriteLine("没这个id");
        }
        else
        {
            Console.WriteLine("ID={0} , Name={1} , Class={2}, Grade={3}", result.Id, result.Name, result.Class, result.Grade);
        }
    }
      

  6.   

    多谢,我的文件比较大,有1万多行。程序运行的时候提示index超界,但是我没有办法看到哪一行超界!下面的语句也不管用。catch (Exception ex)
    {
      Console.WriteLine(ex.Source + ex.Message + ex.InnerException + ex.StackTrace);
      Console.ReadLine();
    }
    还有一个问题,源文件里面有的时候用双引号来表示一个字段,里面可能会有逗号;而且源文件最后一行是空行,比不知道问题到底是什么引起的。id,name,class,grade
    1,zhao er,class 1,A
    2,qian long,class 2,B
    3,sun xiang,,B
    4,"san, ge, zi",class 1,C
    [这是最后一行,没字]
      

  7.   

    那你最好用数据库的方法访问 csv。
      

  8.   


    你文件发给我看看。你这么说没用。发我qq邮箱:[email protected]
      

  9.   

    多谢wuyazhe,我虽然不可以法数据(内部保密的),但是如果下面的测试通过就应该可以了:id,name,class,grade
    1,zhao er,class 1,A
    2,qian long,class 2,B
    3,sun xiang,,B
    4,"san, ge, zi",class 1,C
    5,"san, jia",class 1,"C,A"
    [这是最后一行,没字]非常感谢!
      

  10.   

    try
    internal void Test()
    {
        var data = File.ReadAllLines("test.csv").Skip(1).Where(line=>Regex.IsMatch(line,@"((""[^""]*""|[^"",])*,){3}(""[^""]*""|[^"",\r\n])*")).Select(line =>
            {
                string[] fields = line.Split(",".ToCharArray());
                return new { Id = fields[0], Name = fields[1], Class = fields[2], Grade = fields[3] };
            }).ToArray();
        Console.WriteLine("输入一个id试试");
        string id = Console.ReadLine();
        var result = data.Where(t => t.Id.Trim() == id.Trim()).FirstOrDefault();
        if (result == null)
        {
            Console.WriteLine("没这个id");
        }
        else
        {
            Console.WriteLine("ID={0} , Name={1} , Class={2}, Grade={3}", result.Id, result.Name, result.Class, result.Grade);
        }
    }
    我这里没编译器,无法确定是不是正确,如果不对,我回家测试后再回复你,你先试试。
      

  11.   

    ok, 揭帖了,不明白的问题在这里:http://topic.csdn.net/u/20110908/21/c9c95e1a-68c4-45f5-8920-6c809955999c.html