Что нового

Поиск нужного текста

id.balandin

Новичок
Сообщения
30
Репутация
0
Есть класс Edit. В нем есть некий текст (символы, цифры, буквы). Нужно найти в этом тексте выражение, начинающееся с "O=<текст>,". Пример:
"L=Екатеринбург, [email protected], T=892*****, N=Иванов Василий Иннокентьевич, O=ОАО 'Сити Сервис', S=66"
Фразу ОАО 'Сити Сервис' из этого текста нужно поместить в буфер обмена, чтобы далее вставить в определенное место.

Форум огромный. Сам не нашел. Да и в АутоИТе всего лишь месяц работаю.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
id.balandin
Так?
Код:
#include <Array.au3>
$sText= ControlGetText('Untitled - Notepad', '', 'Edit1')

$sText="L=Екатеринбург, [email protected], T=892*****, N=Иванов Василий Иннокентьевич, O=ОАО 'Сити Сервис', S=66"
$aString = StringRegExp($sText, ", O=(.*),", 3)
If UBound($aString) > 0 Then ClipPut ($aString[0]) 
_ArrayDisplay($aString)
 
Автор
id.balandin

id.balandin

Новичок
Сообщения
30
Репутация
0
WSWR

Запустил, работает.

Но есть такой момент - строки будут с разными значениями/данными. И нужно "выдергивать" определенный фрагмент, начинающийся с O=
Тут как быть?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
id.balandin [?]
строки будут с разными значениями/данными. И нужно "выдергивать" определенный фрагмент, начинающийся с O=
Пример выше для этого и написан.
 
Автор
id.balandin

id.balandin

Новичок
Сообщения
30
Репутация
0
Не понял. Какой пример выше?

Я вставляю код. Запускаю и он в конечном итоге выдает ОАО Сити Сервис.
Ну т.е. названия юр.лиц и остальные данные ВСЕГДА будут разные...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
id.balandin [?]
Я вставляю код. Запускаю и он в конечном итоге выдает ОАО Сити Сервис.
Это пример, это не значит что нужно его использовать прямо в том виде в котором он выложен.
Там переменная $sText жёстко задана, подставь под неё то что нужно (считывается с элементов, файлов и т.д.).
 
Автор
id.balandin

id.balandin

Новичок
Сообщения
30
Репутация
0
Делаю так:
Код:
$sText= ControlGetText('Untitled - Notepad', '', 'Edit1')

$aString = StringRegExp($sText, ", O=(.*),", 3)
If UBound($aString) > 0 Then ClipPut ($aString[0]) 
_ArrayDisplay($aString)


не получается...Не понял.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
может стоит использовать класс
Код:
#include <Array.au3>
$sText= ControlGetText('[class:Notepad]', '', 'Edit1') ;используем класс
$aString = StringRegExp($sText, ", O=(.*),", 3)
If UBound($aString) > 0 Then ClipPut ($aString[0])
_ArrayDisplay($aString)

так работает


Добавлено:
Сообщение автоматически объединено:

можно решить так
Код:
#include <Array.au3>
#include <String.au3>
$sText="L=Екатеринбург, [email protected], T=892*****, N=Иванов Василий Иннокентьевич, O=ОАО 'Сити Сервис', O=ЗАО 'qwerty', S=66"
$aString =_StringBetween($sText,"O=","',")
If UBound($aString) > 0 Then ClipPut ($aString[0])
_ArrayDisplay($aString)



Добавлено:
Сообщение автоматически объединено:

с выведением в буфер нескольких значений построчно
Код:
#include <Array.au3>
#include <String.au3>
$sText = "L=Екатеринбург, [email protected], T=892*****, N=Иванов Василий Иннокентьевич, O=ОАО 'Сити Сервис', O=ЗАО 'qwerty', S=66"
$array = _StringBetween($sText, "O=", "',")
If UBound($array) > 0 Then
	$string = _ArrayToString($array, @CRLF)
	ClipPut($string)
	MsgBox(0, '', ClipGet())
EndIf
_ArrayDisplay($array)
 
Автор
id.balandin

id.balandin

Новичок
Сообщения
30
Репутация
0
Код:
Send("{TAB 4}") ;переходим в нужную строку ( Класс EDIT, поле Edit2 (!))
Sleep (1000)
Send("^{C}")

$sText= ControlGetText('[class:Edit]', ' ', 'Edit2')

$aString = StringRegExp($sText, ", O=(.*)", 3)
If UBound($aString) > 0 Then ClipPut ($aString[0]) 
_ArrayDisplay($aString, "test")


Exit


Я уже запутался - нужно ли мне копировать в буфер обмена (CTRL C)?
И как я могу ВСТАВИТЬ найденный текст:
Код:
$aString = StringRegExp($sText, ", O=(.*)", 3)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ты же итак считываешь текст из открытого блокнота
вот так
Код:
$sText= ControlGetText('[class:Notepad]', '', 'Edit1')

либо если текст в обычном файле ТХТ, то функцией
Код:
FileRead
 
Автор
id.balandin

id.balandin

Новичок
Сообщения
30
Репутация
0
Разобрался!
Логическая схема будет такая:
1. Копируем текст (помещаем в б/о) из поля Edit2.
2. Открываем блокнот и вставляем сей текст
3. Находим нужную часть текста.
4. Открываем блокнот и вставляем уже нужную часть текста.

Проблема на шаге "4" - блокнот открылся, а нужный текст не вставляется.

С помощью -
Код:
$aString = StringRegExp($sText, ", O=(.*)", 3)
не получается
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
если текст именно в системном блокноте, то класс блокнота именно
[Class:Notepad]
а поле ввода
Edit1
а значит будет так как я писал выше
Код:
$sText= ControlGetText('[class:Notepad]', '', 'Edit1')

а не Class:Edit

то есть так
Код:
#include <Array.au3>
#include <String.au3>
$sText= ControlGetText('[class:Notepad]', '', 'Edit1')
$array = _StringBetween($sText, "O=", "',")
If IsArray($array) Then
    $string = _ArrayToString($array, @CRLF)
    ClipPut($string)
    MsgBox(0, '', ClipGet())
EndIf
_ArrayDisplay($array)


либо вместо [class:Notepad] точный заголовок окна блокнота. к примеру -
Код:
$sText= ControlGetText('1 — Блокнот', '', 'Edit1')
 
Автор
id.balandin

id.balandin

Новичок
Сообщения
30
Репутация
0
При помещении текста в б/о (нажимая CTRL+C) можно работать с системным блокнотом?
Т.е. не обязательно его открывать?
Уже путаюсь...

П.С.: Изначально текст берется не из блокнота!
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
я уже сам запутался что тебе нужно ;D
как я понял - есть блокнот с текстом. из него нужно вытащить нужные значения. либо считыванием из открытого окна блокнота либо считыванием из текстового файла напрямую. найти нужный текст и передать его в буфер обмена. если цель записать нужный текст в другой текстовый файл, то можно без буфера сразу записывать результат в файл
что точно нужно?


Добавлено:
Сообщение автоматически объединено:

из какого файла берется текст? какое расширение файла?. в каком редакторе он открывается?
 
Автор
id.balandin

id.balandin

Новичок
Сообщения
30
Репутация
0
1. Текст берется не из файла/блокнота, а из окна программы КриптоПро
2. Помещаем в б/о нажатием CTRL+C.
(...вроде бы можно обработать текст в б/о...но может ошибаюсь, поэтому иду другим путем....)
3. Открываю блокнот. Вставляю (CTRL+V).
4. Ищу необходимую комбинацию (далее фраза).
...(найденный текст необходимо в дальнейшем вставить при сохранении файла (когда программа спрашивает под каким именем сохранить файл)
5. Удаляю всё из блокнота (или открываю новый). Вставляю фразу, выделяю её и копирую в б/о (CTRL+C).

Всё. Теперь в памяти есть необходимая фраза и уже в дальнейшем в необходимом месте я её вставляю

П,С,: Вот он наш "гвоздь" программы:
Код:
Send("{TAB 4}")
Sleep (1000)
Send("^{C}") ; поместили в буфер обмена ВЕСЬ текст

Run("Notepad.exe")
WinWaitActive('[class:Notepad]', '', 'Edit1')
Send("^{V}")

$sText= ControlGetText('[class:Notepad]', '', 'Edit1')
$array = _StringBetween($sText, "O=", ", OID") ; Нашли необходимую фразу


Нет необходимости делать через Месседж Бокс:
Код:
If IsArray($array) Then
  $string = _ArrayToString($array, @CRLF)
  ClipPut($string)
  MsgBox(0, '', ClipGet())
EndIf
_ArrayDisplay($array)


Фразу просто нужно скопировать в б/о. В этом и есть, мой детский вопрос)))
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
зачем блокнот. раз текст уже в буфере обмена. значит берем оттуда
Код:
#include <Array.au3>
#include <String.au3>
$sText= ClipGet()
$array = _StringBetween($sText, "O=", "',")
If IsArray($array) Then
    $string = _ArrayToString($array, @CRLF)
	FileWriteLine('1.txt',$string)
EndIf
 
Автор
id.balandin

id.balandin

Новичок
Сообщения
30
Репутация
0
Я новичок и для меня это сложно:
Код:
#include <Array.au3>
#include <String.au3>
$sText= ClipGet()
$array = _StringBetween($sText, "O=", "',")
If IsArray($array) Then
    $string = _ArrayToString($array, @CRLF)
    FileWriteLine('1.txt',$string)
EndIf


Не могу понять зачем
Код:
If IsArray($array) Then
    $string = _ArrayToString($array, @CRLF)
    FileWriteLine('1.txt',$string)


Я потом как выдерну строку с названием организации и вставлю её командой CTRL+V?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
id.balandin [?]
это проверка на существование массива. чтобы скрипт не вывалился с ошибкой.

Я потом как выдерну строку с названием организации и вставлю её командой CTRL+V?
в моем последнем скрипте исходный текст берется из буфера обмена, делается в нем поиск нужных фраз и эти фразы записываются в блокнот. если они тебе нужно в буфере обмена, то вместо
Код:
FileWriteLine('1.txt',$string)

используй
Код:
ClipPut($string)



Код:
$string = _ArrayToString($array, @CRLF)

используем для выведения в строку всех найденных результатов. их ведь много. можно просто считывать из массива
Код:
#include <Array.au3>
#include <String.au3>
$sText= ClipGet()
$array = _StringBetween($sText, "O=", "',")
If IsArray($array) Then
For $i = 0 To UBound($array) - 1
	ClipPut($array[$i])
	Next
EndIf

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