С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/34: Рейтинг темы: голосов - 34, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 20.05.2010
Сообщений: 36

поиск слов в тексте

14.12.2010, 21:15. Показов 7585. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вот задача: открыть текстовый файл(.txt) при помощи opendialog в поле memo где можно пометь шрифт текста и затем при нажатии кнопки поиск выполнялся поиск одинаковых слов в данном тексте.
я сделал всё кроме поиска. как сделать этот поиск?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.12.2010, 21:15
Ответы с готовыми решениями:

Поиск слов в тексте
Разработать программу, которая осуществляет в текстовом файле поиск заданных слов. Слова последовательно вводятся с клавиатуры. Для каждого...

Поиск однокоренных слов в тексте
Так вот... Да кста, привет :) ... в универе задали задачку уже всю голову сломал, ничего не получается :( Решил спросить у знающих :) ...

Поиск букв, слов в тексте
Здравствуйте. Помогите с заданием. Заранее благодарю. Определить и вывести: 1. Все слова из введенного текста в которых есть буквы...

6
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
14.12.2010, 21:56
Чтобы выполнить поиск слов, надо реализовать последовательное извлечение слов из текста.
Сделать это можно так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.Button1Click(Sender: TObject);
const
  //Разделители слов.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  S : String;
  i, Pos1, Len : Integer;
begin
  Memo2.Clear;
  S := Memo1.Text;
 
  Len := Length(S);
  Pos1 := 0;
  for i := 1 to Len do begin
    //Пропускаем разделители.
    if S[i] in D then Continue;
    //Отслеживаем начало слова.
    if (i = 1) or (S[i - 1] in D) then Pos1 := i;
    //Отслеживаем конец слова.
    if (i = Len) or (S[i + 1] in D) then begin
      //Добавляем слово в Мемо2.
      Memo2.Lines.Add( Copy(S, Pos1, i - Pos1 + 1) );
    end;
  end;
end;
В Мемо1 - исходный текст. Код извлекает их этого текста слова и записывает их в Мемо2.
0
0 / 0 / 0
Регистрация: 20.05.2010
Сообщений: 36
14.12.2010, 22:32  [ТС]
а как сделать сам поиск? допустим в мемо 2 идет только часто повторяющее слово и сколько раз оно повторяется?
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
14.12.2010, 22:39
Решать можно по разному в зависимости от того, как поставлена задача. Есть более чёткая формулировка задания? Например: найти все повторяющиеся слова и подсчитать количество повторов. Или: найти слово с наибольшим количеством повторов. И т. д.
0
0 / 0 / 0
Регистрация: 20.05.2010
Сообщений: 36
15.12.2010, 21:11  [ТС]
Вообще его надо выделить часто повторяющееся слово. но потом сделали дополнение и теперь надо его выделить и подсчитать сколько раз оно повторяется написать

Добавлено через 2 часа 0 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    FontDialog1: TFontDialog;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private
    { Private declarations }
     TotalStr, Res: string;
    List: TStringList;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  f: textfile; s:string;
   M: Array [1..10000] of string;
 i,j,k1,k2,q1,q2: integer;
w,h:integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
opendialog1.Execute;
AssignFile(f,Opendialog1.FileName);
Reset(f);
Memo1.Lines.Clear;
while not Eof(f) do
begin
  Readln(f,s);
  Memo1.Lines.add(s)
end;
closeFile(f);
end;
 
 
procedure TForm1.Button3Click(Sender: TObject);
begin
if fontdialog1.Execute then
memo1.font:=fontdialog1.Font;
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin
 Memo1.Lines.SaveToFile(OpenDialog1.FileName)
end;
 
end.
вот код. надо что бы при нажатии на кнопку 4 выполнялся поиск самого используемого слова и кол-во его повторений. запись идет в label.

Добавлено через 20 часов 20 минут
помогите, не знаю как сделать поиск
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
15.12.2010, 23:41
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
type
  //Сведения о слове.
  TWord = record
    //Само слово.
    SWord : String;
    //Количество обнаружений слова в тексте.
    Cnt : Integer;
  end;
  //Хранилище уникальных слов.
  TVault = record
    //Количество слов в хранилище. - Количество значимых элементов массива.
    Len : Integer;
    //Массив сведений о словах. Длина этого массива,
    //может быть большей или равной Len.
    Arr : array of TWord;
  end;
 
//Добавляет слово в массив хранилища Vault. При этом, если добавляемое
//слово уже присутствует в массиве, тогда счётчик этого слова увеличивается
//на единицу. Если добавляемое слово пока не присутствует в массиве, тогда
//это слово записывается в массив и его счётчик устанавливается равным единице.
procedure AddToVault(var aVault : TVault; const aWord : String);
const
  //Величина приращения длины массива.
  Capacity = 20;
var
  i : Integer;
begin
  with aVault do begin
    //Просматриваем массив - проверяем,
    //есть ли уже в нём такое слово.
    i := 0;
    while i < Len do begin
      //Если такое же слово найдено, то увеличиваем
      //его счётчик на единицу и выходим из цикла.
      if Arr[i].SWord = aWord then begin
        Inc( Arr[i].Cnt );
        Break;
      end;
      Inc(i);
    end;
    //Если в предыдущем цикле слово не найдено, то при выходе
    //из цикла будем иметь равенство i = Len. В этом случае
    //добавляем слово в массив и устанавливаем счётчик этого
    //слова равным единице. Индекс добавляемого слова,
    //равен i.
    if i = Len then begin
      //Если количество значимых элементов массива в настоящий момент
      //равно длине массива, это означает, что в массиве нет места
      //для добавления нового элемента. Поэтому, в этом случае,
      //наращиваем длину массива. Длину массива увеличиваем
      //на велечину Capacity.
      if Len = Length(Arr) then
        SetLength(Arr, Len + Capacity)
      ;
      //Так как мы добавляем в массив новое слово, то количество значимых
      //элементов массива становится на единицу больше.
      Inc(Len);
      //Записываем в массив данные нового элемента (слова).
      Arr[i].SWord := aWord;
      Arr[i].Cnt := 1;
    end;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
const
  //Разделители слов.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  S : String;
  i, Pos1, Len, CntMax : Integer;
  Vault : TVault;
begin
  Memo2.Clear;
  S := Memo1.Text;
  Vault.Len := 0;
 
  //Извлекаем слова и добавляем их в хранилище Vault.
  //Добавление слов в хранилище Vault производится через процедуру AddToVault().
  //Эта процедура спроектирована так, что при записи формируется массив
  //уникальных слов со сведениями о количестве обнаружений каждого слова.
  Len := Length(S);
  Pos1 := 0;
  for i := 1 to Len do begin
    //Пропускаем разделители.
    if S[i] in D then Continue;
    //Отслеживаем начало слова.
    if (i = 1) or (S[i - 1] in D) then Pos1 := i;
    //Отслеживаем конец слова.
    if (i = Len) or (S[i + 1] in D) then begin
      //Добавляем слово в массив.
      AddToVault( Vault, Copy(S, Pos1, i - Pos1 + 1) );
    end;
  end;
  //Определяем наибольшую частоту присутствий.
  CntMax := 0;
  for i := 0 to Vault.Len - 1 do
    if Vault.Arr[i].Cnt > CntMax then
      CntMax := Vault.Arr[i].Cnt
  ;
  Memo2.Lines.Add('Наибольшее число присутствий: ' + IntToStr(CntMax));
  //Перечень слов с наибольшим числом присутствий.
  Memo2.Lines.Add('Перечень слов с наибольшим числом присутствий:');
  for i := 0 to Vault.Len - 1 do
    if Vault.Arr[i].Cnt = CntMax then
      Memo2.Lines.Add(Vault.Arr[i].SWord)
  ;
  //Удаляем из памяти массив слов.
  Finalize(Vault.Arr);
  Vault.Len := 0;
end;
Если использование динамического массива выглядит сложно, можно попробовать применить другие способы решения. Например, можно использовать TStringList. TStringList хранит пары: строка - объект. Вот этот объект, можно приспособить для хранения количества обнаружений. Либо можно применить TPointerList.
Миниатюры
поиск слов в тексте  
Вложения
Тип файла: rar MaxFreqWord.rar (165.7 Кб, 155 просмотров)
1
0 / 0 / 0
Регистрация: 20.05.2010
Сообщений: 36
16.12.2010, 00:15  [ТС]
огромное спасибо!!! все получилось.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2010, 00:15
Помогаю со студенческими работами здесь

Посчитать общее количество слов и определить, сколько слов в этом тексте состоит из двух символов
1) Заданы: массив наименований продукции и соответствующие ему данные плановой рентабельности (RP), фактической цены реализации (C) и...

Дан файл, содержащий текст. Сколько слов в тексте? Сколько цифр в тексте?
Дан файл, содержащий текст. Сколько слов в тексте? Сколько цифр в тексте?

Поиск слов в тексте
Ребят помогите,напишите плиз код - составить прогу которая ищет слова der das die из текста вводимого с клавиатуры

Поиск слов в тексте
Доброго времени суток! Помогите с таким заданием: а) &quot;Найти в тексте слова, которые содержат наименьшее и наибольшее количество символов....

Поиск слов тексте.
Нужно с помощью регулярных выражений выделить в тексте все предложения, в которых упоминается слово &quot;круто&quot; и &quot;класс&quot;. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru