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

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

Ответить
Настройки темы
CMD/BAT - [решено] Вставка строк в текстовый файл с определенной позиции.

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


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

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


Вложения
Тип файла: rar test.rar
(2.4 Kb, 19 просмотров)
Здравствуйте.
Помогите написать cmd или vbs скрипт.
Необходимо организовать вставку в текстовые файлы (DXF) 4-х строк, начиная с 6-й строки.


Вставляемые строки:
$ACADVER
1
AC1009
9


Спасибо.

Приложен пример файла для обработки

Отправлено: 15:57, 01-02-2013

 

Аватара для zion87

Старожил


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

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


Код: Выделить весь код
@echo off
echo working
set n=0
set file=test.dxf
set temp=test.txt
for /f "delims=*" %%i in (' more +%n% %file% ') do call :1 "%%i"
:next
echo $ACADVER >>%temp%
echo   1 >>%temp%
echo AC1009 >>%temp%
echo   9 >>%temp%
for /f "delims=*" %%s in (' more +5 %file% ') do echo %%s >>%temp%
del %file% && ren %temp% %file%
exit
:1
set /a n+=1
set s=%1
echo %s:~1,-1% >>%temp%
if %n% == 5 goto :next

Отправлено: 17:36, 01-02-2013 | #2



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

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


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


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

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


zion87,
Вроде работает, но ужасно долго идет обработка...

Быстрее руками в текстовом редакторе получается

Отправлено: 17:25, 02-02-2013 | #3


Аватара для zion87

Старожил


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

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


Пожалуйста

там 4300 строк

Последний раз редактировалось zion87, 02-02-2013 в 19:02.


Отправлено: 17:33, 02-02-2013 | #4


Ветеран


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

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


Цитата xviioszone:
но ужасно долго идет обработка...
Быстрее руками в текстовом редакторе получается »
Вы сами указали категорию:
Цитата xviioszone:
CMD/BAT »

Отправлено: 19:43, 02-02-2013 | #5


Ветеран


Contributor


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

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


Цитата:
Помогите написать cmd или vbs скрипт.
Код: Выделить весь код
Ins = Array("$ACADVER", "1", "AC1009", "9")     ' Какие строки вставляем
nIns = 6                                        ' После какой строки
NFile = "E:\Test\test.dxf"                      ' В каком файле
ToFile = "E:\Test\test2.dxf"                    ' В какой файл. Имена могут совпадать

AllIns = ""
For i = 0 To UBound(Ins)
    AllIns = AllIns + Ins(i) + vbCrLf
Next

Set FSO = CreateObject("Scripting.FileSystemObject")
Set F = FSO.OpenTextFile(NFile, 1, False)
AllTxt = F.ReadAll
F.Close

Beg = 0
For i = 1 To 6
    Beg = InStr(Beg + 1, AllTxt, vbCrLf)
Next

Set F = FSO.OpenTextFile(ToFile, 2, True)
F.Write (Mid(AllTxt, 1, Beg + 1) + AllIns + Mid(AllTxt, Beg + 2))
F.Close

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 20:41, 02-02-2013 | #6


Ветеран


Contributor


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

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


Вроде бы недолго, руками точно дольше
Код: Выделить весь код
@Echo Off

Set NFile=E:\Test\test.dxf

SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

Del "%NFile%.~TMP" >nul 2>nul

Set N=0
FOR /F "usebackq delims=" %%s IN ("%NFile%") DO (
	@Echo %%s>>"%NFile%.~TMP"
	Set /A N=!N!+1
        If !N! EQU 6 (
		>>"%NFile%.~TMP" Echo $ACADVER
		>>"%NFile%.~TMP" Echo 1
		>>"%NFile%.~TMP" Echo AC1009
		>>"%NFile%.~TMP" Echo 9
	)
)

rem Move /Y "%NFile%.~TMP" "%NFile%"
Делается вспомогательный файл, затем он заменяет исходный. Для отладки это действие заремлено.
Меня напрягает, что в конце вставляемых строк получается лишний пробел, хотя, возможно, для данного случая это не существенно
я исправил решение в соответствии с предложенным исправлением от Iska - спасибо большое.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 02-02-2013 в 22:49.


Отправлено: 21:35, 02-02-2013 | #7


Ветеран


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

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


Цитата megaloman:
Меня напрягает, что в конце вставляемых строк получается лишний пробел, »
Код: Выделить весь код
		>>"%NFile%.~TMP" Echo $ACADVER"
		>>"%NFile%.~TMP" Echo 1
		>>"%NFile%.~TMP" Echo AC1009
		>>"%NFile%.~TMP" Echo 9
А лучше целиком вынести перенаправление вывода наружу, наподобие:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sFile=test.dxf

call :GetTemporaryName

set /a iCount = 1

>"%TemporaryName%" (
	for /f "usebackq delims=" %%s in ("%sFile%") do (
		if !iCount! equ 6 (
			echo $ACADVER
			echo 1
			echo AC1009
			echo 9
		)
		echo %%s
		
		set /a iCount += 1
	)
)

if exist "%sFile%.bak" del "%sFile%.bak"
ren "%sFile%" "%sFile%.bak"
copy "%TemporaryName%" "%sFile%"
del "%TemporaryName%"

endlocal
exit /b 0
rem ==========================================================================

rem ==========================================================================
rem Функция GetTemporaryName()
rem 
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
    setlocal enableextensions enabledelayedexpansion

:NextName
    set sTempName=%temp%\temp%random%.tmp

    if exist "%sTempName%" goto :NextName

    set sProcName=%~0

    endlocal & set %sProcName:~4%=%sTempName%
    exit /b 0
rem ==========================================================================
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:37, 02-02-2013 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Вставка диапазона дат в текстовый файл irk72ag AutoIt 7 25-06-2012 23:55
CMD/BAT - [решено] Вставка новых строк и имени в начало файла Евгений_ Скриптовые языки администрирования Windows 3 11-09-2011 14:39
CMD/BAT - [решено] Вставка строк в конкретные строки (txt) alexey_vf Скриптовые языки администрирования Windows 2 06-06-2011 14:58
VBS/WSH/JS - [решено] Удаление/вставка строк в Word AlexVong Скриптовые языки администрирования Windows 3 03-05-2011 17:20
.NET - Долгая вставка строк в таблицу базы SDF Delirium Программирование и базы данных 1 16-09-2009 06:33




 
Переход