1 (изменено: vernikov1, 2013-04-10 17:30:57)

Тема: AHK: Выбор из файла определенных нескольких значений

Добрый день. Прошу помочь разобраться … 

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

Пример содержания файла (Выделено то что нужно вытащить из него)

<meta name="keywords" content="Тест1, Пример1, Тест2, Пример2">

<h2 align="center"><span class="стиль3">Тест 1, Тест 2: 2323</span></h2>

<iframe src="http://vk.com/video_ext.php?oid=204794946&id=164849745&hash=403a0ee93f249255&hd=1" width="630" height="485" frameborder="0"></iframe>

Вот пример кода


скрипт пытается извлечь все адреса FTP и HTTP из текстового или HTML файла.
FileSelectFile, SourceFile, 3,, Выберите текстовый или HTML файл для анализа.
if SourceFile =
    return ; В таком случае выйти.

SplitPath, SourceFile,, SourceFilePath,, SourceFileNoExt
DestFile = %SourceFilePath%\%SourceFileNoExt% Extracted Links.txt

IfExist, %DestFile%
{
    MsgBox, 4,, Переписать существующий файл со ссылками? Нажмите "Нет", чтобы добавить.`n`nФайл: %DestFile%
    IfMsgBox, Yes
        FileDelete, %DestFile%
}

LinkCount = 0
Loop, read, %SourceFile%, %DestFile%
{
    URLSearchString = %A_LoopReadLine%
    Gosub, URLSearch
}
MsgBox %LinkCount% ссылок было найдено и записано в "%DestFile%".
return

URLSearch:
; Это делается именно так потому, что некоторые URL содержат внутри себя другие URL:
StringGetPos, URLStart1, URLSearchString, http://
StringGetPos, URLStart2, URLSearchString, ftp://
StringGetPos, URLStart3, URLSearchString, www.

; Найти самую левую стартовую позицию:
URLStart = %URLStart1% ; Задать старт по умолчанию.
Loop
{
    ; Это улучшает производительность (по крайней мере в скрипте со многими переменными),
    ; если "URLStart%A_Index%" вычисляется только один раз:
    ArrayElement := URLStart%A_Index%
    if ArrayElement = ; Достигнут конец массива.
        break
    if ArrayElement = -1 ; Этот элемент дисквалифицируется.
        continue
    if URLStart = -1
        URLStart = %ArrayElement%
    else ; URLStart содержит допустимую позицию, поэтому сравнить её с ArrayElement.
    {
        if ArrayElement <> -1
            if ArrayElement < %URLStart%
                URLStart = %ArrayElement%
    }
}

if URLStart = -1 ; URLSearchString не содержит URL.
    return

; Иначе извлечь этот URL:
StringTrimLeft, URL, URLSearchString, %URLStart% ; Опустить начальную/ненужную часть.
Loop, parse, URL, %A_Tab%%A_Space%<> ; Найти первый пробел, табуляцию или угловую скобку (если есть).
{
    URL = %A_LoopField%
    break ; т.е. совершается только одна итерация цикла, чтобы извлечь первое "поле".
}
; Если цикл выше совершил ноль итераций, поскольку не было найдено ни одного конечного символа,
; оставить содержимое переменной URL нетронутым.

; Если URL оканчивается двойной кавычкой, удалить её. Сейчас для этого используется StringReplace,
; но имейте в виду, что двойные кавычки, видимо, разрешены внутри URL, так что это может их повредить:
StringReplace, URLCleansed, URL, ",, All
FileAppend, %URLCleansed%`n
LinkCount += 1

; Нет ли в этой строке других URL:
StringLen, CharactersToOmit, URL
CharactersToOmit += %URLStart%
StringTrimLeft, URLSearchString, URLSearchString, %CharactersToOmit%
Gosub, URLSearch ; Рекурсивный вызов подпрограммой самой себя.
return



Пример кода, который вытаскивает строки с нужным содержанием


Loop, read, C:\файлы\miranda\ahk\ahk\angr_irds.txt, C:\файлы\miranda\ahk\ahk\angr_irds111.txt
{
    IfInString, A_LoopReadLine, iframe, FileAppend, %A_LoopReadLine%`n
    IfInString, A_LoopReadLine, h2, FileAppend, %A_LoopReadLine%`n
    IfInString, A_LoopReadLine, name="keywords", FileAppend, %A_LoopReadLine%`n

}

Как можно обрезать тогда лишние…. Сколько бьюсь не получается. Заранее спасибо.

2 (изменено: creature.ws, 2013-04-12 09:50:57)

Re: AHK: Выбор из файла определенных нескольких значений

text =
(
<meta name="keywords" content="Тест1, Пример1, Тест2, Пример2">

<h2 align="center"><span class="стиль3">Тест 1, Тест 2: 2323</span></h2>

<iframe src="http://vk.com/video_ext.php?oid=204794946&id=164849745&hash=403a0ee93f249255&hd=1" width="630" height="485" frameborder="0"></iframe>
)

RegExMatch(text, "O)""keywords"" content=""(?<keywords>[^,]+, [^,]+)[\s\S]*"
                . "стиль3"">(?<text>[^<]+)[\s\S]*"
                . "(?<iframe><iframe.*</iframe>)", m)

MsgBox % m.keywords "`n`n"
       . m.text "`n`n"
       . m.iframe

3

Re: AHK: Выбор из файла определенных нескольких значений

Пишет ошибку

The following variable name contains an illegal character:
"m.keywords"

4

Re: AHK: Выбор из файла определенных нескольких значений

Актуальная версия интерпретатора v1.1.09.04

5

Re: AHK: Выбор из файла определенных нескольких значений

Спасибо огромное, а не подскажешь как правильно этот кусок вставить в

Loop, read, C:\файлы\miranda\ahk\ahk\angr_irds.txt, C:\файлы\miranda\ahk\ahk\angr_irds111.txt
{
    IfInString, A_LoopReadLine, iframe, FileAppend, %A_LoopReadLine%`n
    IfInString, A_LoopReadLine, h2, FileAppend, %A_LoopReadLine%`n
    IfInString, A_LoopReadLine, name="keywords", FileAppend, %A_LoopReadLine%`n

}

что бы после того как нужные строки записались в файл, он прошелся по ним и обновил файл добавив нужные выбранные значения ... И второе если не сложно как искать не в одном файле а по нескольким находящихся в одной папке. Заранее спасибо!

6

Re: AHK: Выбор из файла определенных нескольких значений

creature.ws
Интересный пример с RegExMatch. А что даёт опция "O", на PCRE не удалось найти.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7 (изменено: creature.ws, 2013-04-10 19:18:53)

Re: AHK: Выбор из файла определенных нескольких значений

vernikov1 пишет:

как правильно этот кусок вставить в

Этот кусок не вставляется в.

serzh82saratov пишет:

что даёт опция "O"

Match Object

8 (изменено: vernikov1, 2013-04-10 19:21:47)

Re: AHK: Выбор из файла определенных нескольких значений

А как тогда лучше сделать, не подскажите. Что ты он содержимое файлов смотрел.

9

Re: AHK: Выбор из файла определенных нескольких значений

creature.ws

Mode 3 (match object) [v1.1.05+]: If a capital O is present in the RegEx's options -- such as "O)abc.*123" -- a match object is stored in UnquotedOutputVar. This object can be used to retrieve the position, length and value of the overall match and of each captured subpattern, if present.

А по русски в двух словах немогли-бы? А то что-то никак...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: Выбор из файла определенных нескольких значений

А вроде понял, это чтобы использовать найденное при помощи Match Object.?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11

Re: AHK: Выбор из файла определенных нескольких значений

Можно эту же выборку делать по содержанию в файлах...??? или прям со страницы сайта (исходный код страницы) Может кто нибудь подскажет. Заранее спасибо.

12

Re: AHK: Выбор из файла определенных нескольких значений

Можно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13

Re: AHK: Выбор из файла определенных нескольких значений

UrlDownloadToFile
FileRead

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14 (изменено: vernikov1, 2013-04-11 12:42:34)

Re: AHK: Выбор из файла определенных нескольких значений

Вроде как в переменной храниться все содержимое файла. Но выборка не происходит из переменной… И как по ссылки читать ее содержимое не подскажите, тоже не ищет нужные значения…

FileRead, Contents, C:\Users\admin\Downloads\10\676\12311.txt

RegExMatch(%Contents%, "O)""keywords"" content=""(?<keywords>[^,]+)+(?<keywords2>[,^,]+)+(?<keywords3>[^,]+).*"
                
                . "h2 align=""center""><span class=""стиль3"">(?<text>[^<]+).*"
                . "(?<iframe><iframe.*</iframe>)", m)

}
MsgBox % m.keywords "` -`"
       . m.keywords3 "`n`n"
       . m.text "`n`n"
       . m.iframe 

15

Re: AHK: Выбор из файла определенных нескольких значений

Вы расчитываете, что кто-то сделает вам «как надо»?

Зачем нужны знаки процентов  вокруг имени переменной в выражении?
Зачем нужен финальный + в (?<keywords>[^,]+)+?
Что вы подразумеваете включая в регулярное выражение [,^,]?

16

Re: AHK: Выбор из файла определенных нескольких значений

Думал что помогут понять как можно осуществить поиск по содержанию страницы html, да. По поводй

Зачем нужен финальный + в (?<keywords>[^,]+)+?
Что вы подразумеваете включая в регулярное выражение [,^,]?

Это я поменяю. Я не пойму почему в переменной Contents не происходит поиск нужных значений

FileRead, Contents, C:\Users\admin\Downloads\10\676\12311.txt

RegExMatch(%Contents%, "O)""keywords"" content=""(?<

17 (изменено: creature.ws, 2013-04-11 13:21:51)

Re: AHK: Выбор из файла определенных нескольких значений

не происходит поиск нужных значений

А почему он должен происходить? В каком фрагменте кода вы осуществляете поиск в переменной Contents?

18

Re: AHK: Выбор из файла определенных нескольких значений

Поиск смотрит сюда, может как то подругому нужно написать....

RegExMatch(%Contents%, "O)""keywords"" content=""(?<

до этого поиск работал корректно

[b]text[/b] =
(
<meta name="keywords" content="Тест1, Пример1, Тест2, Пример2">

<h2 align="center"><span class="стиль3">Тест 1, Тест 2: 2323</span></h2>

<iframe src="http://vk.com/video_ext.php?oid=204794946&id=164849745&hash=403a0ee93f249255&hd=1" width="630" height="485" frameborder="0"></iframe>
)

RegExMatch([b]text[/b], "O)""keywords"" content=""(?<keywords>[^,]+, [^,]+).*"
                . "стиль3"">(?<text>[^<]+).*"
                . "(?<iframe><iframe.*</iframe>)", m)

MsgBox % m.keywords "`n`n"
       . m.text "`n`n"
       . m.iframe 

19

Re: AHK: Выбор из файла определенных нескольких значений

Переменные и выражения
Регулярные выражения (RegEx) - краткий справочник
RegExMatch()
RegExReplace()

Почитайте внимательно, за вас уже всё сделали, а вы с кодом делаете непойми что, вообще неглядя на приведённые примеры.
Не хотите учится и задавать "правильные" вопросы, озвучьте тогда сумму за готовый скрипт

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20

Re: AHK: Выбор из файла определенных нескольких значений

Я в примерах не вижу схожей ситуации.... А вопрос я задаю корректно и не понимаю в чем проблема, поэтому и спрашиваю.
Переменная Contents в нее помещается содержимое файла, но функция RegExMatch не читает в ней ничего. Вопрос что я не так написал...

FileRead, Contents, C:\Users\admin\Downloads\10\676\12311.txt

RegExMatch(%Contents%, "O)""keywords"" content=""(?<keywords>[^,]+)+(?<keywords2>[,^,]+)+(?<keywords3>[^,]+).*"
                
                . "h2 align=""center""><span class=""стиль3"">(?<text>[^<]+).*"
                . "(?<iframe><iframe.*</iframe>)", m)

}
MsgBox % m.keywords "` -`"
       . m.keywords3 "`n`n"
       . m.text "`n`n"
       . m.iframe  

21

Re: AHK: Выбор из файла определенных нескольких значений

но функция RegExMatch не читает в ней ничего.

Вам уже ответили:

Зачем нужны знаки процентов  вокруг имени переменной в выражении?

Если непонятен ответ, надо спросить что он значит.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22

Re: AHK: Выбор из файла определенных нескольких значений

Пробовал убрать %, поставить “. Это не помогает…

23

Re: AHK: Выбор из файла определенных нескольких значений

А просто посмотреть во 2 пост, и увидеть что не надо ничем экранировать имена переменных для поиска...
И всё равно на выходе будет пусто, ибо:

Зачем нужен финальный + в (?<keywords>[^,]+)+?
Что вы подразумеваете включая в регулярное выражение [,^,]?

Перед тем как изменятьсамостоятельно довольно сложный шаблон для поиска, надо сначала понять что значат все эти "закорючки".

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

24 (изменено: vernikov1, 2013-04-11 15:17:06)

Re: AHK: Выбор из файла определенных нескольких значений

"закорючки" все работают нормально поиск осуществляется нормально (по ниже приведеному коду)... Я не могу понять почему по переменной он не может поиск осуществить



text =
(
<meta name="keywords" content="Тест1, Пример1, Тест2, Пример2">

<h2 align="center"><span class="стиль3">Тест 1, Тест 2: 2323</span></h2>

<iframe src="http://vk.com/video_ext.php?oid=204794946&id=164849745&hash=403a0ee93f249255&hd=1" width="630" height="485" frameborder="0"></iframe>
)

RegExMatch(text, "O)""keywords"" content=""(?<keywords>[^,]+)+(?<keywords2>[,^,]+)+(?<keywords3>[^,]+).*"
                
                . "h2 align=""center""><span class=""стиль3"">(?<text>[^<]+).*"
                . "(?<iframe><iframe.*</iframe>)", m)


MsgBox % m.keywords "` -`"
       . m.keywords3 "`n`n"
       . m.text "`n`n"
       . m.iframe 

25

Re: AHK: Выбор из файла определенных нескольких значений

+ off

Error in line #xx Unexpected gibberish

26 (изменено: vernikov1, 2013-04-11 15:24:00)

Re: AHK: Выбор из файла определенных нескольких значений

creature.ws пишет:
+ off

Error in line #xx Unexpected gibberish

Что это? Вы не можете объяснить, что не так в коде...

FileRead, Contents, C:\Users\admin\Downloads\10\676\12311.txt

RegExMatch(Contents, "O)""keywords"" content=""(?<keywords>[^,]+)+(?<keywords2>[,^,]+)+(?<keywords3>[^,]+).*"
                
                . "h2 align=""center""><span class=""стиль3"">(?<text>[^<]+).*"
                . "(?<iframe><iframe.*</iframe>)", m)

}
MsgBox % m.keywords "` -`"
       . m.keywords3 "`n`n"
       . m.text "`n`n"
       . m.iframe  

27 (изменено: creature.ws, 2013-04-11 15:41:01)

Re: AHK: Выбор из файла определенных нескольких значений

Что это?

Это ненавязчивый юмор.

В коде сообщения #26, вероятно, ошибка в регулярном выражении. В частности плюсик лишний, об этом говорилось уже.

В первом сообщении темы приведен образец текста и нужные его фрагменты. Регулярное выражение во втором сообщении решает задачу поиска требуемых фрагментов.

В сообщении #26 иное регулярное выражение и неизвестен текст в переменной Contents, вам нужна помощь телепата или нянька?

28

Re: AHK: Выбор из файла определенных нескольких значений

В файле аналогичный тест

<meta name="keywords" content="Тест1, Пример1, Тест2, Пример2">

<h2 align="center"><span class="стиль3">Тест 1, Тест 2: 2323</span></h2>

<iframe src="http://vk.com/video_ext.php?oid=204794946&id=164849745&hash=403a0ee93f249255&hd=1" width="630" height="485" frameborder="0"></iframe>

Пробовал ваш код подставить, не ищет...



FileRead, text, C:\Program Files (x86)\Mail.Ru\angr_irds.txt

RegExMatch(text, "O)""keywords"" content=""(?<keywords>[^,]+, [^,]+).*"
                . "стиль3"">(?<text>[^<]+).*"
                . "(?<iframe><iframe.*</iframe>)", m)

MsgBox % m.keywords "`n`n"
       . m.text "`n`n"
       . m.iframe 

29

Re: AHK: Выбор из файла определенных нескольких значений

Ищет, но, видимо, не находит. Убедитесь, что файл в переменную таки считывается и считывается в нужной кодировке.

30

Re: AHK: Выбор из файла определенных нескольких значений

Уже смотрел в переменную записывается содержимое

FileRead, text, C:\Program Files (x86)\Mail.Ru\angr_irds.txt

MsgBox %text%

RegExMatch(text, "O)""keywords"" content=""(?<keywords>[^,]+, [^,]+).*"
                . "стиль3"">(?<text>[^<]+).*"
                . "(?<iframe><iframe.*</iframe>)", m)

MsgBox % m.keywords "`n`n"
       . m.text "`n`n"
       . m.iframe  

31

Re: AHK: Выбор из файла определенных нескольких значений

Кто нибудь может подсказать в чем ошибка в выше приведенном скрипте? Почему по переменной он не идет поиск.

32 (изменено: serzh82saratov, 2013-04-11 20:27:19)

Re: AHK: Выбор из файла определенных нескольких значений

creature.ws
По случаю, вопрос к вам. Какие явные приемущества даёт использование "Match Object"?

Ну например: чтобы сохранить и извлечь из массива совпадения, количество которых заранее неизвестно, я использую такую схему:


text =
(

<str>str1</str>

<str>str2</str>

<str>str3</str>

...
)

P := 0
Loop 
    P := RegExMatch(text, "<str>(.*?)</str>", Match%A_Index%, P += 1) , L := A_Index - 1
Until P = 0

Loop % L
    MsgBox %  Match%A_Index%

При помощи Match Object это можно упростить?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

33 (изменено: serzh82saratov, 2013-04-11 20:27:43)

Re: AHK: Выбор из файла определенных нескольких значений

vernikov1
Попробуй так сЪчитать:

FileRead, text, *t C:\Program Files (x86)\Mail.Ru\angr_irds.txt

Текст переменной в 28 посте надо бы оформить тэгом code.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

34

Re: AHK: Выбор из файла определенных нескольких значений

Спасибоооо, вот это помогло.

serzh82saratov пишет:

vernikov1
Попробуй так сЪчитать:

FileRead, text, *t C:\Program Files (x86)\Mail.Ru\angr_irds.txt

Текст переменной в 28 посте надо бы оформить тэгом quote или code.

35

Re: AHK: Выбор из файла определенных нескольких значений

serzh82saratov пишет:

По случаю, вопрос к вам

С вашего позволения, не буду участвовать в пространных оффтоп-дисскусиях.

36 (изменено: creature.ws, 2013-04-12 11:13:01)

Re: AHK: Выбор из файла определенных нескольких значений

Кто нибудь может подсказать в чем ошибка в выше приведенном скрипте?

Ошибка в регулярном выражении.

FileRead, text, C:\Program Files (x86)\Mail.Ru\angr_irds.txt

MsgBox %text%

RegExMatch(text, "O)""keywords"" content=""(?<keywords>[^,]+, [^,]+)[\s\S]+"
                . "стиль3"">(?<text>[^<]+)[\s\S]+"
                . "(?<iframe><iframe.*</iframe>)", m)

MsgBox % m.keywords "`n`n"
       . m.text "`n`n"
       . m.iframe
+ -

В регулярных выражениях можно допускать самые нелепые ошибки, всё-равно их никто не заметит, или, заметив, не возьмётся исправлять