Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Работа с базой TXT
Ksardeks
сообщение 18.7.2017, 21:26
Сообщение #1


*

Registred
Сообщений: 6
Регистрация: 9.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.554
Возраст: 18



Есть задача: Вытащить текст и редактировать TXT файл след. образом - Вырезать первую строку с текстом, записать ее в значение пилота. И чтобы это срабатывало каждый раз, каждое вырезание текста было с новой строки. Не побрезгую подключением плагинов.
Содержание файла:
Код

Текст1
Текст2
Текст3
Текст4
Текст5

После вырезания строки файл становится:
Код

Текст2
Текст3
Текст4
Текст5

в значении записано "Текст1"
После вырезания строки файл становится:
Код

Текст3
Текст4
Текст5

в значении записано "Текст2"
и т.д.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 19.7.2017, 2:38
Сообщение #2


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Код
load_array %arr "D:\UOPilot\file.txt"   // загрузить массив
// %arr [1]   - первая строка из файла
// %arr [2]   - вторая строка
               // и т. д.
log clear
log mode compact
    // вывести в лог все строки из файла
for #i 1 size(%arr)
    log %arr [#i]    
end_for
end_script

Есть какой-то смысл удалять строки по одной?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Ksardeks
сообщение 19.7.2017, 8:33
Сообщение #3


*

Registred
Сообщений: 6
Регистрация: 9.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.554
Возраст: 18



Получается содержимое документа выгружается в программу? Работать на прямую с текстовым документом и редактировать его не получится?
Просто есть база номеров 100к строк, с ней и работать. И важно чтобы если что-то собьется все можно было продолжить с момента прерывания. Иначе придется резать фаил по 1к строк)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 19.7.2017, 10:54
Сообщение #4


********

Master
Сообщений: 1.264
Регистрация: 22.5.2012
Группа: Пользователи
Наличность: 0
Из: Белоруссии
Пользователь №: 14.972



я сохраняю работу с номером последней строкой в файл, потом запускаю с этой строки. Хотя может кто что-то лучшее подскажет, так идет постоянная перезапись файла, после каждой строки.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 19.7.2017, 12:14
Сообщение #5


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Номер строки, с которой работали, можно записывать в буфер. Если скрипт в какой-то момент остановить, то потом можно получить номер строки из буфера и загрузить массив с указанной строки.
Код
set #count 1          // с какой строки загружать массив
get clipboard %tmp      // получить содержимое буфера
if is_real(%tmp[1]) = 1    // если в буфере число
    set #count %tmp[1]     // то присвоить его переменной #count
end_if
hint Номер строки: #count
load_array %arr 1,1,#count,1,0,0 "C:\Users\abc\Desktop\123.txt"    // загрузить массив с указанной строки

// для примера, выводим в лог по 2 строки из файла при каждом запуске скрипта
for #i 1 2
    set #count #count + 1
    set clipboard #count       // записали в буфер номер строки, с которой работали
    log %arr [#i]                 // вывести в лог строку
end_for
end_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 19.7.2017, 14:19
Сообщение #6


********

Master
Сообщений: 1.264
Регистрация: 22.5.2012
Группа: Пользователи
Наличность: 0
Из: Белоруссии
Пользователь №: 14.972



А если комп вырубило, буфер будет пустой ведь? Тогда как быть?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 19.7.2017, 15:07
Сообщение #7


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
А если комп вырубило, буфер будет пустой ведь? Тогда как быть?

В таком случае и результат работы со строками не сохранится и придётся делать сначала.
Можно периодически сохранять результаты, тогда же записывать в отдельный файл номер строки, на которой остановились. Это явно лучше чем перезаписывать файл 100к раз.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 19.7.2017, 17:28
Сообщение #8


********

Master
Сообщений: 1.264
Регистрация: 22.5.2012
Группа: Пользователи
Наличность: 0
Из: Белоруссии
Пользователь №: 14.972



Цитата(cirus @ 19.7.2017, 15:07) *

В таком случае и результат работы со строками не сохранится и придётся делать сначала.
Можно периодически сохранять результаты, тогда же записывать в отдельный файл номер строки, на которой остановились. Это явно лучше чем перезаписывать файл 100к раз.

Как записать к примеру номер строки если пилот выключить через диспетчер задач или выдернуть шнур из розетки? У меня сейчас к примеру файл с 5к мылом, при вводе каждого идет сохранение номера строки с этим мылом, и так за время работы пилота перезапись идет 5к раз.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 19.7.2017, 20:41
Сообщение #9


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21046
Пользователь №: 16.156



Никак. Пропадает электричество, соответственно все завершается аварийно. Без сохранения. Можно записывать каждые 50-100 единиц обработанных данных. Но точное число получить нельзя в принципе.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
oxavi
сообщение 25.9.2017, 10:56
Сообщение #10


*

Registred
Сообщений: 3
Регистрация: 25.9.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.616
Возраст: 27



Цитата(cirus @ 19.7.2017, 15:07) *

В таком случае и результат работы со строками не сохранится и придётся делать сначала.
Можно периодически сохранять результаты, тогда же записывать в отдельный файл номер строки, на которой остановились. Это явно лучше чем перезаписывать файл 100к раз.



привет у меня есть вопрос а можно сделать так что бы скрипт получился к примеру такой

было копирование одной строки с переносом в приложения далее вставляем

за тем делаем копирование следующий строки ????
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 25.9.2017, 11:55
Сообщение #11


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



схема по сути будет той же самой. Если там нет чего-то сверх экстримального (база на пару гигов), то проще загрузить файл и работать уже с загруженным массивом. Если база огромна, то схема будет та же самая, просто загружать придется частями.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Чекист
сообщение 8.3.2019, 13:18
Сообщение #12


***

Novice
Сообщений: 76
Регистрация: 2.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.534



Ребята, почему если брать текст с блокнота через массив,
Код
load_array %arr "D:\Работа\uopilot\insta\tovar.txt"

то русский текст вставляется иероглифами?

Вот пример.

Код
load_array %arr "D:\Работа\uopilot\insta\tovar.txt"   
    kleft 155, 145 abs
    for #i 1 size(%arr)
    send %arr [#i]
    sendex {Enter}
    end_for
end_script  



И как мне в этом случае брать из блокнота определенный текст и заставить бота его вставлять в определенное место?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 8.3.2019, 13:30
Сообщение #13


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
то русский текст вставляется иероглифами?

Пересохранить файл в кодировке ansi, а не unicode.
Файл, сохранить как, кодировка ANSI.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Чекист
сообщение 8.3.2019, 13:46
Сообщение #14


***

Novice
Сообщений: 76
Регистрация: 2.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.534



Цитата(cirus @ 8.3.2019, 14:30) *

Пересохранить файл в кодировке ansi, а не unicode.
Файл, сохранить как, кодировка ANSI.


Спасибо тебе большое, что ты на протяжении с 2012 года, активно мне отвечал и помогал! Ты лучший!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Чекист
сообщение 9.3.2019, 16:54
Сообщение #15


***

Novice
Сообщений: 76
Регистрация: 2.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.534





Вот код, который я использую, для вывода сообщений на экран.
Код

load_array %arr "D:\Работа\uopilot\insta\tovar.txt"  
    kleft 155, 145 abs
    for #i 1 size(%arr)
    send %arr [#i]
    sendex {Enter}
    end_for
end_script  


Но есть большая проблема, нельзя использовать и русский и английский шрифт, так как если включена английская раскладка, он будет выдавать текст английским буквами в независимости от того, текст написан на русском или английском и с русской раскладкой противоположная ситуация. Есть ли выход с такой проблемы? (IMG:style_emoticons/default/sad.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 9.3.2019, 18:16
Сообщение #16


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Код
say "Русский текст"
say "English text"
end_script

Напечатает то что нужно независимо от раскладки.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Чекист
сообщение 9.3.2019, 20:52
Сообщение #17


***

Novice
Сообщений: 76
Регистрация: 2.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.534



Цитата(cirus @ 9.3.2019, 19:16) *

Код
say "Русский текст"
say "English text"
end_script

Напечатает то что нужно независимо от раскладки.

Спасибо!Работает! (IMG:style_emoticons/default/rolleyes.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Чекист
сообщение 10.3.2019, 16:00
Сообщение #18


***

Novice
Сообщений: 76
Регистрация: 2.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.534



Ребята, в чем может быть проблема? На основном компьютере написал бота с командой say , все отлично на нем работало - перенес на другой комп через тимвиевер, запустил, команда say перестала вводить слова, я изменил ее на sendex - слова вводиться, поставил обратно say - вроде заработало, потом подправил скрипт - say снова перестала работать....В чем может быть проблема?

И второй вопрос, я сохранил все слова в блокнот в формате ANSI, но потом в блокнот начал вносить символы из другого языка (индийского) с буквам: ç ü и т.д. При сохранении их в блокноте - они меняют эти иероглифы на стандартные буквы. Как это обойти? Что бы я мог вводить из блокнота и рус и англ и индийские слова?

Заранее, очень благодарен за ответ!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 10.3.2019, 16:50
Сообщение #19


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Для say нужна привязка к окну.
ANSI поддерживает только латиницу и кириллицу. Остальные языки только unicode. Пилот не работает с unicode.
Возможно на lua можно как-то сделать, не знаю.



Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 11.3.2019, 1:50
Сообщение #20


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



Цитата
Возможно на lua можно как-то сделать, не знаю.

Для луа есть модули для работы с юникодом. Но проблема в том, что отправлят то все равно пилотовскими функциями будем...


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

2 страниц V  1 2 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 19.4.2024, 11:34
Designed by Nickostyle