https://drive.google.com/open?id...FExo28lpm5goL4LG
Скачать dll и закинуть в папку с kibor.exe.
Доступные функции:
Pos - поиск позиции подстроки в строке. Возвращает индекс первого символа найденной подстроки. Позиция начинается с 0, если не найдено вернёт -1.
IndexOfchar - поиск подстроки в массиве char. Возвращает количество совпадений и в массив int индексы строк, которые соответствуют поиску. Если не найдено вернёт 0.
IndexOfstring - поиск подстроки в массиве string. Возвращает количество совпадений и в массив int индексы строк, которые соответствуют поиску. Если не найдено вернёт 0.
Синтаксис:
Pos(<строка, в которой найти>, <что найти> )
IndexOfchar(<адрес массива char, в котором найти>, <количество строк в массиве>, <длина строк в массиве>, <адрес массива int принимающего результат>, <что найти> )
IndexOfstring(<адрес массива string, в котором найти>, <количество строк в массиве>, <количество столбцов в массиве>, <адрес массива int принимающего результат>, <что найти> )
Если массив string одномерный, то <количество столбцов в массиве> указать -1. Массив, принимающий результат, должен быть одномерным. Смотреть примеры.
Если массив string двухмерный, то массив, принимающий результат, должен быть двухмерным. Смотреть примеры.
Все функции поддерживают регулярные выражения. Т. е. подстрока поиска может быть регулярным выражением.
Описание регулярных выражений:
https://msdn.microsoft.com/en-us...ry/bb982727.aspx
Примеры:
Поиск позиции подстроки в строке (Отобразить)CODE:external(INT, "Pos", "Pos", pathfolder()+"IndexOf.dll");
string rn=formatic(13)+formatic(10); // перенос строки для messagebox
string s="Какой-то текст 123, ещё текст";
int x=Pos(s, "123"); // в строке s найти позицию числа 123
messagebox("В строке: "+rn+s+rn+"найти позицию числа 123");
messagebox("Позиция "+format(x)); // позиция начинается с 0
s="Число 987"; // строка
x=Pos(s, "\d+"); // в строке s найти позицию первого числа
messagebox("В строке: "+rn+s+rn+"найти позицию первого числа");
messagebox("Позиция "+format(x));
char a[20]; // массив на 20 символов
strcpy(#a[0], "33 коровы"); // копируем в массив строку "33 коровы"
x=Pos(format(#a[0]), "коров"); // найти позицию слова корова
messagebox("В массиве char: "+rn+format(#a[0])+rn+"найти позицию слова коров");
messagebox("Позиция "+format(x));
Поиск подстроки в массиве char (Отобразить)// Найти строки с числами
external(INT, "IndexOfchar", "IndexOfchar", pathfolder()+"IndexOf.dll" );
char a[5][10]; // массив на 5 строк длиной не более 9 символов
strcpy(#a[0][0], "123" ); // копировать строку в массив
strcpy(#a[1][0], "asd" );
strcpy(#a[2][0], "456" );
strcpy(#a[3][0], "789" );
strcpy(#a[4][0], "ert" );
new int result[sizearray(a)]; // массив, в который запишутся индексы строк
string r="\d+"; // регулярное выражение, означающее любое число
int z=IndexOfchar(address(#a[0][0]), sizearray(a), sizearray(a[]), address(#result[0]), r);
messagebox("Найдено строк: "+format(z));
if (z>0)
{
for(int i=0; i<z; i++)messagebox("Индекс в массиве: "+format(result[i]));
for(i=0; i<z; i++)
{
int index=result[i];
messagebox(format(#a[index][0]));
}
}
Поиск подстроки в одномерном массиве string (Отобразить)CODE:// Найти строки с числами
external(INT, "Pos", "Pos", pathfolder()+"IndexOf.dll");
external(INT, "IndexOfstring", "IndexOfstring", pathfolder()+"IndexOf.dll");
string s[6];
s[0]="ggg";
s[1]="hhh";
s[2]="в этой строке есть число 555";
s[3]="ggа";
s[4]="и тут есть число 123";
s[5]="ggа";
string r="\d+"; // регулярное выражение, означающее любое число
new int result[sizearray(s)]; // массив, в который запишутся индексы найденных строк
int z=IndexOfstring(address(#s[0]), sizearray(s), -1, address(#result[0]), r);
messagebox("Найдено строк: "+format(z));
if (z>0)
{
for(int i=0; i<z; i++)messagebox("Индекс в массиве: "+format(result[i]));
for(i=0; i<z; i++)
{
int index=result[i];
messagebox(s[index]);
int position=Pos(s[index], r);
messagebox("Позиция числа в строке: "+format(position));
}
}
Поиск подстроки в двухмерном массиве string (Отобразить)CODE:external(INT, "IndexOfstring", "IndexOfstring", pathfolder()+"IndexOf.dll");
string r="\d+"; // регулярное выражение, означающее число любой длины
string s[4][3]; // массив на 4 строки по 3 столбца
s[0][0]="ggg"; s[0][1]="321"; s[0][2]="Тут был Вася";
s[1][0]="yyy"; s[1][1]="dsa"; s[1][2]="999";
s[2][0]="fgа"; s[2][1]="Вася тут был"; s[2][2]="asd";
s[3][0]="ggа"; s[3][1]="638"; s[3][2]="df";
new int result[sizearray(s)*sizearray(s[])][2]; // массив, в который запишутся индексы найденных строк
// Найти строки с числами
messagebox("Найти строки, в которых есть числа");
int z=IndexOfstring(address(#s[0][0]), sizearray(s), sizearray(s[]), address(#result[0][0]), r);
messagebox("Найдено строк: "+format(z));
if (z>0)
{
for(int i=0; i<z; i++)messagebox("Индексы в массиве: "+format(result[i][0])+" "+format(result[i][1]));
for(i=0; i<z; i++)
{
int x=result[i][0];
int y=result[i][1];
messagebox(s[x][y]);
}
}
delete result;
new int result[sizearray(s)*sizearray(s[])][2];
messagebox("Найти строки, в которых есть слово Вася");
z=IndexOfstring(address(#s[0][0]), sizearray(s), sizearray(s[]), address(#result[0][0]), "Вася");
if(z>0)
{
for(i=0; i<z; i++)
{
x=result[i][0];
y=result[i][1];
messagebox("Индексы в массиве: "+format(x)+" "+format(y)+
formatic(13)+formatic(10)+s[x][y]);
}
}