Гость
Map
Форумы / Языки программирования семейства Pascal [закрыт для гостей] / Memo - тормозное. / 2 сообщений из 2, страница 1 из 1
21.04.2023, 16:27
    #365471
s62
s62 Привилегированный пользователь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Memo - тормозное.
Просто Треп написал про задачку: Чат гопоты
Просто Треп 
[игнорируется]
Хотелось бы получить список всех слов литературного английского, состоящих только из букв из списка
q, w, e, r, t, a, s, d, f, g, z, x, c, v, b

Интересно будет взглянуть на результат и на количество. Если чо, это все слова, которые можно набрать левой рукой в кверти.
Нашел я список английских слов, порядка 58 тыс. слов: http://www.mieliestronk.com/corncob_lowercase.txt
Напустил на них вот такую программку.
Код: 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.
unit MainFrm;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TMainForm = class(TForm)
    Memo: TMemo;
    Button1: TButton;
    dlgOpen: TOpenDialog;
    LB: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    function CheckWord(const aWord: string): boolean;
    function CheckLetter(aLetter: Char): boolean;
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

uses
  System.Diagnostics;

{$R *.dfm}

 //q, w, e, r, t, a, s, d, f, g, z, x, c, v, b

const
  WrongLetters: array[0..10] of Char = 'hijklmnopuy';

{ TForm1 }

procedure TMainForm.Button1Click(Sender: TObject);
var List: TStringList;
  i, f: Integer;
  SW: TStopWatch;
begin
  if dlgOpen.Execute() then
  begin
    f := 0;
    List := TStringList.Create;
    try
//      Memo.Clear;
//      Memo.Lines.BeginUpdate;
      LB.Clear;
      LB.Items.BeginUpdate;
      try
        List.LoadFromFile(dlgOpen.FileName);
        SW := TStopWatch.StartNew;
        for i := 0 to List.Count - 1 do
          if CheckWord(List[i]) then
            LB.Items.Add(List[i])
//            Memo.Lines.Add(List[i])
          else inc(f);
        SW.Stop;
        Caption := IntToStr(LB.Items.Count) + ' слов, отброшено ' + IntToStr(f) + ', ' +
          IntToStr(SW.ElapsedTicks div 10000) + ' мсек';
      finally
//        Memo.lines.EndUpdate;
        LB.Items.EndUpdate;
      end;
    finally
      List.Free;
    end;
  end;
end;

function TMainForm.CheckLetter(aLetter: Char): boolean;
var
  i: Integer;
begin
  Result := True;
  for i := Low(WrongLetters) to High(WrongLetters) do
    if aLetter = WrongLetters[i] then
    begin
      Result := False;
      Break;
    end;
end;

function TMainForm.CheckWord(const aWord: string): boolean;
var
  i: Integer;

begin
  Result := True;
  for i := 1 to Length(aWord) do
  if not CheckLetter(aWord[i]) then
  begin
    Result := False;
    Break;
  end;
end;

end.
Из списка программа отобрала 1615 слов, соответствующих условию.
Решил померить скорость. С Memo было порядка 160-170 мс. Потом добавил к Memo ScrollBar, время стало порядка 360 мс. Убрал скролл бар.
Причем обновление Memo запускаю внутри BeginUpdate -- EndUpdate.
Заменил Memo на ListBox, время стало порядка 10 мс.
Т.е. львиную долю времени занимала работа с Memo. Притом, что визуально результат и там, и там выглядит похоже.
Если копировать слова просто в StringList, то 3 мс.
...
Рейтинг: 0 / 0
21.04.2023, 23:37
    #365991
Неуловимый Джо
Участник
[игнорирует гостей]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Memo - тормозное.
Сейчас как раз книгу по Object Pascal читаю.
Марко Кэнту, по последней версии.
На сайте Embarcadero можно скачать.
Соскучился )
...
Рейтинг: 1 / 0
Нравится: Гарыныч
Форумы / Языки программирования семейства Pascal [закрыт для гостей] / Memo - тормозное. / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]