копировать или вырезать строки в последовательном порядке
Здравствуйте.
Необходима реализация следующего скрипта:
Существует два файла: 1.txt и 2.txt.
Нужно из файла 1.txt копировать или вырезать строки в последовательном порядке (сверху в низ) и вставлять их в файл 2.txt вместо пустых строк, но чтобы также последовательно (сверху вниз).
В файле 1.txt содержаться подготовленные строки, пустых строк нету.
В файле 2.txt находится информация, которая разделена пустыми строками.
То есть пошагово процесс происходит следующим образом:
Скрипт из файла 1.txt копирует или вырезает первую сверху строку (целиком) и вставляет ее в файл 2.txt вместо первой попавшейся (сверху в низ) пустой строки. Затем возвращается к файлу 1.txt копирует или вырезает следующую строку (если было вырезание, значит следующая строка всегда будет первой) и процесс повторяется до полного завершения.
Возможно ли в принципе такое реализовать? Или это всего лишь нереальные мечтания?
Заранее благодарен за помощь.
|
Пример покажите: файл 1.txt, файл 2.txt, результирующий файл.
|
temphard, Вам обязательно на cmd/bat?
Вообще - это легко алгоритмизируемая задача, исполняемая на любом языке программирования, в том числе и на vbs.
|
Вложений: 3
Цитата:
Цитата Iska
Пример покажите: файл 1.txt, файл 2.txt, результирующий файл. »
|
Здесь пример содержимого файлов 1.txt и 2.txt.
В файле 1.txt двенадцать строк, которые необходимо скопировать/вырезать и вставить их в файл 2.txt, в котором кроме прочей информации существует двенадцать пустых строк.
В файле 3.txt отображен конечный результат.
|
Цитата:
Цитата glukin
Вам обязательно на cmd/bat? »
|
Да, в данном случае подойдет только cmd/bat.
|
Цитата:
Цитата temphard
Да, в данном случае подойдет только cmd/bat. »
|
Почему? Обоснуйте.
|
Я не отрицаю, что данную задачу можно (и возможно это проще и практичнее) реализовать на любом языке программирования, в том числе и на vbs.
Я имею ввиду, что немного знаком и имею небольшой опыт использования лишь cmd/bat, поэтому предпочитаю этот способ.
На мой взгляд cmd/bat легко редактировать и изменять под разные нужды.
Если можно по другому, то как именно, легко ли этим пользоваться и что для этого нужно?
Спасибо за понимание.
|
На 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
Будете проверять на тех образцах, что Вы выложили — имейте в виду, что у Вас там две одиннадцатых строки :).
|
Спасибо. Работает!
Я создал текстовый файл, поместил в него скрипт и сохранил с расширением *.vbs - Это правильно?
Но главное, что это работает! Удивительно!
Оказывается cmd/bat - это всего лишь небольшая часть "вселенной" скриптов.
Балгодарю.
P.S.
Цитата:
Цитата Iska
там две одиннадцатых строки »
|
...верно, это техническая ошибка.
|
Цитата:
Цитата temphard
Я создал текстовый файл, поместил в него скрипт и сохранил с расширением *.vbs - Это правильно? »
|
Да.
Цитата:
Цитата temphard
Но главное, что это работает! Удивительно! »
|
Можете поиграться с вариантами «исходных строк меньше/больше, чем пустых». Я не проверял.
|
На cmd, скорость не проверял, сделал для примера (чтобы не потерять, а кому-то может и пригодится):
Код:
@echo off
set "f1=01.txt"
set "f2=02.txt"
set "f3=03.txt"
set n=-1
<"%f2%">"%f3%" (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do @(
if not "%%b"=="" (<nul set /p="%%b"& echo:) else (call :#)
)
)
exit
:#
@set /a n+=1
@<"%f1%" (more +%n%|set/p s=^& cmd/v/c "if defined s (<nul set /p="!s!"& echo:) else (echo:)")
@exit /b
|
Время: 05:51.
© OSzone.net 2001-