0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 34
1
RAD 2009-XE2

Работа с текстовыми блоками

25.07.2020, 23:18. Показов 451. Ответов 6
Метки нет (Все метки)

Доброе время суток!

Подскажите пожалуйста два вопроса!
1. Как реализовать проверку по количеству параметров команды, т.е. выдавать ошибку в тексте если параметров указано меньше чем должно быть в команде
например: есть 5 команд с одним параметром, записывается так - команда(параметр1)
3 команды по 2 параметра, записывается так - команда(параметр1, параметр2)
3 команды по 5 параметров, записывается так - команда(параметр1, параметр2, [параметр3 параметр4 параметр5])
3 команды по N параметров, записывается так - команда(параметр1, ..., параметрN)

2. Какой компонент использовать чтобы создать всплывающее меню как в Word после вставки текста Название: Снимок.PNG
Просмотров: 63

Размер: 1.5 Кб

за ранее благодарен!!!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2020, 23:18
Ответы с готовыми решениями:

Работа с текстовыми блоками
Доброе время суток! Помогите решить проблему. Пишу редактор скриптов (сценариев) к программе....

работа с текстовыми файлами
Дан текстовый файл, каждая строка которого изображает целое число, дополненное слева и справа...

Работа с текстовыми файлами.
Доброго времени суток. Помогите пожалуйста вот с этим. Работа происходит с текстовыми файлами....

Работа с текстовыми файлами
Доброго времени суток, форумчане ! Есть две простенькие процедуры записи в файл и чтение из...

6
пофигист широкого профиля
4436 / 2926 / 828
Регистрация: 15.07.2013
Сообщений: 16,843
26.07.2020, 02:40 2
Цитата Сообщение от Nuts_nio Посмотреть сообщение
Как реализовать проверку по количеству параметров команды
Какой команды? Кто и как эту команду даёт?
Цитата Сообщение от Nuts_nio Посмотреть сообщение
2. Какой компонент использовать чтобы создать всплывающее меню
TPopupMenu

Не по теме:

P.S. Заранее пишется слитно.

0
2644 / 1473 / 500
Регистрация: 29.05.2013
Сообщений: 6,416
26.07.2020, 11:49 3
Цитата Сообщение от Nuts_nio Посмотреть сообщение
Подскажите пожалуйста два вопроса!
1. Кто виноват?
2. Что делать?

Если у вас действительно есть текст вида:
S := 'команда(параметр1, параметр2)';
и надо из него извлечь значения между скобок, то можно так:
Delphi
1
2
3
4
SL := TStringList.Create;
SL.CommaText := Copy(S, Pos('(', S)+1, Pos(')', S)-Pos('(', S)-1); // Получаем текст между скобками и отдаем для разбора в TStringList, а он уже сам умеет разбивать его по разделителям
for i := 0 to SL.Count - 1
do ToDo(SL.Strings[i]) // Делаем что-то с параметрами
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 34
29.07.2020, 12:49  [ТС] 4
разобрать строку по составляющим это не проблема, нужно проверить совпадает ли кол-во параметров по имени команды.
т.е. команда 1 = 3 параметра и т.д.
нужна помощь в том как написать что команды с 1 по 3 = 3 параметрам, а команды с 4,6,9 = 5 параметрам для проверки перед выполнение команды.
кол-во параметров считаю - описывать не нужно
я так думаю нужно попробовать ввести Tockens ????

Добавлено через 2 минуты
для разделителя проще использовать ExtractWord и не нужно ничего выдумывать
0
2644 / 1473 / 500
Регистрация: 29.05.2013
Сообщений: 6,416
29.07.2020, 19:25 5
ExtractWord во многом заменит TStringList, но в силу своей специализации иногда неприменим, а вот TStringList лишен этого недостатка. Как-то я наступил на грабли с ним и с тех пор использую только TStringList в подобных случаях.
Вот не врубаюсь я вашу хотелку с параметрами. Давайте вы приведете пару конкретных примеров с подробным описанием, может до меня дойдет что вы хотите.
0
Модератор
7272 / 4755 / 1996
Регистрация: 21.01.2014
Сообщений: 20,211
Записей в блоге: 3
30.07.2020, 05:47 6
Цитата Сообщение от Nuts_nio Посмотреть сообщение
нужно проверить совпадает ли кол-во параметров по имени команды
Первое, что на ум приходит - создание справочника команд с указанием числа параметров для каждой команды и работа непосредственно с ним...
Например
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
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private { Private declarations }
    Spr: TStringList;
    function CheckCommand(CmdStr: String; var E: String): boolean;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
//Создание справочника команд и его заполнение
  Spr := TStringList.Create;
  Spr.AddObject('Command_1', TObject(1));
  Spr.AddObject('Command_2', TObject(1));
  Spr.AddObject('Command_3', TObject(2));
  Spr.AddObject('Command_4', TObject(3));
  Spr.AddObject('Command_5', TObject(4));
end;
 
//функция проверок введенной команды
function TForm1.CheckCommand(CmdStr: String; var E: String): boolean;
var
  i, j, k, n: integer;
  s: String;
begin
  result := false;
//Проверка на скобки: наличие как открывающей, так и закрывающей,
//открывающая перед закрывающей
//более полную проверку мутить не стал, если надо - сами сделаете
  i := Pos('(', CmdStr) + 1;
  j := Pos(')', CmdStr);
  if (i = 0) or (j = 0) or (i > j) then begin
    E := 'Неверная расстановка скобок';
    Exit;
  end;
//Проверка на наличие команды в справочнике
  s := Copy(CmdStr, 1, i - 2);
  k := Spr.IndexOf(s);
  if k = -1 then begin
    E := 'Неопознанная команда';
    Exit;
  end;
//Подсчет количества введенных параметров
  with TStringList.Create do
    begin
      CommaText := Copy(CmdStr, i, j - i);
      n := Count;
      Free;
    end;
//Проверка на соответствие количества параметров
  if n <> integer(Spr.Objects[k]) then begin
    E := 'Неcoответствие числа параметров';
    Exit;
  end;
  result := true;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
var ErrMsg: String;
begin
//Пример вызова
  if not CheckCommand(Edit1.Text, ErrMsg) then begin
    ShowMessage(ErrMsg);
    Exit;
  end;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
//Очистка памяти от справочника
  Spr.Free;
end;
 
end.
Миниатюры
Работа с текстовыми блоками  
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 34
04.08.2020, 20:56  [ТС] 7
Решил данную задачу через перечисление команд в Tokens и по их номеру через case указал сколько параметров, далее функция по проверке совпадения параметров в case и их подсчете в тексте, получилось на много проще

Всем огромное спасибо за помощь!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.08.2020, 20:56

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

работа с текстовыми файлами
Дан текстовый файл, каждая строка которого изображает целое число, дополненное слева и справа...

Работа с текстовыми файлами
Нужна программа такого плана: открываем текстовый файл, в нем куча строк смотрим первую строку...

Работа с текстовыми файлами
AssignFile(answea,'Вопросы, Ответы, Правильные ответы, Картинки\Ответы\ANSWE'+inttostr(qa)+'.txt');...

Работа с текстовыми файлами
1. Дан текстовый файл литерных величин. Группы символов, разделенные пробелами (одним или...

Работа с текстовыми файлами
Доброго времени суток! Имеется текстовый файл следующего вида: 51 Фамилия Имя класс балл ......


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.