Viktor1703
AutoIT Гуру
- Сообщения
- 1,535
- Репутация
- 413
Да, всё вижу
Угу, работает. Только обратите внимание на правый верхний угол той английской страницы, где написано, что топик закрыт! Или перейдите в нем на последнюю страницу и посмотрите последние беты в ней.Перешёл по ссылке, всё работает
Вот что я вижу в IE8Странно.
#include <Array.au3>
$text1 = FileRead(@ScriptDir&'\history.htm')
$a=StringRegExp($text1, '(?m)^.+? (#\d{3,4}:)(.+?)\r*$', 3)
$c=UBound($a)
Dim $A1[$c/2+1][2] = [[$c/2]]
For $i = 0 To $c-1 Step 2
$p=Int($i/2)
$A1[$p+1][0]=$a[$i]
$A1[$p+1][1]=$a[$i+1]
Next
$text2 = FileRead(@ScriptDir&'\history.txt') ; текст с форума
$a=StringRegExp($text2, '(?m)^.+? (#\d{3,4}:)(.+?)\r*$', 3)
$c=UBound($a)
Dim $A2[$c/2+1][2] = [[$c/2]]
For $i = 0 To $c-1 Step 2
$p=Int($i/2)
$A2[$p+1][0]=$a[$i]
$A2[$p+1][1]=$a[$i+1]
Next
; _ArrayDisplay($A1, 'Array')
; _ArrayDisplay($A2, 'Array')
For $i = 1 To $A2[0][0]
$iInd = _ArraySearch($A1, $A2[$i][0], 0, 0, 0, 0, 1, 0)
If Not @error And $iInd<>-1 Then
If $A1[$iInd][0]=$A2[$i][0] Then ; двойная проверка )))
$text1 = StringReplace($text1, $A1[$iInd][0]&$A1[$iInd][1], $A2[$i][0]&$A2[$i][1]&'</li>')
Else
MsgBox(0, 'Сообщение', $A1[$iInd][0]&@CRLF&$A2[$i][0] )
EndIf
EndIf
Next
$text1 = StringRegExpReplace($text1, '<li>Fixed:*', '<li>Исправлено:')
$text1 = StringRegExpReplace($text1, '<li>Changed:*', '<li>Изменено:')
$text1 = StringRegExpReplace($text1, '<li>Added:*', '<li>Добавлено:')
$text1 = StringRegExpReplace($text1, '<li>Removed:*', '<li>Удалено:')
$file = FileOpen(@ScriptDir&'\history2.htm',2)
FileWrite($file, $text1)
FileClose($file)
Я не совсем понял твою задумку.Вот преобразователь сделал
Скрипт берёт из текстового файла (скопированное с форума лог изменений) и по номеру тикета делает замены в англоязычном файле справки. Но не у всех обновлений есть номер тикета, поэтому не идеально получается. В справке есть ещё два текстовых файла с подробными изменениями, кроме основного с релизами.Я не совсем понял твою задумку.
да, autoit_changelog.txt и autoit_changelog_complete.txt в справке это и есть они, только на англ. и ссылки на эти файлы в истории есть.что там найдутся списки изменении для всех версии?
$Path = "D:\TmpFile.tmp"
$Size = 190*1024*1024 ; 190 Мб
If FileExists($Path) Then FileDelete($Path)
RunWait(@Comspec&' /C fsutil file createnew "' & $Path & '" ' & $size, '', @SW_HIDE)
If FileExists($Path) Then
_Open2($Path)
EndIf
Func _Open2($Path)
$file = FileOpen($Path, 0)
$Bin=''
While 1
$Bin &= FileRead($file, 20 * 1024 * 1024) ; по 20 Мб
If @error = -1 Then ExitLoop
Sleep(1)
WEnd
FileClose($file)
MsgBox(0, Round(FileGetSize($Path)/1024/1024, 2)&' Мб', 'О да, смотри')
EndFunc
Func _Open3($Path)
$file = FileOpen($Path, 16)
$Bin=''
While 1
$Bin &= FileRead($file, 20 * 1024 * 1024) ; по 20 Мб
If @error = -1 Then ExitLoop
Sleep(1)
WEnd
FileClose($file)
MsgBox(0, Round(FileGetSize($Path)/1024/1024, 2)&' Мб', 'О да, смотри')
EndFunc
Func _Open($Path)
; 156 Мб открывается нормально, 182 Мб - 568 Мб в памяти - даёт ошибку
; В бинарном режиме 356 Мб нормально; 402 Мб - вылет
$file = FileOpen($Path, 0)
$text = FileRead($file)
FileClose($file)
MsgBox(0, Round(FileGetSize($Path)/1024/1024, 2)&' Мб', 'О да, смотри')
EndFunc
Откуда тот что слева?Проверил конвертацию скриптом по новой ссылке в итоге 2 разных пеервода
В справке также написано, что ограничение может быть и ниже.Пример, показывающий, что 190 Мб вызывают ошибку памяти
$Var = 'Огромная строка с длиной в 2,147,483,647 символов'
Новичок прочитает обновы к бэткам и будет её качать, ради новизны. А в справке релиз. Ну и если файл там уже есть, зачем делать переходы, когда пользователю удобней тут же и читать.И почему ты не хочешь упростить задачу, поместив в справку текст что я написал выше?
В примере тоже в литеральном виде.А Возможно речь вовсе не про размер строки, а про длину в литеральном виде, т.е типа так: