Что нового

StringRegExp не находит пробелы

Сообщения
36
Репутация
-1
Привет. Нужно автоматизировать 1с предприятие 7.7. Скрипт должен искать пробелы в нужных строках. Но почему то он их не находит. Пробовал разные варианты в т.ч. с StringIsSpace, но ничего не находит все равно. Если икать через 1с, тогда работает. Подскажите в чём проблема.

Код:
Local $R, $C, $cell
WinActivate("[CLASS:Afx:400000:0:0:0:3c100d3]")

For $R = 8 To 32
 ControlClick("[CLASS:Afx:400000:0:0:0:3c100d3]", "", "[CLASS:Edit; INSTANCE:3]")
   ControlCommand("[CLASS:Afx:400000:0:0:0:3c100d3]", "", "[CLASS:Edit; INSTANCE:3]", "EditPaste", 'R'& $R &'C4')
   Send("{ENTER}")
   $cell = ControlCommand("[CLASS:Afx:400000:0:0:0:3c100d3]", "", "[CLASS:AfxWnd42; INSTANCE:4]", "FindString", ' ')
   If StringRegExp("\s", "$cell") = 1 Then
	  MsgBox(4096, "", "найдено")
   EndIf
   Next
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
fyviffitoffo [?]
Если вы хотите искать в тексте, находящемся в переменной, то
Код:
If StringRegExp($cell, "\s") = 1 Then
Но учтите, что FindString вернёт индекс строки, а не текст.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Ошибок в скрипте нет.
Действительно, в тексте "\s" не встречается слово "$cell".

А проблема, я думаю, в раздвоении личности...
 
Автор
fyviffitoffo
Сообщения
36
Репутация
-1
вернёт индекс строки
Я кстати так и не понял что являет собой индекс строки. А пробелы StringRegExp не находит потому что ControlCommand всегда возвращает 0 почему то. Я пробовал SelectString, GetCurrentSelection, GetLine и GetSelected, но тоже самое. Может проблема в том что строка класса AfxWnd42, а не Edit, тогда как добыть из нее текст?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
fyviffitoffo [?]
не понял что являет собой индекс строки
Я решил, что AfxWnd42 - это аналог ListBox или ComboBox, т.к. вы используете FindString.
А как выглядит окно AfxWnd42 ? Если оно похоже на таблицу, то попробуйте
Код:
ControlListView()
 
Автор
fyviffitoffo
Сообщения
36
Репутация
-1
с GetText возвращает пустую строку на всё, даже если в колонке есть значение. В Visible text оно отображает нужные значения, значит как то же его можно получить? Окно похоже на формат электронных таблиц. Что ещё интересно, что значение в Visible text появляется после движения мыши. Я дополнил код таким образом:
Код:
$pos = MouseGetPos()
 MouseMove($pos[0] + 1, $pos[1] + 1, 0)
$cell = ControlListView("[CLASS:Afx:400000:0:0:0:20a0b0b]", "", "[CLASS:AfxWnd42; INSTANCE:4]", "FindItem", " ")
MsgBox(4096, "", $cell)

С SelectAll всегда возвращает 1. А если использовать GetText то что указать в номер пункта и номер колонки?
1a7afd37b191.jpg

нужно добыть значение 536,085.72 например.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
fyviffitoffo [?]
В Visible text оно отображает нужные значения
Попробуйте так
Код:
ControlGetText("[CLASS:Afx:400000:0:0:0:20a0b0b]", "", "[CLASS:AfxWnd42; INSTANCE:4]")


если использовать GetText то что указать в номер пункта и номер колонки?
Цифры (числа). Левая верхняя клетка: 0, 0. Первая цифра - пункт (строка), вторая - колонка (столбец). Но может и не работать...
 
Автор
fyviffitoffo
Сообщения
36
Репутация
-1
ControlGetText возвращает пустую строку. AutoIt Window Info может давать недостоверную информацию о классе? Потому что как только я хотел получить текст из [CLASS:Edit; INSTANCE:3] (где координаты ячейки) то оно всё норм работает. А с [CLASS:AfxWnd42; INSTANCE:4] ничего не хочет вытягивать. Или это может сама программа такая.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
fyviffitoffo
AutoIt работает со стандартными элементами: Edit, Listbox, Button, SysListView32 и др. С остальными можно попробовать работать как с обычными, но это не всегда получается. Для "нестандартных" элементов есть другой, более сложный и трудоёмкий способ http://www.autoitscript.com/forum/topic/153520-iuiautomation-ms-framework-automate-chrome-ff-ie
 
Автор
fyviffitoffo
Сообщения
36
Репутация
-1
решил проблему иным способом:
Код:
For $R = 8 To 29
   ControlClick("[CLASS:Afx:400000:0:0:0:dd05b1]", "", "[CLASS:Edit; INSTANCE:3]")
   ControlCommand("[CLASS:Afx:400000:0:0:0:dd05b1]", "", "[CLASS:Edit; INSTANCE:3]", "EditPaste", 'R'& $R &'C4')
   Send("{ENTER}")
   Send("^{INSERT}")
   $cell = ClipGet()
   If StringRegExp($cell, "\s") = 1 Then
   MsgBox(4096, "", "найдено")
   EndIf
Next


А если использовать тот модуль то можно автоматизировать проги где нет Visible text?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
fyviffitoffo [?]
если использовать тот модуль то можно автоматизировать проги
Тот модуль как раз и создан для того, чтобы расширить стандартные средства AutoIt. Но бывают такие элементы, что даже тот модуль не читает с них текст.
 
Верх