Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Выделение числа из текста

Ответить
Настройки темы
[решено] Выделение числа из текста

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Приветствую!
Уважаемые Гуру, подскажите, как можно выделить число из текстовой строки?
Строка всегда начинается с символа TAB, затем идет число, причем если более 3-х знаков, то разделяется запятой, далее ENTER и текст с ненужными числами.
В данный момент использую извращенный метод: проверку на наличие запятой, помещением строки в открытый блокнот и автоматическое удаление запятой и лишних текстовых знаков.

Отправлено: 21:26, 17-01-2010

 

Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


А можно увидеть образец того, что есть, того что нужно получить и свой скрипт.

Отправлено: 21:43, 17-01-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Образец строки:

2,541
В наличии: мало
BK500-RS CS


кусок скрипта обработки в блокноте:

WinActivate("work.txt - Блокнот","")
WinWaitActive ("work.txt - Блокнот","")
Send("{CTRLDOWN}a{CTRLUP}{DEL}") ; Очистка блокнота
Send("{CTRLDOWN}v{CTRLUP}")
MouseClick("left", 9, 51, 1, 0) ; Клик в начало Блокнота
Send("{DEL}") ; Удаляем ТАб
Send("{SHIFTDOWN}") ; Начало выделения цены
MouseMove(66,51,1)
MouseDown("left")
MouseUp("left")
Send("{SHIFTUP}") ; Конец выделения цены
Send("{CTRLDOWN}c{CTRLUP}") ; Копируем цену обратно в буфер
$cena = ClipGet()

Обработка если нет запятой, в случае с запятой сначала три клика и удаление запятой.

Отправлено: 21:58, 17-01-2010 | #3


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


Я правильно понял, что из файла с текстом вида
Цитата:
1 строка - 2,541
2 строка - В наличии: мало
3 строка - BK500-RS CS
нужно получить в другой файл выборку всех элементов типа 2,541?
Вы бы скопировали фрагмент Вашего исходного текста и здесь привели.

Отправлено: 22:09, 17-01-2010 | #4


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата madmasles:
Я правильно понял, что из файла с текстом вида »
Да, верно, только обработку желательно вести непосредственно скриптом, т.к. через файл или блокнот уходит много времени.
Изначально текст в буфере, к сожалению на странице форума не отобразился отступ символа ТАБ перед 2,541

Отправлено: 22:17, 17-01-2010 | #5


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Код: Выделить весь код
$sText = ClipGet()
$sResult = StringRegExpReplace($sText, "(?s)\s+?([0-9,?]*).*", "\1")

MsgBox(64, 'Title', $sResult)

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 23:59, 17-01-2010 | #6


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


У меня первоначальный вариант был длиннее, плохо разбираюсь в "pattern", но воспользовавшись как всегда идеальной формулой от Creat0R
Цитата Creat0R:
$sResult = StringRegExpReplace($sText, "(?s)\s+?([0-9,?]*).*", "\1") »
получил вот такой вариант:
Код: Выделить весь код
#include <File.au3>

$file1 = "1.txt"
$file2 = "2.txt"

FileOpen($file1, 0)
FileOpen($file2, 2)
$CountLines = _FileCountLines($file1)
For $i = 1 To $CountLines
    $sText = FileReadLine($file1, $i)
    $sResult = StringRegExpReplace($sText, "(?s)\s+?([0-9,?]*).*", "\1")
    If StringLen($sResult) > 0 Then
        FileWrite($file2, $sResult & @CRLF)
    EndIf
Next
FileClose($file1)
FileClose($file2)
1.txt это файл для обработки, 2.txt это файл-результат.
Хочу попробовать то же самое сделать через массив, вроде намного быстрее получается.

Отправлено: 00:30, 18-01-2010 | #7


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата madmasles:
получил вот такой вариант: »
Так будет правильнее:

Код: Выделить весь код
$sFile1 = "1.txt"
$sFile2 = "2.txt"

$hFile1 = FileOpen($sFile1, 0)
$hFile2 = FileOpen($sFile2, 2)

$i = 0

While 1
    $i += 1
    $sText = FileReadLine($hFile1, $i)
    If @error <> 0 Then ExitLoop

    $sResult = StringRegExpReplace($sText, "\s+?([0-9,?]+).*", "\1")
    If @extended > 0 Then FileWriteLine($hFile2, $sResult)
WEnd

FileClose($hFile1)
FileClose($hFile2)

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 01:05, 18-01-2010 | #8


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата madmasles:
но воспользовавшись как всегда идеальной формулой от Creat0R »
Благодарствую!
Действительно красиво, осталось решить проблему с удалением запятой, попробую поковыряться с функциями.

Отправлено: 01:05, 18-01-2010 | #9


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Или так:

Код: Выделить весь код
$sFile1 = "1.txt"
$sFile2 = "2.txt"

$sText = FileRead($sFile1)
$aResult = StringRegExp($sText, "(?s)\s+?([0-9,?]+)", 3)

$hFile2 = FileOpen($sFile2, 2)

For $i = 0 To UBound($aResult)-1
    FileWriteLine($hFile2, StringReplace($aResult[$i], ",", ""))
Next

FileClose($hFile2)
Цитата u-Art:
осталось решить проблему с удалением запятой »
См. мой последний пост.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:31, 18-01-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Выделение числа из текста

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Поиск числа в .txt Не флужу AutoIt 9 23-07-2010 17:16
[решено] Excel, перевод числа во время. Как? Grub Хочу все знать 6 25-11-2009 10:57
Delphi - [решено] Случайные числа Ruzik Программирование и базы данных 5 13-11-2008 08:22
Интерфейс - [решено] Выделение файлов в проводнике. Zalatoy Microsoft Windows Vista 3 02-06-2008 14:17
Выделение текста в Word'е Alexandre Хочу все знать 9 03-07-2003 14:35




 
Переход