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

Показать сообщение отдельно

Старожил


Сообщения: 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