найти в строке строку из массива - PullRequest
0 голосов
/ 01 марта 2012

Я не знаю точно, как начать со следующего. С одной стороны, у меня есть текстовый файл, содержащий сто имен С другой стороны, у меня есть столбец в таблице данных, содержащий строки. Я пытаюсь найти в каждой из этих строк одно из имен, содержащихся в текстовом файле. Я думаю, мне придется заполнить массив содержимым моего текстового файла, а затем выполнить итерацию по массиву при поиске в строке?

Любая идея о том, как начать этот, будет оценена. Приветствия

Ответы [ 4 ]

2 голосов
/ 01 марта 2012

Заполните строки из текстового файла в коллекцию (например, список или словарь).

Затем выполните итерации по строкам из столбца с данными и просто проверьте, находится ли строка в коллекции:

if (nameCollection.Contains(namestring)) return true;
0 голосов
/ 01 марта 2012

Сохраните слова в файле в структуру данных, чтобы строки легко находили.Мы можем использовать Trie, так как он использует много общей структуры.Например: если у нас есть строки «ANIMAL» и «ANIMATE», обе строки имеют общий «ANIMA».Данные такого типа могут храниться в дереве (совместное использование сокращает память).

Алгоритм поиска: - Для каждого слова из базы данных ищите слово в дереве в порядке (длина слова).

0 голосов
/ 01 марта 2012

Вы можете сначала добавить все имена в список, а затем добавить все строки определенного столбца в другой список, а затем проверить, содержит ли строка имя или нет .... Я записал код для вашего сценария:

        List<string> listName = new List<string>();
        using (StreamReader reader = new StreamReader("C:\\file1.txt"))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                listName.Add(line); // Adding name in list
            }
        }
        List<string> listRowsStr = new List<string>();
        List<string> listRowContainName = new List<string>();

        //Adding all rows of particular column in list
        listRowsStr=(from name in dt.AsEnumerable()
                   select name.Field<string>("column_name")).ToList<string>();
        foreach (string name in listName)
        {
            foreach (string rowStr in listRowsStr)
            {
                if (rowStr.Contains(name))
                {
                    listRowContainName.Add(rowStr);//Adding the name containing string into the sepearte list i.e.listRowsStr
                }
            }
        }

listRowContainName содержит всю строку с именем текстового файла.

0 голосов
/ 01 марта 2012

Вы также можете использовать класс Regex следующим образом:

        string text = "a b c d e f";
        List<String> dbStrings = new List<string>();
        dbStrings.AddRange(new string[] { "a", "b", "c" });
        foreach (string dbString in dbStrings) {
            string pattern = @"(?<=^|\s)" + dbString + @"(?=\s|$)";
            if (Regex.IsMatch(text, pattern)) {
                Console.WriteLine(dbString);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...