madmasles
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Astra55, У Вас в файле 11.22.63.fb2 166 ссылок и 173 сноски, есть ссылка 151a и нет такой сноски, есть сноска 150a и нет такой ссылки. Как я понимаю, это Ваша ошибка при правке вручную. Из-за этого у меня теряется одна пара ссылка-сноска и после 161 идет 163. Отрабатывает (у меня) чуть меньше секунды. Код: Opt('MustDeclareVars', 1) Global $sFile_fb2 = @ScriptDir & '\11.22.63.fb2', $iStart $iStart = TimerInit() ConsoleWrite(_Fb2_Href_temp($sFile_fb2) & @LF) ConsoleWrite(TimerDiff($iStart) & @LF) Func _Fb2_Href_temp($s_File_fb2) Local $i_Enc, $h_File, $s_Text, $a_Href, $i_UbHref, $s_NewText, $i_OffSet, $i_Tmp, $a_Note, $i_UbNote, $a_Tmp[1], $s_Tmp_fb2 = @ScriptDir & '\Tmp.fb2' $i_Enc = FileGetEncoding($s_File_fb2) $h_File = FileOpen($s_File_fb2, $i_Enc) If $h_File = -1 Then Return False $s_Text = FileRead($h_File) FileClose($h_File) $a_Href = StringRegExp($s_Text, '(<a l:href=.+?a>)', 3) $i_UbHref = UBound($a_Href) - 1 If $i_UbHref = -1 Then Return False ReDim $a_Tmp[$i_UbHref + 1][2] For $i = 0 To $i_UbHref $a_Tmp[$i][0] = StringRegExpReplace($a_Href[$i], '.+#(fn.+?)".*', '$1') $i_OffSet = StringInStr($s_Text, $a_Href[$i]) - 1 $i_Tmp = $i + 1 $a_Tmp[$i][1] = StringRegExpReplace($a_Href[$i], '^(.+?#fn)(.+?)(".+?\[)(.+?)(\].*)$', '${1}' & $i_Tmp & '${3}' & $i_Tmp & '${5}') $s_NewText &= StringLeft($s_Text, $i_OffSet) & $a_Tmp[$i][1] $s_Text = StringTrimLeft($s_Text, $i_OffSet + StringLen($a_Href[$i])) Next $a_Href = 0 $a_Note = StringRegExp($s_Text, '(?s)(\r\n[^\r\n]*?<section id=.+?</section>)', 3) $i_UbNote = UBound($a_Note) - 1 If $i_UbNote = -1 Then Return False For $i = 0 To $i_UbNote $i_OffSet = StringInStr($s_Text, $a_Note[$i]) - 1 $s_NewText &= StringLeft($s_Text, $i_OffSet) $s_Text = StringTrimLeft($s_Text, $i_OffSet + StringLen($a_Note[$i])) For $j = 0 To $i_UbHref If $a_Tmp[$j][0] Then If StringInStr($a_Note[$i], $a_Tmp[$j][0]) Then $i_Tmp = $j + 1 $s_NewText &= StringRegExpReplace($a_Note[$i], '(?s)^(.+?fn)(.+?)(".+?<p>)(.+?)(</p>.*)$', '${1}' & $i_Tmp & '${3}' & $i_Tmp & '${5}') $a_Tmp[$j][0] = 0 ExitLoop EndIf EndIf Next Next For $i = 0 To $i_UbHref If $a_Tmp[$i][0] Then $s_NewText = StringReplace($s_NewText, $a_Tmp[$i][1], '', 1) $i_Tmp -= 1 EndIf Next $h_File = FileOpen($s_Tmp_fb2, $i_Enc + 2) If $h_File = -1 Then Return False FileWrite($h_File, $s_NewText & $s_Text) FileClose($h_File) ;FileMove($s_Tmp_fb2, $s_File_fb2, 1) Return ($i_UbHref = $i_Tmp) EndFunc ;==>_Fb2_Href_temp |
| Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 12:21 29-03-2013 | Исправлено: madmasles, 13:31 29-03-2013 |
|