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

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

Ответить
Настройки темы
CMD/BAT - копировать или вырезать строки в последовательном порядке

Новый участник


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

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


Здравствуйте.
Необходима реализация следующего скрипта:

Существует два файла: 1.txt и 2.txt.
Нужно из файла 1.txt копировать или вырезать строки в последовательном порядке (сверху в низ) и вставлять их в файл 2.txt вместо пустых строк, но чтобы также последовательно (сверху вниз).
В файле 1.txt содержаться подготовленные строки, пустых строк нету.
В файле 2.txt находится информация, которая разделена пустыми строками.

То есть пошагово процесс происходит следующим образом:
Скрипт из файла 1.txt копирует или вырезает первую сверху строку (целиком) и вставляет ее в файл 2.txt вместо первой попавшейся (сверху в низ) пустой строки. Затем возвращается к файлу 1.txt копирует или вырезает следующую строку (если было вырезание, значит следующая строка всегда будет первой) и процесс повторяется до полного завершения.

Возможно ли в принципе такое реализовать? Или это всего лишь нереальные мечтания?
Заранее благодарен за помощь.

Отправлено: 01:39, 17-03-2017

 

Ветеран


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

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


Пример покажите: файл 1.txt, файл 2.txt, результирующий файл.

Отправлено: 02:45, 17-03-2017 | #2



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

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


Старожил


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

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


temphard, Вам обязательно на cmd/bat?
Вообще - это легко алгоритмизируемая задача, исполняемая на любом языке программирования, в том числе и на vbs.

Отправлено: 07:55, 17-03-2017 | #3


Новый участник


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

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


Вложения
Тип файла: txt 01.txt
(1.0 Kb, 4 просмотров)
Тип файла: txt 02.txt
(3.5 Kb, 2 просмотров)
Тип файла: txt 03.txt
(4.5 Kb, 3 просмотров)

Цитата Iska:
Пример покажите: файл 1.txt, файл 2.txt, результирующий файл. »
Здесь пример содержимого файлов 1.txt и 2.txt.
В файле 1.txt двенадцать строк, которые необходимо скопировать/вырезать и вставить их в файл 2.txt, в котором кроме прочей информации существует двенадцать пустых строк.
В файле 3.txt отображен конечный результат.

Отправлено: 13:08, 17-03-2017 | #4


Новый участник


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

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


Цитата glukin:
Вам обязательно на cmd/bat? »
Да, в данном случае подойдет только cmd/bat.

Отправлено: 13:09, 17-03-2017 | #5


Ветеран


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

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


Цитата temphard:
Да, в данном случае подойдет только cmd/bat. »
Почему? Обоснуйте.

Отправлено: 13:24, 17-03-2017 | #6


Новый участник


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

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


Цитата Iska:
Почему? Обоснуйте. »
Я не отрицаю, что данную задачу можно (и возможно это проще и практичнее) реализовать на любом языке программирования, в том числе и на vbs.
Я имею ввиду, что немного знаком и имею небольшой опыт использования лишь cmd/bat, поэтому предпочитаю этот способ.
На мой взгляд cmd/bat легко редактировать и изменять под разные нужды.
Если можно по другому, то как именно, легко ли этим пользоваться и что для этого нужно?
Спасибо за понимание.

Отправлено: 14:11, 17-03-2017 | #7


Ветеран


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

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


На WSH.

Медленнее, но меньше памяти
Код: Выделить весь код
Option Explicit

Dim strSource1File
Dim strSource2File
Dim strDestFile

Dim objSource1TS
Dim objSource2TS
Dim objDestTS

Dim strSource1Line, strSource2Line


strSource1File = "C:\Мои проекты\0052\01.txt"
strSource2File = "C:\Мои проекты\0052\02.txt"
strDestFile    = "C:\Мои проекты\0052\04.txt"

With WScript.CreateObject("Scripting.FileSystemObject")
	Set objSource1TS = .OpenTextFile(strSource1File)
	Set objSource2TS = .OpenTextFile(strSource2File)
	Set objDestTS    = .CreateTextFile(strDestFile, True)
	
	If Not objSource1TS.AtEndOfStream Then
		strSource1Line = objSource1TS.ReadLine()
	Else
		WScript.Quit 1
	End If
		
	Do
		If Not objSource2TS.AtEndOfStream Then
			strSource2Line = objSource2TS.ReadLine()
			
			If Len(Trim(strSource2Line)) = 0 Then
				objDestTS.WriteLine strSource1Line
				
				If Not objSource1TS.AtEndOfStream Then
					strSource1Line = objSource1TS.ReadLine()
				Else
					strSource1Line = ""
				End If
			Else
				objDestTS.WriteLine strSource2Line
			End If
		Else
			Exit Do
		End If
	Loop
	
	objDestTS.Close
	objSource2TS.Close
	objSource1TS.Close
	
	Set objDestTS    = Nothing
	Set objSource2TS = Nothing
	Set objSource1TS = Nothing
End With

WScript.Quit 0

Быстрее, но больше памяти
Код: Выделить весь код
Option Explicit

Dim strSource1File
Dim strSource2File
Dim strDestFile

Dim arrSource1Content
Dim arrSource2Content

Dim iSource1Count, iSource2Count


strSource1File = "C:\Мои проекты\0052\01.txt"
strSource2File = "C:\Мои проекты\0052\02.txt"
strDestFile    = "C:\Мои проекты\0052\04.txt"

With WScript.CreateObject("Scripting.FileSystemObject")
	With .OpenTextFile(strSource1File)
		arrSource1Content = Split(.ReadAll(), vbCrLf)
		.Close
	End With
	
	With .OpenTextFile(strSource2File)
		arrSource2Content = Split(.ReadAll(), vbCrLf)
		.Close
	End With
	
	iSource2Count = LBound(arrSource2Content)
	
	For iSource1Count = LBound(arrSource1Content) To UBound(arrSource1Content)
		Do
			If Len(Trim(arrSource2Content(iSource2Count))) = 0 Then
				arrSource2Content(iSource2Count) = arrSource1Content(iSource1Count)
				Exit Do
			End If
			
			iSource2Count = iSource2Count + 1
			
			If iSource2Count > UBound(arrSource2Content) Then
				Exit For
			End If
		Loop
	Next
	
	With .CreateTextFile(strDestFile, True)
		.Write Join(arrSource2Content, vbCrLf)
		.Close
	End With
End With

WScript.Quit 0

Будете проверять на тех образцах, что Вы выложили — имейте в виду, что у Вас там две одиннадцатых строки .
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:24, 17-03-2017 | #8


Новый участник


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

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


Цитата Iska:
На WSH »
Спасибо. Работает!
Я создал текстовый файл, поместил в него скрипт и сохранил с расширением *.vbs - Это правильно?
Но главное, что это работает! Удивительно!
Оказывается cmd/bat - это всего лишь небольшая часть "вселенной" скриптов.
Балгодарю.
P.S.
Цитата Iska:
там две одиннадцатых строки »
...верно, это техническая ошибка.

Отправлено: 14:46, 17-03-2017 | #9


Ветеран


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

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


Цитата temphard:
Я создал текстовый файл, поместил в него скрипт и сохранил с расширением *.vbs - Это правильно? »
Да.

Цитата temphard:
Но главное, что это работает! Удивительно! »
Можете поиграться с вариантами «исходных строк меньше/больше, чем пустых». Я не проверял.

Отправлено: 14:57, 17-03-2017 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интернет - Изменение параметров интернет подключения с командной строки или Powershell termikx Скриптовые языки администрирования Windows 5 14-10-2013 15:46
Подскажите пожалуйста какой прогой можно обрезать MP4 или avi видео? Просто вырезать Igor32123 Хочу все знать 16 02-04-2013 19:13
CMD/BAT - Ошибка при последовательном запуске нескольких батников WhiteBear1991 Скриптовые языки администрирования Windows 1 21-03-2013 00:13
? как из к.строки убить прцесс или закрыть программу djoniAg Microsoft Windows 95/98/Me (архив) 1 09-10-2004 19:18




 
Переход