Kibor |
Отправлено: 03 Июля, 2018 - 23:46:21
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Dantes3000 пишет: иероглифы при вставке. Иногда сразу, иногда только на втором "сообщении"
CODE:keydown(CONTROL);
key(86);
keyup(CONTROL);
Английскую V замените на цифровой код.
Кибор переключает на англ язык если символ английский.
А при вставке с буфера русс надо что бы раскладка в кибор была русская.
Поэтому перед запуском скрипта поставьте в кибор русс раскладку. Руками или программно. |
|
|
Dantes3000 |
Отправлено: 03 Июля, 2018 - 23:58:35
|
Эксперт
Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016
Репутация: 58
|
Kibor пишет: Английскую V замените на цифровой код.
Кибор переключает на англ язык если символ английский.
Не знал, не знал.
Надо так
Спойлер (Отобразить)CODE:string str[50];
int n=0;
char ch[999];
int siz;
pause(2000); beep(400,100);
if (fopen ("C:\Users\qwety\Desktop\1.txt", "r")!=0)
{
l:n++;
if (freadline(str[n])==1)
{
pause(rand(4000, 8000));
sendlanguage("00000419", 0);
writeclipboard(str[n]);
strcpy(#ch[0], str[n]);
siz=size(#ch[0]);
keydown(CONTROL);
key(86);
keyup(CONTROL);
writeclipboard("");
pause(250*siz+rand(5000, 7000));
key(RETURN);
goto l;
}
fclose();
}
beep(700,100);
beep(700,100);
Спасибо |
|
|
mitya |
Отправлено: 20 Сентября, 2018 - 23:13:32
|
Прохожий
Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2017
Репутация: 0
|
Dantes3000 пишет: mitya , ты 2 раза fread вызываешь
да, спасибо), исправил, выдает правильно
(Добавление)
подскажите пожалуйста
есть текстовый файл:
text1 x1 y1 z1
text2 x2 y2 z2
text3 x3 y3 z3
....
textn xn yn zn
x y z integer
нужно считать условный textm и именно в этой строке перезаписать (ym zm) на (ym+1 zm+1), весь остальной файл оставив без изменений
нужно ли сначала открывать для чтения, потом для записи и переписывать весь файл или есть простой способ?(Отредактировано автором: 20 Сентября, 2018 - 23:30:34) |
|
|
Zireael |
Отправлено: 21 Сентября, 2018 - 03:24:44
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: нужно считать условный textm и именно в этой строке перезаписать (ym zm) на (ym+1 zm+1), весь остальной файл оставив без изменений
Скачать длл отсюда: http://kibor-bot.com/forum/topic...m=6&topic=65, закинуть в папку с kibor.exe.
code (Отобразить)CODE:external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll" );
char result[4][100];
string r="([^\s]+)\s+(\d+)\s+(\d+)\s+(\d+)"; // регулярное выражение для поиска строки вида: 'текст число число число'
string a[1000]; // массив, в который считается содержимое файла
if (fopen ("C:\3.txt", "r")!=0) // если открылся для чтения
{
for(int i=0; freadline(a[i])!=0; i++){} // чтение файла в массив по строкам
fclose();
}
int count_string=i; // количество строк в файле
int y, z;
if (fopen ("C:\333.txt", "w")!=0) // если открылся для записи
{
for(i=0; i<count_string; i++) // для всех строк
{
int x=regex_search(a[i], r, address(#result[0][0]), sizearray(result), sizearray(result[])); // поиск строки по шаблону
if(x>0) // если найдена
{
y=formatsn(format(#result[2][0]))+1; // прибавить 1
z=formatsn(format(#result[3][0]))+1; // прибавить 1
fwrite(format(#result[0][0])+" "+format(#result[1][0])+" "+format(y)+" "+format(z)); fwrite(ENDL); // записать строку
}
else // если строка не соответствует шаблону
{
fwrite(a[i]); fwrite(ENDL); // записать её без изменений
}
}
fclose();
}
Для файла с таким содержимым:
Цитата: text1 100 200 300
text2 400 500 600
какой-то текст
text3 700 800 900
Результат:
Цитата: text1 100 201 301
text2 400 501 601
какой-то текст
text3 700 801 901 |
|
|
mitya |
Отправлено: 21 Сентября, 2018 - 23:40:58
|
Прохожий
Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2017
Репутация: 0
|
Zireael пишет: Цитата: нужно считать условный textm и именно в этой строке перезаписать (ym zm) на (ym+1 zm+1), весь остальной файл оставив без изменений
Скачать длл отсюда: http://kibor-bot.com/forum/topic...m=6&topic=65, закинуть в папку с kibor.exe.
code (Отобразить)CODE:external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll" );
char result[4][100];
string r="([^\s]+)\s+(\d+)\s+(\d+)\s+(\d+)"; // регулярное выражение для поиска строки вида: 'текст число число число'
string a[1000]; // массив, в который считается содержимое файла
if (fopen ("C:\3.txt", "r")!=0) // если открылся для чтения
{
for(int i=0; freadline(a[i])!=0; i++){} // чтение файла в массив по строкам
fclose();
}
int count_string=i; // количество строк в файле
int y, z;
if (fopen ("C:\333.txt", "w")!=0) // если открылся для записи
{
for(i=0; i<count_string; i++) // для всех строк
{
int x=regex_search(a[i], r, address(#result[0][0]), sizearray(result), sizearray(result[])); // поиск строки по шаблону
if(x>0) // если найдена
{
y=formatsn(format(#result[2][0]))+1; // прибавить 1
z=formatsn(format(#result[3][0]))+1; // прибавить 1
fwrite(format(#result[0][0])+" "+format(#result[1][0])+" "+format(y)+" "+format(z)); fwrite(ENDL); // записать строку
}
else // если строка не соответствует шаблону
{
fwrite(a[i]); fwrite(ENDL); // записать её без изменений
}
}
fclose();
}
Для файла с таким содержимым:
Цитата: text1 100 200 300
text2 400 500 600
какой-то текст
text3 700 800 900
Результат:
Цитата: text1 100 201 301
text2 400 501 601
какой-то текст
text3 700 801 901
Спасибо!
Но не совсем то, что нужно. Смысл задачи в формировании базы с нуля и выборки на условия.
Строки в базе вида - text x y z (int x,y,z; string text
Изначально файл пуст. И имеются 3 условия.
В переменную string p получаем какой-то текст (одно слово).
Нужно найти текстовую переменную p в файле С:\1.txt и при выполнении одного из 3 условий добавить 1 в x или y или z. Если же p не найдена то дописать ее в конец файла p x y z.
т.е.
для файла с содержимым
text1 100 200 300
text2 400 500 600
text3 700 800 900
если p=="text2"
и условие1________ условие2__________ условие3
text1 100 200 300___ text1 100 200 300___ text1 100 200 300
text2 401 500 600___ text2 400 501 600___ text2 400 500 601
text3 700 800 900___ text3 700 800 900___ text3 700 800 900
если p=="text4"
и условие1_________ условие2__________ условие3
text1 100 200 300___ text1 100 200 300___ text1 100 200 300
text2 400 500 600___ text2 400 500 600___ text2 400 500 600
text3 700 800 900___ text3 700 800 900___ text3 700 800 900
text4 1 0 0 _________ text4 0 1 0 _________ text4 0 0 1(Отредактировано автором: 21 Сентября, 2018 - 23:48:19) |
|
|
Zireael |
Отправлено: 22 Сентября, 2018 - 01:47:42
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: есть текстовый файл:
Цитата: Смысл задачи в формировании базы с нуля
То ли есть, то ли с нуля.
Цитата: Нужно найти текстовую переменную p в файле С:\1.txt
Скачать длл http://kibor-bot.com/forum/topic...m=6&topic=67, закинуть в папку с kibor.exe.
code (Отобразить)CODE:external(INT, "IndexOfstring", "IndexOfstring", pathfolder()+"IndexOf.dll");
string a[1000]; // массив, в который считается содержимое файла
if (fopen ("C:\1.txt", "r")!=0) // если открылся для чтения
{
for(int i=0; freadline(a[i])!=0; i++){} // чтение файла в массив по строкам
fclose();
}
string p="text2"; // искомый текст
new int result[sizearray(a)]; // массив, в который запишутся индексы найденных строк
int z=IndexOfstring(address(#a[0]), sizearray(a), -1, address(#result[0]), p); // поиск в массиве
if (z>0) // если текст найден
{
messagebox("Номер строки: "+format(result[0]));
messagebox(a[result[0]]); // строка, содержащая искомый текст
// дальнейшие действия
}
else messagebox("Текст не найден"); |
|
|
mitya |
Отправлено: 25 Сентября, 2018 - 17:47:36
|
Прохожий
Покинул форум
Сообщений всего: 7
Дата рег-ции: Сент. 2017
Репутация: 0
|
Zireael пишет: Цитата: есть текстовый файл:
Цитата: Смысл задачи в формировании базы с нуля
То ли есть, то ли с нуля.
Цитата: Нужно найти текстовую переменную p в файле С:\1.txt
Скачать длл http://kibor-bot.com/forum/topic...m=6&topic=67, закинуть в папку с kibor.exe.
code (Отобразить)CODE:external(INT, "IndexOfstring", "IndexOfstring", pathfolder()+"IndexOf.dll");
string a[1000]; // массив, в который считается содержимое файла
if (fopen ("C:\1.txt", "r")!=0) // если открылся для чтения
{
for(int i=0; freadline(a[i])!=0; i++){} // чтение файла в массив по строкам
fclose();
}
string p="text2"; // искомый текст
new int result[sizearray(a)]; // массив, в который запишутся индексы найденных строк
int z=IndexOfstring(address(#a[0]), sizearray(a), -1, address(#result[0]), p); // поиск в массиве
if (z>0) // если текст найден
{
messagebox("Номер строки: "+format(result[0]));
messagebox(a[result[0]]); // строка, содержащая искомый текст
// дальнейшие действия
}
else messagebox("Текст не найден");
Спасибо еще раз, очень помогли! Первый код ближе, переделал его, есть, что нужно.
Единственное, скорость кода. Точнее, перезаписи txt как я понимаю. Сделал txt на 15к шаблонных строк и 250кб, 7-8 секунд на ssd, не быстро, попробовал на hdd, один диск 1-2с, второй те же 7-8с, мистика? |
|
|
|