Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

Ответить
Настройки темы
VBS/WSH/JS - Работа с текстовым файлом

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

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


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

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


Приветствую. По "работе" нужно копаться с файлами - перетаскивать строки в файле "A.txt" по примеру постановки текста в файле "B.txt". Соль в том, что во-первых в файлах, с которыми мне нужно работать, очень много пустых строк и комментариев, начинающихся на символ "#", во-вторых строки просто по-разному стоят, и с этим очень нудно работать, по этому я очень надеюсь на вашу помощь.
Вот текст файла-примера:
читать дальше »

Код: Выделить весь код
map_path = Maps\Download\Angel Arena Allstars v1.69f.w3x
map_localpath = Angel Arena Allstars v1.69f.w3x
map_type = custom
map_size = 108 221 49 0
map_info = 54 3 122 61
map_crc = 114 59 138 108
map_sha1 = 136 225 120 234 157 17 0 249 209 164 91 38 0 24 30 86 63 226 31 220
map_width = 180 0
map_height = 151 0
map_numplayers = 12
map_numteams = 2
map_slot1 = 0 255 0 0 0 0 1 1 100
map_slot2 = 0 255 0 0 0 1 1 1 100
map_slot3 = 0 255 0 0 0 2 1 1 100
map_slot4 = 0 255 0 0 0 3 1 1 100
map_slot5 = 0 255 0 0 0 4 1 1 100
map_slot6 = 0 255 0 0 0 5 1 1 100
map_slot7 = 0 255 0 0 1 6 1 1 100
map_slot8 = 0 255 0 0 1 7 1 1 100
map_slot9 = 0 255 0 0 1 8 1 1 100
map_slot10 = 0 255 0 0 1 9 1 1 100
map_slot11 = 0 255 0 0 1 10 1 1 100
map_slot12 = 0 255 0 0 1 11 1 1 100
map_speed = 3
map_visibility = 4
map_observers = 1
map_flags = 3
map_gametype = 1
map_icctype = 2

А так выглядит файл, с которым нужно работать:
читать дальше »

Код: Выделить весь код
map_path = Maps\Download\SurvivalChaos2.86p.w3x
map_size = 133 137 70 0
map_info = 82 54 65 169
map_crc = 222 220 100 59
map_sha1 = 10 230 170 119 178 69 186 113 143 181 41 81 81 10 134 6 17 185 151 233
map_speed = 3
map_visibility = 4
map_observers = 1
map_flags = 3
map_gametype = 1
map_width = 92 0
map_height = 92 0
map_numplayers = 8
map_numteams = 4
map_slot1 = 0 255 2 1 1 0 1 1 100
map_slot2 = 0 255 2 1 2 1 1 1 100
map_slot3 = 0 255 2 1 0 4 1 1 100
map_slot4 = 0 255 0 0 0 5 32 1 100
map_slot5 = 0 255 2 1 3 6 1 1 100
map_slot6 = 0 255 0 0 1 7 32 1 100
map_slot7 = 0 255 0 0 2 9 32 1 100
map_slot8 = 0 255 0 0 3 10 32 1 100
map_type = 
map_matchmakingcategory = 
map_statsw3mmdcategory = 
map_localpath = SurvivalChaos2.86p.w3x

Не обращайте внимания на то, что стоит после "=" - главное, чтобы все строки шли как в файле примере, по той же очереди.
Примечание: параметр map_slot в некоторых
файлах встречается не один раз.
Мне нужно всего 3 вещи:
1) Чтобы строки во втором файле были расположены как в первом
2) Чтобы в получившемся файле не было пустых строк
3) Чтобы в получившемся файле не было строк, начинающихся на символ "#"
Фух, всё описал. Очень надеюсь на вашу помощь, заранее спасибо.

Отправлено: 11:01, 17-05-2014

 

Ветеран


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

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


Пробуйте:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim objFSO

Dim strFileMaster
Dim strFileWorking

Dim arrContent
Dim i
Dim objDictionaryMaster
Dim objDictionaryWorking

Dim strKey


If WScript.Arguments.Count = 2 Then
	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	
	strFileMaster = WScript.Arguments.Item(0)
	
	If Not objFSO.FileExists(strFileMaster) Then
		WScript.Echo "Master file [" & strFileMaster & "] not found."
		WScript.Quit 2
	End If
	
	strFileWorking = WScript.Arguments.Item(1)
	
	If Not objFSO.FileExists(strFileWorking) Then
		WScript.Echo "Working file [" & strFileWorking & "] not found."
		WScript.Quit 3
	End If
	
	Set objDictionaryMaster  = WScript.CreateObject("Scripting.Dictionary")
	Set objDictionaryWorking = WScript.CreateObject("Scripting.Dictionary")
	
	With objFSO.OpenTextFile(strFileMaster)
		arrContent = Split(.ReadAll(), vbCrLf)
		.Close
	End With
	
	For i = LBound(arrContent) To UBound(arrContent) - 1
		arrContent(i) = Trim(arrContent(i))
		
		If Len(arrContent(i)) <> 0 Then
			If Left(arrContent(i), 1) <> "#" Then
				If InStr(arrContent(i), "=") > 0 Then
					objDictionaryMaster.Add Trim(Split(arrContent(i), "=", 2)(0)), Trim(Split(arrContent(i), "=", 2)(1))
				End If
			End If
		End If
	Next
	
	With objFSO.OpenTextFile(strFileWorking)
		arrContent = Split(.ReadAll(), vbCrLf)
		.Close
	End With
	
	For i = LBound(arrContent) To UBound(arrContent) - 1
		arrContent(i) = Trim(arrContent(i))
		
		If Len(arrContent(i)) <> 0 Then
			If Left(arrContent(i), 1) <> "#" Then
				If InStr(arrContent(i), "=") > 0 Then
					objDictionaryWorking.Add Trim(Split(arrContent(i), "=", 2)(0)), Trim(Split(arrContent(i), "=", 2)(1))
				End If
			End If
		End If
	Next
	
	objFSO.CopyFile strFileWorking, objFSO.GetBaseName(strFileWorking) & ".bak", True
	
	With objFSO.CreateTextFile(strFileWorking, True)
		For Each strKey In objDictionaryMaster.Keys
			If objDictionaryWorking.Exists(strKey) Then
				.WriteLine strKey & " = " & objDictionaryWorking.Item(strKey)
				
				objDictionaryMaster.Remove strKey
				objDictionaryWorking.Remove strKey
			Else
				.WriteLine strKey & " = "
			End If
		Next
		
		.WriteLine
		.WriteLine "# Lines below not found by patterns of Master file [" & strFileMaster & "]:"
		
		For Each strKey In objDictionaryWorking.Keys
			.WriteLine strKey & " = " & objDictionaryWorking.Item(strKey)
		Next
		
		.Close
	End With
Else
	WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " <Master file> <Working file>"
	WScript.Quit 1
End If

WScript.Quit 0

Скрипту требуется указать два аргумента: образец, мастер-файл и рабочий, целевой файл. Из мастер-файла берутся левые части строк до символа «=» и их порядок. Из целевого файла убираются пустые строки и строки, начинающиеся на «#». Из остальных строк в порядке, заданном порядком левых частей строк мастер-файла, строится новое содержимое целевого файла.

Если в мастер-файле существуют левые части строк, отсутствующие в целевом файле, то такие строки добавляются в целевой файл с пустыми значениями — пустыми правыми частями после знака равенства.

В конце нового содержимого целевого файла указываются строки оригинального целевого файла, которым не было найдено соответствия с левыми частями строк мастер-файла.

Оригинальное предыдущее содержимое целевого файла остаётся доступным в одноимённом файле с расширением «.bak» (при этом, если таковой .bak файл уже существовал ранее — его содержимое будет утеряно).
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:18, 21-05-2014 | #2



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

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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] работа с XML файлом taravasya Скриптовые языки администрирования Windows 18 07-06-2017 09:13
CMD/BAT - [решено] Батник который следит за текстовым файлом тхт angel_lyucifer Скриптовые языки администрирования Windows 3 31-01-2013 03:09
Офис и Текст - Посоветуйте программу для работы с текстовым файлом beata08 Программное обеспечение Windows 3 15-09-2010 23:43
7 / 2008 R2 - [решено] Работа со вторым файлом ответов Ruboard Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 1 20-05-2010 00:03
Разное - Работа с файлом hhh8486 Вебмастеру 1 23-11-2007 20:43




 
Переход