我有一个包含文本行的文件,我已将其读入数组(搜索)。我有一个多行文本框,其中的内容通过单击按钮放入一个数组(行),我试图做的是搜索第一个数组与第二个数组中的每个项目,并添加找到的行到一个listView。
我在foreach循环中为item获取null。我尝试用线条和搜索数组交换foreach语句,没有任何变化。
更多信息,请说items.lst包含以下内容。
Cats have four legs
Dogs have four legs
Horses have four legs
Elephants have four legs
在多行文本框中,用户键入Dogs和下一行Horses,按下按钮时我想在列表视图中显示的内容是:
Dogs have four legs
Horses have four legs
public Form1()
{
InitializeComponent();
txtIndex.Text = @"c:\temp\items.lst";
listView1.Columns.Add("Item", 100, HorizontalAlignment.Left);
}
private void btnSearch_Click(object sender, EventArgs e)
{
const string index = @"items.lst";
string[] search = System.IO.File.ReadAllLines(index);
string[] sep = {"\r\n"};
string[] lines = txtList.Text.Split(sep, StringSplitOptions.RemoveEmptyEntries);
foreach (string item in lines.Where(item => search.Contains(item)))
{
listView1.Items.Add(item + Environment.NewLine);
}
}
由于
2016年6月6日 我最终得到了以下工作。
private void btnSearch_Click(object sender, EventArgs e)
{
const string index = @"items.lst";
string[] search = System.IO.File.ReadAllLines(index);
string[] sep = { "\r\n", "\n", "\r" };
string[] lines = txtList.Text.Split(sep, StringSplitOptions.RemoveEmptyEntries);
foreach (string line in search)
{
foreach (string item in lines)
{
if (line.Contains(item))
{
listView1.Items.Add(line + Environment.NewLine);
}
}
}
}
和LINQ版
foreach (string line in from line in search from item in lines where line.Contains(item) select line)
{
listView1.Items.Add(line + Environment.NewLine);
}
答案 0 :(得分:0)
首先将分隔符数组修改为
string[] sep = { "\r\n", "\n", "\r" };
只需添加Trim()函数(不太强制)
foreach (string item in lines.Where(item => search.Contains(item.Trim())))
{
listView1.Items.Add(item + Environment.NewLine);
}
我希望它会对你有所帮助。
答案 1 :(得分:0)
我修改了你的代码
private void btnSearch_Click(object sender, EventArgs e)
{
const string index = @"items.lst";
string[] search = System.IO.File.ReadAllLines(index);
string[] sep = {"\r\n"};
foreach (string item in search)
{
var myitem = lines.Cast<string>().Where(i => item.Contains(i)).FirstOrDefault();
if (myitem != null && myitem.Trim().Length > 0)
listView1.Items.Add(myitem + Environment.NewLine);
}
}
希望这会对你有所帮助。