Что нового

Как спарсить новости из текстового файла ?

vaf

Новичок
Сообщения
190
Репутация
2
Доброго времени суток уважаемые форумчане, подскажите как наиболее эффективно спарсить новости из текстового файла. (файл по ссылке)
https://yadi.sk/d/kTq0dFlDrYrECw количество новостей в файлах бывает разное
Хотелось бы выдернуть значения <pubDate> без +0300, <title> и <description> и положить эти новости в текстовые файлы 1.txt, 2.txt, 3.txt и т.д
в формате <pubDate>, <title> - <description>
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
уверен, что можно более изящно , но вот мой вариант :
Код:
$sText = FileRead('news.txt')

$aRes = StringRegExp($sText, '(?s)(?i)<item>(.*?)</item>', 3)
If @error Then Exit

For $i = 0 To UBound($aRes) - 1

	$PubDate = StringRegExp($aRes[$i], '(?:<pubDate>)(.*?)\+', 1)
	$Title = StringRegExp($aRes[$i], '<title>(.*?)</title>', 1)
	$Description = StringRegExp($aRes[$i], '<description>(.*?)</description>', 1)
	$FileText = $PubDate[0] &' , ' & $Title[0] &' - '& $Description[0]
	FileWrite(@ScriptDir & '\' & $i + 1 & '.txt', $FileText)

Next
 

xXx

╚{■_■}╗
Меценат
Сообщения
248
Репутация
95
vaf сказал(а):
положить эти новости в текстовые файлы 1.txt, 2.txt, 3.txt и т.д
в формате <pubDate>, <title> - <description>

Альтернативный вариант:
Код:
$sText = FileRead(@ScriptDir & '\news.txt')
$aArray = StringRegExp($sText, '(?is)<item>.+?<title>([^<]+)</.+?<description>([^<]+)</.+?<pubDate>([^<]+)</.+?</item>', 3)
$sText = ''
For $i = 0 To UBound($aArray) - 1 Step 3
	$sText &= @CRLF & '[ITEM_' & (($i + 3) / 3) & ']' & @CRLF & 'PubDate = ' & $aArray[$i + 2] & _
			@CRLF & 'Title = ' & $aArray[$i] & @CRLF & 'Description = ' & $aArray[$i + 1] & @CRLF
		Next
If Not $sText Then Exit
$hFile = FileOpen(@ScriptDir & '\News.ini', 2 + 512)
FileWrite($hFile, $sText)
FileClose($hFile)

С .INI далее работать проще будет.
 
Автор
V

vaf

Новичок
Сообщения
190
Репутация
2
Спасибо, всё работает. Оба варианта хороши, нужно изучить регулярные выражения, а то я нагородил всё через StringSplit
 
Верх