写一个C#代码来提取一个.csv文件,如果我给出第一列的一个元素,我就会得到另外两列的对应值
这是我的.csv文件:写一个C#代码来提取一个.csv文件,如果我给出第一列的一个元素,我就会得到另外两列的对应值,c#,C#,这是我的.csv文件: Apple,rose,tiger Mango,lily,cheetah Banana,sunflower,lion Apple,marigold,cat 输入:Mango(我把它写在文本框中) 期望输出: Flower = lily; Animal = cheetah Flower = rose,marigold; Animal = tiger,cat 同样地 输入:Apple 期望输出: Flower = lily; Animal = cheetah
Apple,rose,tiger
Mango,lily,cheetah
Banana,sunflower,lion
Apple,marigold,cat
输入:Mango
(我把它写在文本框中)期望输出:
Flower = lily; Animal = cheetah
Flower = rose,marigold; Animal = tiger,cat
同样地
输入:Apple
期望输出:
Flower = lily; Animal = cheetah
Flower = rose,marigold; Animal = tiger,cat
这是我写的代码:
private void button1_Click(object sender, EventArgs e)
{
using (var reader = new StreamReader(@"C:\asp_net\abc.csv"))
{
List<string> listA = new List<string>();
List<string> listB = new List<string>();
List<string> listC = new List<string>();
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
listA.Add(values[0]);
listB.Add(values[1]);
listC.Add(values[2]);
}
string checkThis = obj.SearchSenSig(textBox1.Text);
if (listA.Any(checkThis.Contains))
{
int count = listA.Where(x => x.Equals(checkThis)).Count();
if (count == 1)
{
int index = listA.IndexOf(checkThis);
var firstItem = listB.ElementAt(index);
var secondItem = listC.ElementAt(index);
MessageBox.Show(String.Format("receiver = {0}, url = {1}", firstItem, secondItem));
}
else
{
foreach (string item in listA)
{
int i = listA.IndexOf(item);
bool result = item.Equals(checkThis);
if (result)
{
List<string> myCollection1 = new List<string>();
myCollection1.Add(listB.ElementAt(i));
string firstItem = string.Join(",", myCollection1);
List<string> myCollection2 = new List<string>();
myCollection2.Add(listC.ElementAt(i));
string secondItem = string.Join(",", myCollection2);
MessageBox.Show(String.Format("Flower = {0}, Animal = {1}", firstItem, secondItem));
}
}
}
}
else
{
MessageBox.Show("The search element does not exists.");
}
}
private void按钮1\u单击(对象发送者,事件参数e)
{
使用(var reader=newstreamreader(@“C:\asp\u net\abc.csv”))
{
List listA=新列表();
List listB=新列表();
List listC=新列表();
而(!reader.EndOfStream)
{
var line=reader.ReadLine();
var值=行分割(',');
listA.Add(值[0]);
列表B.添加(值[1]);
添加(值[2]);
}
字符串检查this=obj.SearchSenSig(textBox1.Text);
if(listA.Any(checkThis.Contains))
{
int count=listA.Where(x=>x.Equals(checkThis)).count();
如果(计数=1)
{
int index=listA.IndexOf(选中此项);
var firstItem=listB.ElementAt(索引);
var secondItem=listC.ElementAt(索引);
Show(String.Format(“receiver={0},url={1}”,firstItem,secondItem));
}
其他的
{
foreach(列表A中的字符串项)
{
int i=列表a.IndexOf(项目);
bool result=item.Equals(选中此项);
如果(结果)
{
List myCollection1=新列表();
myCollection1.Add(列表B.ElementAt(i));
string firstItem=string.Join(“,”,myCollection1);
List myCollection2=新列表();
myCollection2.Add(listC.ElementAt(i));
string secondItem=string.Join(“,”,myCollection2);
Show(String.Format(“Flower={0},Animal={1}”,firstItem,secondItem));
}
}
}
}
其他的
{
Show(“搜索元素不存在”);
}
}
我仍然没有得到所需的输出。请帮助。不要为每列创建不同的列表,而是创建一个类来保存整行数据:
class Data // I'll bet you can find a better name for this class...
{
public string Fruit {get;set;}
public string Flower {get;set;}
public string Animal {get;set;}
}
并填充此类的列表:
private List<Data> data = new List<Data>(); // note: this is a field, not a local variable.
现在,在按钮\u click
事件处理程序中需要做的就是获取与搜索字符串对应的所有项目。假设您仅使用该方法搜索水果并显示结果:
var result = data.FindAll(d => d.Fruit == searchString);
这将返回一个数据列表
,其中水果
属性包含与搜索字符串
相同的字符串。使用linq和string。Join将结果格式化为字符串:
var resultString = $"Flower = {string.Join(",", result.Select(r => r.Flower))}; Animal = {string.Join(",", result.Select(r => r.Animal))}";
你到底得到了什么?你知道如何调试你的代码(设置断点并逐步遍历你的文件)?private void Form1_Load(object sender,EventArgs e){obj=new WebService1SoapClient();//错误:'}预期的'私有列表数据=new List();}}}//在我的代码末尾,我得到了一个错误“类型或名称空间定义,或预期的文件结尾”,很难理解您在注释中发布的代码,尤其是添加了注释的代码。请将代码粘贴到第三方网站,如rextester或.net fiddle,并在其中添加链接进行评论。