我有一个名为 file.csv 的csv文件,其中包含以下数据
Id Name Address Contact
1 Peter USA 12345
2 Anna UK 45678
3 John USA 9876
我想使用c#搜索名称,并返回地址中的值。 例如。如果用户为Peter打电话,那么应该返回美国。
谁能给我一些想法?
答案 0 :(得分:3)
我建议你创建一些类来保存这些数据:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string Contact { get; set; }
}
然后从您的文件中读取人物:
var person = File.ReadLines("file.csv").Skip(1)
.Select(ParsePersonFromLine)
.Where(p => p.Name == "Peter")
.FirstOrDefault();
if (person != null)
// use person.Address
解析人可以看起来像:
private static Person ParsePersonFromLine(string line)
{
string[] parts = line.Split(',');
return new Person {
Id = Int32.Parse(parts[0]),
Name = parts[1],
Address = parts[2],
Contact = parts[3]
};
}
答案 1 :(得分:1)
您可以创建一个功能来执行此任务,如下所示:
String GetAddress(String searchName)
{
var strLines=File.ReadLines("filepath.csv");
foreach(var line in strLines)
{
if(line.Split(',')[1].Equals(searchName))
return line.Split(',')[2];
}
return "";
}
您可以按以下方式调用上述功能:
String peterAddress=GetAddress("Peter");
编辑:
String address="";
Dictionary<String, String> dict_Name_Address = new Dictionary<string, string>();
var lines=File.ReadLines("FileName.csv");
foreach (var line in lines)
{
dict_Name_Address.Add(line.Split(',')[1],line.Split(',')[2]);
}
if(dict_Name_Address.ContainsKey(searchKey))
address = dict_Name_Address[searchKey];
答案 2 :(得分:0)
如果您的文件格式正确,这应该可以。
var values = File.ReadLines("file.csv")
.Skip(1)
.Select(line => line.Split(','))
.ToList();
var address = values.Where(x => x[1] == "Peter")
.Select(x => x[2])
.First();
答案 3 :(得分:0)
试试这个
class Program
{
static void Main(string[] args)
{
List<string> resLines = new List<string>();
var lines = File.ReadLines("file.csv");
foreach (var line in lines)
{
//here I suppose that your csv file it like this
// 1,Peter,USA,12345
// 2,Anna,UK,45678
var res = line.Split(new char[] {','});
//or name to search
if (res[1] == "Peter")
{
resLines.Add(res[2]);
}
}
//to get the output
foreach (var line in resLines)
{
Console.WriteLine(line);
}
}
}