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

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

Ответить
Настройки темы
CMD/BAT - Уникальность строк в файле на выходе

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


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

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


Имеется большое количество файлов с расширением tab (ГИС MapInfo) следующего вида:
читать дальше »
Код: Выделить весь код
!table
!version 300
!charset WindowsCyrillic

Definition Table
  File "1-1.tif"
  Type "RASTER"
  (2426188.2551,926616.5365) (0,0) Label "Pt 1",
  (2438713.8233,926968.4006) (5920,0) Label "Pt 2",
  (2439065.6875,914442.8324) (5920,5920) Label "Pt 3",
  (2426540.1193,914090.9682) (0,5920) Label "Pt 4"
  CoordSys NonEarth Units "m"
  Units "m"
  RasterStyle 1 80


Этот файл необходим, чтобы "посадить" на координатную сетку растровую картинку с именем "1-1.tif", где между строками Type "RASTER" и CoordSys NonEarth Units "m" идут строки, в которых описываются в скобках сначала местные координаты, а затем координаты углов растра в пикселях. Все остальные строки в tab-файле постоянны. Растровые и tab файлы, как правило, именуются следующим образом:

То есть, левый верхний угол является началом отсчета, а далее слева-направо сверху-вниз. Но это не предполагает что все файлы существуют. Набора, к примеру, 5-3.tab 5-3.tif, может не быть, а набор 6-3, 5-4 или 6-4 могут существовать.

Задача следующая: необходимо из всех tab файлов в папке создать один общий tab с такой же структурой, где координаты углов растра будут пересчитаны в соответствии с их номерами набора.

Написать данную часть скрипта не составило особых проблем. В моем исполнении выглядит она так:
читать дальше »
Код: Выделить весь код
@echo off

set OutFile=%~n1.tab
if exist ..\%OutFile% del /q ..\%OutFile%
echo !table>..\%OutFile%
echo !version 300>>..\%OutFile%
echo !charset WindowsCyrillic>>..\%OutFile%
echo.>>..\%OutFile%
echo Definition Table>>..\%OutFile%
echo   File "%OutFile:~0,-4%.tif">>..\%OutFile%
echo   Type "RASTER">>..\%OutFile%

setlocal enableextensions enabledelayedexpansion

for %%a in (*.tab) do (
	set File=%%~na
	for /f "tokens=1,2 delims=-." %%b in ("!File!") do (
		set /a yCount=%%b
		set /a xCount=%%c
	)
	for /f "tokens=1,2,3,4 delims=,() " %%b in ('findstr /i "label" !File!.tab') do (
		set MapX=%%b
		set MapY=%%c
		if %%d==0 (set /a PixelX=^(!xCount!-1^)^*5920) else (set /a PixelX=!xCount!*5920)
		if %%e==0 (set /a PixelY=-^(!yCount!-1^)^*5920) else (set /a PixelY=-!yCount!*5920)
	)
)

endlocal

echo   CoordSys NonEarth Units "m">>..\%OutFile%
echo   Units "m">>..\%OutFile%
echo   RasterStyle 1 80>>..\%OutFile%

exit /b 0


Проблема заключается в том что соседние tab файлы имеют минимум одну, максимум две общих точки, то есть, при пересчете, в итоге, получается дубликат строки, а необходимо чтобы координаты (как местные, так и углов) были уникальные. На это месте я застрял. А также в конце каждой уникальной строки необходимо дописать Label "Pt N", где N порядковый номер строки (это, в принципе, я и сам сделаю). А еще, может быть, есть более логичное решение этой задачи, я для себя нашел только такое, если Вы найдете другой метод или упростите мой, с радостью его рассмотрю и учту в скрипте.

P.S. А еще меня в скрипте смущает то, что я при пересчете использую не переменную, а константу 5920 (координата для дальнего угла по любой из осей), можно ли сделать так чтобы это значение определялось скриптом и при этом не добавился еще один цикл. Так как, пока используется константа - скрипт не универсален для аналогичных задач.

Отправлено: 13:48, 30-07-2014

 


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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Поиск строк в файле и замена их на числа,сгенерированные по маске. galclerik Скриптовые языки администрирования Windows 17 19-12-2013 11:59
CMD/BAT - Замена нескольких строк в файле bcubbs@fb Скриптовые языки администрирования Windows 3 24-01-2013 14:01
VBS/WSH/JS - Изменение времени строк в текстовом файле на определенную величину RadioSys Скриптовые языки администрирования Windows 6 31-07-2012 20:22
VBS/WSH/JS - Удаление строк в REG файле gen0m.rsw Скриптовые языки администрирования Windows 9 28-09-2011 18:03
[решено] Количество строк в файле 0xDEADBEEF AutoIt 3 25-01-2010 21:47




 
Переход