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

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

Ответить
Настройки темы
CMD/BAT - Добавление строк по шаблону...

Аватара для adrobkov@vk

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


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

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


Изменения
Автор: adrobkov@vk
Дата: 29-08-2013
Доброго дня! Я понимаю, что задача, которая возникла передо мной с моими знаниями не выполнима.. Поэтому надеюсь хоть на какую-то помощь)))... Если такое возможно средствами командной строки... Опишу ситуацию и цель..
Есть csv-файл образец-шаблон:
читать дальше »

20100;d2-01:
20300;d2-02
30100;d3-01
30110;d3-02
30120;d3-03
30130;d3-04
30140;d3-05
30200;d3-06
30210;d3-07
30220;d3-08
30230;d3-09
30240;d3-10
30300;d3-11
30310;d3-12
30320;d3-13
30330;d3-14
30340;d3-15
40100;d4-01
40110;d4-02
40120;d4-03
40130;d4-04
40140;d4-05
40200;d4-06
40300;d4-07
40400;d4-08
40600;d4-09
40610;d4-10
40620;d4-11
40630;d4-12
40700;d4-13
40710;d4-14
40720;d4-15
40730;d4-16
40800;d4-17
40810;d4-18
40820;d4-19
40830;d4-20
50000;d5-01
50100;d5-02
50200;d5-03
50300;d5-04
50400;d5-05

Это эталон будущей примерной структуры необходимого файла...
Есть файл work.csv с примерной структурой:
читать дальше »

20100;xxx
20300;zzz
30200;aaa
30210;bbb
20100;qqq
20300;www
30200;rrr
20100;ttt
20300;yyy
20100;uuu
20300;iii
50300;ммм

Это как образец.... То есть структура не стабильная, первые ДВЕ строки, начинаюшиеся с 20100 и 20300 стабильны и считаются началом нового блока информации..., вполь до следующих "20100 и 20300"...
Остальные строки или есть или нет, или все или не все.. без всяких правил....
Цель преобразовать файл, добавив нехватающие строки по шаблону, со значением равным нулю, приведя к такому виду:
читать дальше »

20100;xxx
20300;zzz
30100;0
30110;0
30120;0
30130;0
30140;0
30200;aaa
30210;bbb
30220;0
30230;0
30240;0
30300;0
30310;0
30320;0
30330;0
30340;0
40100;0
40110;0
40120;0
40130;0
40140;0
40200;0
40300;0
40400;0
40600;0
40610;0
40620;0
40630;0
40700;0
40710;0
40720;0
40730;0
40800;0
40810;0
40820;0
40830;0
50000;0
50100;0
50200;0
50300;0
50400;0
20100;qqq
20300;www
30100;0
30110;0
30120;0
30130;0
30140;0
30200;0
30210;0
30200;rrr
30230;0
30240;0
30300;0
30310;0
30320;0
30330;0
30340;0
40100;0
40110;0
40120;0
40130;0
40140;0
40200;0
40300;0
40400;0
40600;0
40610;0
40620;0
40630;0
40700;0
40710;0
40720;0
40730;0
40800;0
40810;0
40820;0
40830;0
50000;0
50100;0
50200;0
50300;0
50400;0
20100;ttt
20300;yyy
30100;0
30110;0
30120;0
30130;0
30140;0
30200;0
30210;0
30200;0
30230;0
30240;0
30300;0
30310;0
30320;0
30330;0
30340;0
40100;0
40110;0
40120;0
40130;0
40140;0
40200;0
40300;0
40400;0
40600;0
40610;0
40620;0
40630;0
40700;0
40710;0
40720;0
40730;0
40800;0
40810;0
40820;0
40830;0
50000;0
50100;0
50200;0
50300;0
50400;0
20100;uuu
20300;iii
30100;0
30110;0
30120;0
30130;0
30140;0
30200;0
30210;0
30200;0
30230;0
30240;0
30300;0
30310;0
30320;0
30330;0
30340;0
40100;0
40110;0
40120;0
40130;0
40140;0
40200;0
40300;0
40400;0
40600;0
40610;0
40620;0
40630;0
40700;0
40710;0
40720;0
40730;0
40800;0
40810;0
40820;0
40830;0
50000;0
50100;0
50200;0
50300;ммм
50400;0

Помогите или подскажите как такое реализовать.... Средствами поиска и замены, это нереально много условий... Может кто-то знает, как это сделать проще?!

Отправлено: 12:49, 29-08-2013

 

Ветеран


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

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


Цитата adrobkov@vk:
первые ДВЕ строки, начинаюшиеся с 20100 и 20300 стабильны и считаются началом нового блока информации..., вполь до следующих "20100 и 20300"... »
То есть, может если просто «20100» — то это не начало очередного блока?

Отправлено: 04:32, 31-08-2013 | #2



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

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


Аватара для adrobkov@vk

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


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

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


Цитата:
То есть, может если просто «20100» — то это не начало очередного блока?
Начало... Строка начинающаяся с 20100 считается новым блоком... Все что находится после нее вплоть до следующих 20100 не включительно...

Отправлено: 10:19, 02-09-2013 | #3


Старожил


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

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


Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion

Set Input=work.csv
Set SphericalStandardFileInVacuum=standard.csv

:: Подготавливаем входящий файл
Copy "%Input%" "%Input%.bak">nul
Echo.>"%Input%"
:: Читаем файл-эталон и пишем строки из него в массив
Set StdData[]=
For /F "usebackq eol= tokens=1 delims=;" %%A In ("%SphericalStandardFileInVacuum%") Do (Set StdData[]=!StdData[]! %%A )
:: Разбираем входящий файл поблочно
For /F "usebackq eol= delims=" %%A In ("%Input%.bak") Do (
	Set Data=%%A
::	Работа с содержимым
	If "!Block!"=="true" If "!Data:~,6!"=="20100;" (
		Set Block=false
::		Обрабатываем данные
		Call :ParseBlock
::		Удаление
		Call :DeleteBlock
	)
::	Определение начала блока
	If "!Data:~,6!"=="20100;" (
		Set Block=true
		Set i=0
	)
::	Запись содержимого блока
	If "!Block!"=="true" (
		Set /A i+=1
		Set BlockData_!i!=!Data!
	)
)
:: Обработка завершающего блока
If Defined BlockData_1 (
	Call :ParseBlock
	Call :DeleteBlock
)
Del "%Input%.bak"
Pause&Exit

:ParseBlock
:: Пишем в массив строки, входящие в блок, одновременно с тем сохраняя их значения для последующего использования
Set BlockData[]=
For /F "eol= tokens=2,* delims=;=" %%A In ('Set BlockData_') Do (
	Set BlockData[]=!BlockData[]! %%A 
	Set Data_%%A=%%B
)
:: Проходимся по массиву файла-эталона, определяя, какие строки в него включены
For %%A In (!StdData[]!) Do (
	Echo "!BlockData[]!"|Find " %%A ">nul&&(
		>>"%Input%" Echo %%A;!Data_%%A!
	)||(
		>>"%Input%" Echo %%A;0
	)
)
Exit /B

:DeleteBlock
:: Удаляем все записи блока
For /F "tokens=1 delims==" %%B In ('Set BlockData_') Do (Set %%B=)
Exit /B
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:20, 03-09-2013 | #4


Ветеран


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

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


Anonymоus, это героически .

Отправлено: 04:36, 03-09-2013 | #5



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Поиск, удаление, замена и добавление строк в текстового файле. Что возможно? akrav Скриптовые языки администрирования Windows 8 06-12-2015 13:22
CMD/BAT - [решено] Сравнение строк с переменной и добавление в случае отсутствия zion87 Скриптовые языки администрирования Windows 2 04-01-2013 15:08
CMD/BAT - поиск строк по шаблону и запись в отдельный файл AVTS Скриптовые языки администрирования Windows 4 13-07-2012 00:51
Офис и Текст - Печать документов по шаблону. DavyJohnes Программное обеспечение Windows 2 29-08-2011 22:20
Сортировка прокси по шаблону zbruy AutoIt 0 21-12-2010 01:12




 
Переход