Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Сохранение определенной стены текста.

Ответить
Настройки темы
VBS/WSH/JS - [решено] Сохранение определенной стены текста.

Аватара для iccup.platoon@vk

Пользователь


Сообщения: 82
Благодарности: 9

Профиль | Сайт | Отправить PM | Цитировать


Есть файл 1.txt, содержащий многа html кода. Нужно сохранить весь текст, начиная со строки <h1>Admin log</h1> до строки <!--end Tourneys-->
Сами указанные строки сохранять не надо.
Путь для сохранения - D:\logs\%текущий_год%\%текущий_месяц%\%текущий_день%\%текущее_время%.txt с проверкой существования всего пути (если нет - Create).
Вот

Отправлено: 01:35, 16-02-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата iccup.platoon@vk:
Нужно сохранить весь текст, »
Текст или html-код?

P.S. Что мешает сохранить «ручками»? Для чего нужна автоматизация?

Отправлено: 06:41, 16-02-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для iccup.platoon@vk

Пользователь


Сообщения: 82
Благодарности: 9

Профиль | Сайт | Отправить PM | Цитировать


HTML, да. Автоматизация нужна потому, что каждые 30 секунд будет появляться файл, который нужно будет обработать. Управляющая программа поддерживает VBS, и я переработаю скрипт (если он будет) под ее API. Выше я описал то, что самостоятельно решить не могу. Были идеи читать весь текст и посредством Mid() и InStr(text, "<h1>Admin log</h1>")...

-------
Да, я дотошный. Да, я всегда уточняю цели. Зато выполняю задание на совесть.


Отправлено: 12:18, 16-02-2015 | #3


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата iccup.platoon@vk:
Были идеи читать весь текст и посредством Mid() и InStr(text, "<h1>Admin log</h1>")... »
Так и есть. Читать потребуется весь текст. Извлекать удобнее будет посредством регулярного выражения.

Упакуйте образец файла в архив. Выложите архив на RGhost. Ссылку — сюда.

Отправлено: 10:38, 17-02-2015 | #4


Аватара для iccup.platoon@vk

Пользователь


Сообщения: 82
Благодарности: 9

Профиль | Сайт | Отправить PM | Цитировать


http://rghost.ru/6ShRRcRJJ

-------
Да, я дотошный. Да, я всегда уточняю цели. Зато выполняю задание на совесть.


Отправлено: 06:15, 18-02-2015 | #5


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


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. В примере путь к исходному файлу задаётся непосредственно в коде (могу переделать, чтобы путь задавался аргументом скрипта).
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:17, 18-02-2015 | #6


Аватара для iccup.platoon@vk

Пользователь


Сообщения: 82
Благодарности: 9

Профиль | Сайт | Отправить PM | Цитировать


Работает прекрасно.
Еще одно:
Код: Выделить весь код
<h1>Admin log</h1>
<div class="clear"></div>
</div>
можно ли вслед за первой вышеуказанной строкой удалять две последующие?
А так же пустые строки в результирующем файле (тестил на том же файле, что скидывал Вам) не желательны - первая и 4 последних. Можно ли их удалить?

-------
Да, я дотошный. Да, я всегда уточняю цели. Зато выполняю задание на совесть.


Отправлено: 07:47, 18-02-2015 | #7


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата iccup.platoon@vk:
можно ли вслед за первой вышеуказанной строкой удалять две последующие? »
Если они всегда присутствуют в исходном файле, то есть смысл включить их в шаблон поиска. Итак, всегда присутствуют?

Цитата iccup.platoon@vk:
А так же пустые строки в результирующем файле (тестил на том же файле, что скидывал Вам) не желательны - первая и 4 последних. Можно ли их удалить? »
Можно.

Отправлено: 08:28, 18-02-2015 | #8


Аватара для iccup.platoon@vk

Пользователь


Сообщения: 82
Благодарности: 9

Профиль | Сайт | Отправить PM | Цитировать


Всегда присутствуют.

-------
Да, я дотошный. Да, я всегда уточняю цели. Зато выполняю задание на совесть.


Отправлено: 09:25, 18-02-2015 | #9


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


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-->"
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:52, 18-02-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Сохранение определенной стены текста.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Выделить из строки текста слово определенной длины и записать в переменную Grafitchic Скриптовые языки администрирования Windows 14 16-07-2014 12:23
Новый пластик позволит без опасений бить смартфоны об стены OSZone News Новости железа 9 05-09-2013 11:48
Wi-Fi позволит смотреть сквозь стены OSZone News Новости железа 2 29-06-2013 17:52
[решено] GPO - запрет на сохранение или запись файлов с определенной маской на жесткий диск shav-75 Microsoft Windows NT/2000/2003 13 13-06-2009 13:22
[решено] Сохранение текста в PHP. DaRiYs Вебмастеру 11 28-04-2008 15:04




 
Переход