C # Поиск слова в текстовом файле и отображать, сколько раз это происходит - PullRequest
0 голосов
/ 30 апреля 2018

Я изо всех сил пытаюсь завершить приложение в Visual Studio, C # ... Все слова, как и должно, где это позволяет пользователю открыть текстовый файл и отображает текстовый файл в списке. Часть моего приложения также имеет textBox и searchButton, так что пользователь может искать определенное слово в текстовом файле, а затем есть outputLabel, который должен отображать, сколько раз слово (значение внутри textBox) встречается в текстовом файле. .

Ниже приведен код моей кнопки поиска, и я не уверен, куда идти.

private void searchButton_Click(object sender, EventArgs e)
        {
            int totalAmount;
            totalAmount = AllWords.Count();
        }

Если вам полезно помочь мне, она - остальная часть моего кода для приложения (кстати, "использующий System.IO;" также в моем коде)

namespace P6_File_Reader
{
    public partial class ReadingFiles : Form
    {
        public ReadingFiles()
        {
            InitializeComponent();
        }

        List<string> AllWords = new List<string>();

        private void openButton_Click(object sender, EventArgs e)
        {
            OpenFileDialog NewDialogBox = new OpenFileDialog();

            // will open open file dialog in the same folder as .exe
            NewDialogBox.InitialDirectory = Application.StartupPath;

            // filter only .txt files
            NewDialogBox.Filter = "Text File | *. txt";
            if (NewDialogBox.ShowDialog() == DialogResult.OK)
            {
                // declare the variables
                string Line;
                string Title = "", Author = "";
                string[] Words;
                char[] Delimiters = { ' ', '.', '!', '?', '&', '(', ')',
                                              '-', ',', ':', '"', ';' };

                // declare the streamreader variable
                StreamReader inputfile;

                // to open the file and get the streamreader variable
                inputfile = File.OpenText(NewDialogBox.FileName);

                // to read the file contents
                int count = 0;

                while (!inputfile.EndOfStream)
                {
                    //count lines
                    count++;

                    // to save the title
                    Line = inputfile.ReadLine();
                    if (count == 1) Title = Line;

                    // to save the author
                    else if (count == 2) Author = Line;

                    // else
                    {
                        if (Line.Length > 0)
                        {
                            Words = Line.Split(Delimiters);
                            foreach (string word in Words)
                                if (word.Length > 0) AllWords.Add(word);
                        }
                    }
                }

                // enable searchtextbox AFTER file is opened
                this.searchTextBox.Enabled = true;
                searchTextBox.Focus();

                // close the file
                inputfile.Close();

                // to display the title & author
                titleText.Text = Title + Author;

                totalAmount.Text = AllWords.Count.ToString("n3");

                wordsListBox.Items.Clear();
                int i = 0;
                while (i < 500)
                {
                    wordsListBox.Items.Add(AllWords[i]);
                    i++;
                }
            }

        }

        private void DisplayList(List<string> wordsListBox)
        {
            foreach (string str in wordsListBox)
            {
                MessageBox.Show(str);
            }

        }

Заранее спасибо!

1 Ответ

0 голосов
/ 30 апреля 2018

Один из возможных способов найти число вхождений слова в тексте - подсчет успешных результатов, возвращаемых Regex.Matches .

Предположим, у вас есть текстовый файл и слово для поиска внутри этого текста:
(в конце концов следует символ вроде .,:)$ и т. д.)

string text = new StreamReader(@"[SomePath]").ReadToEnd();
string word = "[SomeWord]" + @"(?:$|\W)";

Это вернет количество совпадений:

int WordCount = Regex.Matches(text, word).Cast<Match>().Count();

Это даст вам позиции указателей внутри текста, где находятся эти слова:

List<int> IndexList = Regex.Matches(text, word).Cast<Match>().Select(s => s.Index).ToList();

Чтобы выполнить поиск без учета регистра, включите RegexOptions.IgnoreCase.

Regex.Matches(text, word, RegexOptions.IgnoreCase)


Уточните шаблон поиска, если этого (несколько общего) недостаточно для получения желаемых результатов.

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

List<string> ListOfWords = Regex.Matches(text, word, RegexOptions.IgnoreCase)
                                .Cast<Match>()
                                .Select(s => s.Value)
                                .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...