将多行文本框项目转换为数组,然后在另一个数组

时间:2016-06-02 13:22:04

标签: c# arrays

我有一个包含文本行的文件,我已将其读入数组(搜索)。我有一个多行文本框,其中的内容通过单击按钮放入一个数组(行),我试图做的是搜索第一个数组与第二个数组中的每个项目,并添加找到的行到一个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);
        }

2 个答案:

答案 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);

        }
    }

希望这会对你有所帮助。