Zireael |
Отправлено: 31 Октября, 2019 - 02:29:09
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: как можно подсчитать сколько раз повторялись строки?
code (Отобразить)CODE:string path_in="C:\как сделать.txt"; // файл со строками
string path_out="C:\как сделать2.txt"; // куда сохранить результат
string s, string_first, count_double[99999];
char BOM[3]={239, 187, 191}
char c[9999999];
int no_repeat=0;
if(fopen(path_in, "rb")) // открыть файл для чтения
{
int count_symbol=freadb(#c[0], sizearray(c))-1; // прочитать файл в массив
fclose();
if(formatci(c[0])==239 && formatci(c[1])==187 && formatci(c[2])==191)s=format(#c[3], count_symbol); // если utf8
else s=format(#c[0], count_symbol); // иначе ansi
if(fopen(path_out, "wb")) // открыть файл для записи
{
// если utf8 записать в файл метку
if(formatci(c[0])==239 && formatci(c[1])==187 && formatci(c[2])==191)fwriteb(#BOM[0], sizearray(BOM));
textbkcolor(16000, 65279);
while(regexsearch(1, #string_first, s, "[^\r\n]+")) // поиск первой строки
{
textout(0, 300, 300, "Количество неповторяющихся строк: "+format(no_repeat), 1);
no_repeat++;
int x=regexsearch(sizearray(count_double), #count_double[0], s, string_first, MULTILINE); // узнаём сколько всего таких строк
strcpy(#c[0], string_first+" "+format(x)+formatic(13)+formatic(10));
fwriteb(#c[0], size(#c[0])); // записываем в файл строку и сколько раз она повторяется
regexreplace(-1, #s, s, string_first, "", MULTILINE); // удаляем все копии строки
}
fclose();
start(path_out);
}
}
Быстрее не получится, кибор не предназначен.
Если конвертировать файл в ansi, то выполнит в 2 раза быстрее. |
|
|
Zireael |
Отправлено: 01 Ноября, 2019 - 12:08:10
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Если использовать эту длл https://kibor-bot.com/forum/topi...m=6&topic=65, то выполнит быстрее в несколько раз.
code (Отобразить)CODE:external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll" );
external(INT, "regex_iterator", "regex_iterator", pathfolder()+"\regex.dll" );
external(INT, "regex_replace", "regex_replace", pathfolder()+"\regex.dll" );
char result[1][999];
char result2[9999][999];
string path_in="C:\как сделать.txt"; // файл со строками
string path_out="C:\как сделать2.txt"; // куда сохранить результат
string s;
char BOM[3]={239, 187, 191}
char c[9999999];
int no_repeat=0;
if(fopen(path_in, "rb")) // открыть файл для чтения
{
int count_symbol=freadb(#c[0], sizearray(c))-1; // прочитать файл в массив
fclose();
if(formatci(c[0])==239 && formatci(c[1])==187 && formatci(c[2])==191)s=format(#c[3], count_symbol); // если utf8
else s=format(#c[0], count_symbol); // иначе ansi
if(fopen(path_out, "wb")) // открыть файл для записи
{
// если utf8 записать в файл метку
if(formatci(c[0])==239 && formatci(c[1])==187 && formatci(c[2])==191)fwriteb(#BOM[0], sizearray(BOM));
textbkcolor(16000, 65279);
while(regex_search(s, "[^\r\n]+", address(#result[0][0]), sizearray(result), sizearray(result[])))
{
textout(0, 300, 300, "Количество неповторяющихся строк: "+format(no_repeat), 1);
no_repeat++;
int x=regex_iterator(s, format(#result[0][0]), address(#result2[0][0]), sizearray(result2), sizearray(result2[]));
strcpy(#c[0], format(#result[0][0])+" "+format(x)+formatic(13)+formatic(10));
fwriteb(#c[0], size(#c[0])); // записываем в файл строку и сколько раз она повторяется
regex_replace(s, format(#result[0][0]), "", address(#c[0]), sizearray(c));
s=format(#c[0]);
}
fclose();
start(path_out);
}
} |
|
|
|