007wan |
Отправлено: 22 Ноября, 2019 - 07:14:40
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: Как посчитать сколько всего программ?
Потом по отдельности выводить что в них
CODE:string rn=formatic(13)+formatic(10);
string s="Main_Program|0;"+rn+"Program_1|0;"+rn+"Program_2|0;";
//messagebox(s);
string prog[99], text_prog[99];
int count_prog=regexsearch(sizearray(prog), #prog[0], s, "(?<=^)[^\|]+", MULTILINE);
for(int i=0; i<count_prog; i++)
{
regexsearch(1, #text_prog[i], s, "(?<="+prog[i]+"\|)"+"[^;]+", MULTILINE);
messagebox("Имя: "+prog[i]+rn+"Текст: "+text_prog[i]);
}
Немного не правильно, текст читается не так.
1)Читать должен цифры после названия программы и они могут увеличиваться, например, было так:
Цитата:
Main_Program|0;
Program_1|0;
Program_2|0;
Стало так:
Цитата: Main_Program|0|0;
Program_1|0|0;
Program_2|0|0;
А он читает текст как "0|0", а должен как "0" и потом вторую "0", но перед этим всем "Main_Program".
(Добавление)
И вместо нулей может быть не только цифры, но и текст.
2)Считать должен сколько всего таких коробок, а потом уже выводить сколько программ(Уже есть и работает). |
|
|
Zireael |
Отправлено: 22 Ноября, 2019 - 10:46:38
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Стало так
Так может надо сразу писать какой будет текст.
CODE:string rn=formatic(13)+formatic(10);
string s="Main_Program|0|123;"+rn+"Program_1|10|текст;"+rn+"Program_2|20|text;";
//messagebox(s);
string prog[99], text_prog[99], text2[99];
int count_prog=regexsearch(sizearray(prog), #prog[0], s, "(?<=^)[^\|]+", MULTILINE);
for(int i=0; i<count_prog; i++)
{
regexsearch(1, #text_prog[i], s, "(?<="+prog[i]+"\|)"+"[^;]+", MULTILINE);
int x=regexsearch(-1, #text2[0], text_prog[i], "[^\|]+");
//messagebox("Имя: "+prog[i]+rn+"Текст: "+text_prog[i]);
for(int j=0; j<x; j++)messagebox(text2[j]);
} |
|
|
007wan |
Отправлено: 22 Ноября, 2019 - 10:51:24
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Так я вроде в начале написал, что текст после разделителей я увеличу(ширина текста наверное подумал), но потом добавил, что и сами разделители добавятся.
Цитата: Как посчитать сколько всего программ? Искать должен все программы такие как Main_Program, Program_1, Program_2....Program_10...Program_100........
Потом по отдельности выводить что в них, т.е что после "|"(разделителя), текст после разделителей я в будущем увеличю, как и сами разделители.
Спасибо)
(Добавление)
Zireael , В writebuffer записывается текст без переноса строки так что Цитата: formatic(13)+formatic(10) не учитывается и всё пишется в строчку, а твой код выдает при проверки Цитата: messagebox(count_prog); Только "1", т.е находит только одну программу, как это исправить? PS: rn можно удалить) |
|
|
Zireael |
Отправлено: 22 Ноября, 2019 - 11:47:14
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: В writebuffer записывается текст без переноса строки
Вообще без разницы что записывать.
CODE:char c[100];
strcpy(#c[0], "123"+formatic(13)+formatic(10)+"456"); // строка
messagebox(format(#c[0]));
writebuffer(#c[0], size(#c[0])); // записали в буфер
sleep(100);
char c2[100];
readbuffer(#c2[0], 100); // прочитали
messagebox(format(#c2[0])); |
|
|
007wan |
Отправлено: 22 Ноября, 2019 - 12:27:36
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , А , нашел ошибку, но не знаю как исправить.
Ошибка тут: Цитата: regexsearch(1, #text_prog, s, "(?<="+prog[i]+"\|)"+"[^;]+", MULTILINE); Скорей всего он ищет номер от текст Program. Так не должно. Это для примера. Текст - название программ будет другим, даже с цифрами, а значения могут увеличиваться и быть не только цифровыми, а буквенными
[i](Добавление)
Вот вариации текста, которые могут быть:
Цитата: Main_Program|editing writes: 0;
Program_1|start: false|visual: false;
Program_2|start: false|visual: false;
GameOne|0;
GageTwo|0|0;
GameThree|0|0;
Main_Program|0|0;
Program_1|0|0;
Program_2|0|0;
Я придерживаюсь пока этого:
My Dialog|Editing Writes: 0;
Bo tOne|Start_Script: False|Visual Window: False;
Bot Two|Start Script: False|Visual Window: False;
Bot Three|Start Script: False|Visual Window: False;
Но может я изменю шаблон, например, появится еще строка значения, например для MyDialog изменится на MyDialog|Editing Writes: 0|Events: Undefined;
(Отредактировано автором: 22 Ноября, 2019 - 12:36:33) |
|
|
007wan |
Отправлено: 22 Ноября, 2019 - 12:45:26
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: Но может я изменю шаблон
Ну вот когда определишься, тогда и задавай вопросы на форуме. А то семь пятниц не неделе... Определился. Вот такой.
Цитата: My Dialog|Editing Writes: 0;
Bot One|Start_Script: False|Visual Window: False;
Bot Two|Start Script: False|Visual Window: False;
Bot Three|Start Script: False|Visual Window: False;
А всмысле определишься? Я имею ввиду изменить шаблон, т.е
-Добавить еще один разделитель "|" В конец последнего значения.
-Изменить дефолтные значения, например, "Editing Writes: 0" превратится в просто "0".
Главное отпарсить, что бы находил имена программ, а они могу быть из двух слов(например как сейас) или более, потом ищет значения, значения - это то, что после название программы разделенной "|", таких разделителей может быть много или вообще не быть, так же значения могут состоять из двух или более слов со знаками, другими словами - ПРОСТО ТЕКСТ.
Ты же мне давал код, который правда работал не совсем так, но блин может этот будет лучше с таким шаблоном? |
|
|
Zireael |
Отправлено: 22 Ноября, 2019 - 12:56:07
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Определился. Вот такой.
И что не находит?
CODE:string rn=formatic(13)+formatic(10);
string s="My Dialog|Editing Writes: 0;"+rn+"Bot One|Start_Script: False|Visual Window: False;"+rn+
"Bot Two|Start Script: False|Visual Window: False;"+rn+"Bot Two|Start Script: False|Visual Window: False;";
//messagebox(s);
string prog[99], text_prog[99], text2[99];
int count_prog=regexsearch(sizearray(prog), #prog[0], s, "(?<=^)[^\|]+", MULTILINE);
for(int i=0; i<count_prog; i++)
{
regexsearch(1, #text_prog[i], s, "(?<="+prog[i]+"\|)"+"[^;]+", MULTILINE);
int x=regexsearch(-1, #text2[0], text_prog[i], "[^\|]+");
messagebox("Имя: "+prog[i]+rn+"Текст: "+text_prog[i]);
for(int j=0; j<x; j++)messagebox(text2[j]);
} |
|
|
|