Как я могу использовать LINQ, чтобы соответствовать словам - PullRequest
1 голос
/ 16 ноября 2009

У меня довольно много вопросов, и мой первый - как я могу выполнить простой запрос LINQ, чтобы сопоставить слово в файле? Я не пытаюсь быть глупым, но я не правильно понял документацию, которую нашел для LINQ.

Ответы [ 3 ]

3 голосов
/ 16 ноября 2009

Как насчет чего-то вроде следующего?

string yourFileContents = File.ReadAllText("c:/file.txt");
string foundWordOrNull =  Regex.Split(yourFileContents, @"\w").FirstOrDefault(s => s == "someword");

(кто сказал, что C # не может быть кратким?)

Код работает, читая ваш файл, разбивая его на слова и возвращая первое найденное слово, которое называется someword.

РЕДАКТИРОВАТЬ: Из комментария выше было сочтено "не LINQ". Хотя я не согласен (см. Комментарии), я думаю, что здесь необходим более LINQified пример того же подхода; -)

string yourFileContents = File.ReadAllText("c:/file.txt");
var foundWords =  from word in Regex.Split(yourFileContents, @"\w")
                  where word == "someword"
                  select word;

if(foundWords.Count() > 0)
    // do something with the words found
1 голос
/ 16 ноября 2009

Вот пример из MSDN, который подсчитывает вхождения слова в строку (http://msdn.microsoft.com/en-us/library/bb546166.aspx).

string text = ...;

string searchTerm = "data";

//Convert the string into an array of words
string[] source = text.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' },
    StringSplitOptions.RemoveEmptyEntries);

// Create and execute the query. It executes immediately 
// because a singleton value is produced.
// Use ToLowerInvariant to match "data" and "Data" 
var matchQuery = from word in source
         where word.ToLowerInvariant() == searchTerm.ToLowerInvariant()
         select word;

// Count the matches.
int wordCount = matchQuery.Count();
Console.WriteLine("{0} occurrences(s) of the search term \"{1}\" were found.",
    wordCount, searchTerm);

А вот еще одно руководство LINQ по чтению данных из текстового файла http://www.onedotnetway.com/tutorial-reading-a-text-file-using-linq/.

1 голос
/ 16 ноября 2009

создайте новое приложение WindowsForms и используйте следующий код.

вам нужно будет добавить элемент управления меткой надписи, текстовое поле и кнопку

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.IO;

namespace LinqTests
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public String[]
            Content;
        public String
        Value;

        private void button1_Click(object sender, EventArgs e)
        {
            Value = textBox1.Text;

            OpenFileDialog ofile = new OpenFileDialog();
            ofile.Title = "Open File";
            ofile.Filter = "All Files (*.*)|*.*";

            if (ofile.ShowDialog() == DialogResult.OK)
            {
                Content =
                       File.ReadAllLines(ofile.FileName);

                IEnumerable<String> Query =
                    from instance in Content
                    where instance.Trim() == Value.Trim()
                    orderby instance
                    select instance;

                foreach (String Item in Query)
                    label1.Text +=
                        Item + Environment.NewLine;
            }
            else Application.DoEvents();

            ofile.Dispose();
        }
    }
}

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...