Что нового

[Данные, строки] Как сохранить все ссылки соответствующие шаблону в текстовый файл

Dimmer

Новичок
Сообщения
3
Репутация
0
Имеется сохраненная страничка source.htm в которой нужно найти такие ссылки
Код:
href="https://test.ru/profile/520762328821"
(изменяются только цифры, их 12шт постоянно) и записать их в столбик в текстовый файл в таком виде:
Код:
https://test.ru/profile/985125624452
https://test.ru/profile/520762328821
https://test.ru/profile/111555455214
https://test.ru/profile/955655652555
https://test.ru/profile/888888888555
...

Всего ссылок в файле от 500 до 5000, FileReadLine читает посторочно, но в строке ссылок которые подходят может быть много
Ломаю голову как сделать но не получается, подскажите как правильно сделать

Код:
$source = FileOpen("I:\source .htm") ; файл-источник
$dest = FileOpen("I:\ok.txt", 2) ; файл-получатель
$template = StringRegExp($source, '(href="https://test.ru/profile/)([0-9]{12})(")', 2)

While 1
  $str = FileReadLine($source)
  If @error = -1 Then ExitLoop
  If StringInStr($str, $template) Then
	$array = StringRegExp( $str, $template, 2)
	FileWriteLine($dest, $array & @CRLF)
  EndIf
WEnd

FileClose($source)
FileClose($dest)
 
A

Alofa

Гость
Код:
#include <Array.au3>
$sSource = FileRead(@ScriptDir & '\source.htm') ; ... файл-источник
$sFileOk = @ScriptDir & '\ok.txt' ; ................. файл-получатель
$asTemplate = _ArrayUnique(StringRegExp($sSource, 'href\s*=\s*"?(https?://test.ru/profile/\d{12})\D', 3), 0, 0, 0, 0)
If @error Then Exit

$hDest = FileOpen($sFileOk, 2)
If $hDest = -1 Then Exit

For $sElement In $asTemplate
    FileWriteLine($hDest, $sElement & @CRLF)
Next
FileClose($hDest)
 
Автор
D

Dimmer

Новичок
Сообщения
3
Репутация
0
Alofa сказал(а):
Код:
$sSource = FileRead(@ScriptDir & '\source.htm') ; ... файл-источник
$sFileOk = @ScriptDir & '\ok.txt' ; ................. файл-получатель
$asTemplate = StringRegExp($sSource, 'href\s*=\s*"?(https?://test.ru/profile/\d{12})\D', 3)
If @error Then Exit

$hDest = FileOpen($sFileOk, 2)
If $hDest = -1 Then Exit

For $sElement In $asTemplate
	FileWriteLine($hDest, $sElement & @CRLF)
Next
FileClose($hDest)

Спасибо, получилось гениально и просто, все работает :ok:

Подскажите пожалуйста еще как поправить код чтобы в файл записывались только уникальные ссылки без повторов

сейчас так:
Код:
https://test.ru/profile/566352219491
https://test.ru/profile/566352219491
https://test.ru/profile/566352219491
https://test.ru/profile/566352219491
https://test.ru/profile/566930839921
https://test.ru/profile/566930839921
https://test.ru/profile/566930839921
https://test.ru/profile/561937020780
https://test.ru/profile/561937020780
https://test.ru/profile/561937020780
https://test.ru/profile/561848282207
https://test.ru/profile/561848282207
https://test.ru/profile/568993684703
https://test.ru/profile/568993684703
 
Верх