Что нового

[Данные, строки] Проверка на наличие файлов, на которые есть ссылка в html

Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Работает! Большое спасибо! :smile:
Если не сложно, можно поправить код, чтобы он помимо папки "ill\picture" и поиска в ней png файла, искал в папке "ill\gif" файлы gif? (тот же смысл поиска, что и раньше)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Tapok
В принципе возможно всё, но вы уж определитесь что вам нужно!
Если вы сами создаёте материал для публикации, то составьте определённый алгоритм.
Например, что вам нужно в строчке ниже PNG (Илл.49.бегемот.png) или GIF (Илл.49.бегемот_1.gif)?
Код:
<span ID="ACH-LINK" class="Rpic_ill/picture/Илл.49.бегемот.png_name_Илл.^49.^бегемот_hot_ill/gif/Илл.49.бегемот_1.gif" title="">бегемот</span>
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Дело в том, что изначально я описал часть задачи.
По ссылке вида "бегемот (см. илл. 4.1)" просто выводится иллюстрация;
По ссылке вида бегемот

Код:
<span ID="ACH-LINK" class="Rpic_ill/picture/Илл.49.бегемот.png_name_Илл.^49.^бегемот_hot_ill/gif/Илл.49.бегемот_1.gif" title="">бегемот</span>

на иллюстрации выводится мигающая область (gif файл). В этом случае у нас два файла:
Код:
Илл.49.бегемот.png
и 
Илл.49.бегемот_1.gif
т.е. на иллюстрации "Илл.49.бегемот.png" мы поверх показываем "Илл.49.бегемот_1.gif", может быть "Илл.49.бегемот_2.gif" (мигающий квадрат в другой области) и т.д.

Т.е проверять надо файлы "png" в папке "ill\picture" и "gif" в папке "ill\gif"

как то так... :-[
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Tapok [?]
Т.е проверять надо файлы "png" в папке "ill\picture" и "gif" в папке "ill\gif"
Код:
#include<Array.au3>

$oDoc = ObjCreate("HTMLFILE")

$hFirstFile = FileFindFirstFile(StringFormat('%s\html\*.html', @ScriptDir))
If $hFirstFile = -1 Then
	MsgBox(16, @ScriptName, "No files/directories")
	Exit
EndIf

While 1

	$iCount = 0
	$sFileName = FileFindNextFile($hFirstFile)
	If @error Then ExitLoop

	$oDoc.open
	$sHtml = FileRead(StringFormat('%s\html\%s', @ScriptDir, $sFileName))
	$oDoc.write($sHtml)
	$oDoc.close

	$oSpan = $oDoc.getElementsByTagName("span")

	Local $aPic[1000]
	; проверка битых ссылок
	For $i = 0 To $oSpan.length-1

		If $iCount = UBound($aPic) Then
			ReDim $aPic[UBound($aPic)+1000]
		EndIf

		$aListSpan = StringRegExp($oSpan.item($i).className, '(?<=/picture/).*?\.png|(?<=/gif/).*?\.gif', 3)

		Switch UBound($aListSpan)
			Case 2
				If Not FileExists(StringFormat('%s\ill\gif\%s', @ScriptDir, $aListSpan[1])) Then
					$aPic[$iCount] = $aListSpan[1]
					$iCount +=1
				EndIf
            ContinueCase
			Case 1
				If Not FileExists(StringFormat('%s\ill\picture\%s', @ScriptDir, $aListSpan[0])) Then
					$aPic[$iCount] = $aListSpan[0]
					$iCount +=1
				EndIf
		EndSwitch
	Next

	$aListSpan = 0

	If $iCount Then
		; если есть битые ссылки записываем в файл отчёта. иначе файл не создаётся.
		ReDim $aPic[$iCount]
		$hFile = FileOpen(StringFormat('%s\html\%s.not_existing.log', @ScriptDir, $sFileName), 2)
		For $i = 0 To UBound($aPic) -1
			FileWriteLine($hFile, $aPic[$i])
		Next
		FileClose($hFile)
	Else
		; если все ссылки поправили, то при повторном анализе файл отчёта удаляется (если таковой существует)
		If FileExists(StringFormat('%s\html\%s.not_existing.log', @ScriptDir, $sFileName)) Then
			FileDelete(StringFormat('%s\html\%s.not_existing.log', @ScriptDir, $sFileName))
		EndIf
	EndIf

	$oDoc.write('')
	$aPic = 0
	Sleep(10)
WEnd
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Работает! Большое спасибо! :IL_AutoIt_1:
 
Верх