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,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
谢谢!
解决方案 »
- 求教c#入门经典中关于实现洗牌功能的c#代码
- 比较两个txt文件的不同之处
- c#中求汉字的byte型长度
- 请问STRING可以存多大的东西
- 关于至少有一个参数没有被指定值的问题
- C#4.0入门 第二章 任务并行库—第三页 性能的差异
- winfrom 画运动线图和动画演示 很急啊
- 怎么实现A窗体中点击某个TextBox将B窗体显示在TextBox下面,如果下面控件不够则显示在上面
- 用 C# 监控 IE / Firefox 浏览器的内容
- 请问一下c#中泛型字典集合中的add方法如何加入类型为枚举的值??
- c#2005 textbox不接受空格 设计问题
- C# PictureBox 控件能控制显示位置吗?
{
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);
}
}
{
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);
}
}
}
1,zhao er,class 1,A
2,qian long,class 2,B
3,sun xiang,,B比如第三行,class=空值
{
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);
}
}
{
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
[这是最后一行,没字]
你文件发给我看看。你这么说没用。发我qq邮箱:[email protected]
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"
[这是最后一行,没字]非常感谢!
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);
}
}
我这里没编译器,无法确定是不是正确,如果不对,我回家测试后再回复你,你先试试。