Тема: WSH or AHK: Копирование выделенных ссылок
Умеют ли WSH или AHK копировать выделенный текст с форматированием?
Если да, — можно было бы приладить нижеследующий код, извлекающий ссылки из файла, к заявленной теме, — сохранил выделенный фрагмент с форматированием --> извлёк его линки в буфер.
; Пример №3: скрипт пытается извлечь все адреса 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