Тема: 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
}
Как можно обрезать тогда лишние…. Сколько бьюсь не получается. Заранее спасибо.

