Показать полную графическую версию : [решено] Сохранение определенной стены текста.
iccup.platoon@vk
16-02-2015, 01:35
Есть файл 1.txt, содержащий многа html кода. Нужно сохранить весь текст, начиная со строки <h1>Admin log</h1> до строки <!--end Tourneys-->
Сами указанные строки сохранять не надо.
Путь для сохранения - D:\logs\%текущий_год%\%текущий_месяц%\%текущий_день%\%текущее_время%.txt с проверкой существования всего пути (если нет - Create).
Вот =)
Нужно сохранить весь текст, »
Текст или html-код?
P.S. Что мешает сохранить «ручками»? Для чего нужна автоматизация?
iccup.platoon@vk
16-02-2015, 12:18
HTML, да. Автоматизация нужна потому, что каждые 30 секунд будет появляться файл, который нужно будет обработать. Управляющая программа поддерживает VBS, и я переработаю скрипт (если он будет) под ее API. Выше я описал то, что самостоятельно решить не могу. Были идеи читать весь текст и посредством Mid() и InStr(text, "<h1>Admin log</h1>")...
Были идеи читать весь текст и посредством Mid() и InStr(text, "<h1>Admin log</h1>")... »
Так и есть. Читать потребуется весь текст. Извлекать удобнее будет посредством регулярного выражения.
Упакуйте образец файла в архив. Выложите архив на RGhost. Ссылку — сюда.
iccup.platoon@vk
18-02-2015, 06:15
http://rghost.ru/6ShRRcRJJ
iccup.platoon@vk, попробуйте так:
Option Explicit
Dim strSourceFile
Dim dtNow
Dim strDestFile
Dim objFSO
Dim strContent
strSourceFile = "E:\Песочница\0433\transfer.txt"
dtNow = Now()
strDestFile = _
Join( _
Array( _
"D:\logs", _
CStr(Year(dtNow)), _
ZeroPadRight(Month(dtNow), 2), _
ZeroPadRight(Day(dtNow), 2), _
Join( _
Array( _
ZeroPadRight(Hour(dtNow), 2), _
ZeroPadRight(Minute(dtNow), 2), _
ZeroPadRight(Second(dtNow), 2) _
), _
"_" _
) & ".txt" _
), _
"\" _
)
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strSourceFile) Then
With objFSO.OpenTextFile(strSourceFile)
strContent = StrConvert(.ReadAll(), "windows-1251", "utf-8")
.Close
End With
With WScript.CreateObject("VBScript.RegExp")
.IgnoreCase = True
.Pattern = "<h1>Admin log</h1>([\s\S]*)<!--end Tourneys-->"
If .Test(strContent) Then
strContent = .Execute(strContent).Item(0).Submatches(0)
CreateFolderEx objFSO.GetParentFolderName(strDestFile)
With objFSO.CreateTextFile(strDestFile)
.Write strContent
.Close
End With
Else
WScript.Echo "Can't find pattern [" & .Pattern & "] in source file [" & strSourceFile & "]."
WScript.Quit 2
End If
End With
Else
WScript.Echo "Can't find source file [" & strSourceFile & "]."
WScript.Quit 1
End If
Set objFSO = Nothing
WScript.Quit 0
'=============================================================================
'=============================================================================
' HKEY_CLASSES_ROOT\MIME\Database\Charset
' cp866, windows-1251, koi8-r, unicode, utf-8, _autodetect
'=============================================================================
Function StrConvert(ByVal strText, ByVal strSourceCharset, ByVal strDestCharset)
Const adTypeText = 2
Const adModeReadWrite = 3
With WScript.CreateObject("ADODB.Stream")
.Type = adTypeText
.Mode = adModeReadWrite
.Open
.Charset = strSourceCharset
.WriteText strText
.Position = 0
.Charset = strDestCharset
StrConvert = .ReadText
.Close
End With
End Function
'=============================================================================
'=============================================================================
Sub CreateFolderEx(strPath)
With WScript.CreateObject("Scripting.FileSystemObject")
If Not .FolderExists(strPath) Then
CreateFolderEx .GetParentFolderName(strPath)
.CreateFolder strPath
End If
End With
End Sub
'=============================================================================
'=============================================================================
Function ZeroPadRight(intValue, intLength)
ZeroPadRight = Right(String(intLength, "0") & CStr(intValue), intLength)
End Function
'=============================================================================
Исходный файл, как и в выложенном образце, ожидается в кодировке UTF-8 без BOM. Результирующий файл — в кодировке ANSI/1251. В примере путь к исходному файлу задаётся непосредственно в коде (могу переделать, чтобы путь задавался аргументом скрипта).
iccup.platoon@vk
18-02-2015, 07:47
Работает прекрасно.
Еще одно:
<h1>Admin log</h1>
<div class="clear"></div>
</div>
можно ли вслед за первой вышеуказанной строкой удалять две последующие?
А так же пустые строки в результирующем файле (тестил на том же файле, что скидывал Вам) не желательны - первая и 4 последних. Можно ли их удалить?
можно ли вслед за первой вышеуказанной строкой удалять две последующие? »
Если они всегда присутствуют в исходном файле, то есть смысл включить их в шаблон поиска. Итак, всегда присутствуют?
А так же пустые строки в результирующем файле (тестил на том же файле, что скидывал Вам) не желательны - первая и 4 последних. Можно ли их удалить? »
Можно.
iccup.platoon@vk
18-02-2015, 09:25
Всегда присутствуют.
iccup.platoon@vk, замените в вышеприведённом скрипте строку:
.Pattern = "<h1>Admin log</h1>([\s\S]*)<!--end Tourneys-->"
на:
.Pattern = "<h1>Admin log</h1>\r\n<div class=""clear""></div>[\r\n]*</div>\r\n([\s\S]*\S\r\n)[\r\n]*<!--end Tourneys-->"
iccup.platoon@vk
18-02-2015, 10:16
Одна пустая строка все-равно остается в конце, но это не беда - сам исправлю.
Указанных строк больше не создается - Iska, Вы как всегда а уровне.
Мир Вашему дому. Можно закрывать.
Одна пустая строка все-равно остается в конце, »
Не остаётся. Пустая строка состоит только из символов конца строки: двух символов, «CrLf», в Windows, или одного — «Lf» в Unix/«Cr» — в MacOS. В нашем же случае этого не наблюдается:
http://i.imgur.com/wnnYERS.png
— есть не пустая строка, завершающаяся, как и положено, символами конца строки.
Если они Вам категорически мешают, просто уберите «\r\n» из подгруппы:
.Pattern = "<h1>Admin log</h1>\r\n<div class=""clear""></div>[\r\n]*</div>\r\n([\s\S]*\S)[\r\n]*<!--end Tourneys-->"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.