Чистка marks.sml

программа для загрузки и просмотра спутниковых снимков Земли, Луны, Марса предоставленных сервисами Google Maps и Космоснимки. Возможность работы с GPS приёмником.

Модераторы: Tolik, zed

Чистка marks.sml

Сообщение Papazol » 26 фев 2011, 19:54

Как уже говорилось на багтрекере, если случайно или нарочно удалить какую-либо непустую категорию меток, то метки вместе с ней не удалятся, а будут торчать в файле marks.sml, занимая место, притом будучи недоступными в программе. Поэтому так удалять нельзя. Надо сначала удалить все метки этой категории, а потом уж и саму категорию.
Это неудобно. Например, импортировав какой-нибудь kmz обновления Гугль Мапс в категорию "kmz", посмотрев его сколько нужно, затем захотели мы его заменить на новый. Чтобы удалить все метки этого kmz, надо по очереди ткнуть курсором в каждую, нажать кнопку удаления и потом ещё нажать кнопку подтверждения удаления. Процесс может либо занять часы, либо вынести мозг.
Пока эта задача решается авторами программы, я тут на досуге написАл скрипт, который удаляет лишние метки из файла marks.sml. То есть, мы можем сначала удалить категорию, а потом все метки, которые ранее в неё входили. Скрипт проверяет, существует ли в файле CategoryMarks.sml указанная для данной метки категория. Если существует, запись о метке переносится в новый .sml файл, в противном случае переносится в файл-отстойник. Также в отстойник помещаются записи, в которых поле categoryid отсутствует совсем. Исходный файл marks.sml остаётся в целости и сохранности, зато создаётся файл marks_new.sml, который можно затем проверить и, если всё в порядке, переименовать в marks.sml.
Скрипт надо поместить в папку ...\SASPlanet\.
Вложения
sml_clean.zip
(290.26 KiB) Скачиваний: 55
Последний раз редактировалось Papazol 27 фев 2011, 03:50, всего редактировалось 4 раз(а).

За это сообщение автора Papazol поблагодарил:
igel72 (02 авг 2011, 06:30)
Аватара пользователя
Papazol
Гуру
 
Сообщения: 1210
Зарегистрирован: 04 дек 2009, 01:39
Откуда: Рязань
Благодарил (а): 29 раз.
Поблагодарили: 147 раз.

Re: Чистка marks.sml

Сообщение garl » 26 фев 2011, 21:33

ух ты . из 3 мб сделал 891 байт. файлы sml выложить?
Russian NDN Team
QIP NightlyTester
Аватара пользователя
garl
Специалист
 
Сообщения: 941
ICQ: 275245033
Зарегистрирован: 16 июл 2008, 14:40
Откуда: Краснодар
Благодарил (а): 30 раз.
Поблагодарили: 100 раз.

Re: Чистка marks.sml

Сообщение Papazol » 26 фев 2011, 22:05

Конечно!
У меня был файл на 5 МБ, после очистки осталось 2,6. Но чтобы байты... Получается, ни одной валидной метки не нашёл?
Аватара пользователя
Papazol
Гуру
 
Сообщения: 1210
Зарегистрирован: 04 дек 2009, 01:39
Откуда: Рязань
Благодарил (а): 29 раз.
Поблагодарили: 147 раз.

Re: Чистка marks.sml

Сообщение garl » 27 фев 2011, 00:03

тут и оригинал и результат. планета отображает всё на ура.
http://ifolder.ru/22125611
Russian NDN Team
QIP NightlyTester
Аватара пользователя
garl
Специалист
 
Сообщения: 941
ICQ: 275245033
Зарегистрирован: 16 июл 2008, 14:40
Откуда: Краснодар
Благодарил (а): 30 раз.
Поблагодарили: 100 раз.

Re: Чистка marks.sml

Сообщение Papazol » 27 фев 2011, 00:56

Всё ясно. Оказалось, что в разных .sml файлах порядок следования полей разный. В частности, поле categoryid у меня записано последним, а в файле Сергея - первым. И плюс к тому, видимо, в процессе разработки версий программы ещё что-то поменялось. Если бы знать, как формируются записи... Немного переделал скрипт, теперь поле [category]id может быть в любом месте. Положил туда же.

Позже обнаружил ещё один недостаток. Дело в том, что среди меток встречаются такие, у которых совсем нет поля categoryid. Пришлось их переносить в новый файл без изменения.

Но это оказалось неправильно, так как они не могут отображаться в программе. Посему решил всё, что не имеет поля categoryid или имеет его значение неправильным, переносить в отдельный файл garbage.txt. Обновил.
Аватара пользователя
Papazol
Гуру
 
Сообщения: 1210
Зарегистрирован: 04 дек 2009, 01:39
Откуда: Рязань
Благодарил (а): 29 раз.
Поблагодарили: 147 раз.

Re: Чистка marks.sml

Сообщение Fetser » 27 фев 2011, 16:32

Очень ценный получился скрипт. Помимо основной функции появилась дополнительная, что каждая метка теперь это новая строка в текстовом документе. И метки отсортированы по id. Это позволяет сравнивать два файла marks.sml и смотреть разницу. (Какая метка была изменена) После открытия в sas строки опять сливаются в одну, но это не страшно, главное всё функционирует без дополнительных усилий со стороны пользователя. Спасибо!
А очень сложно реализовать чтобы id меток присваивались по порядку следования категорий? Ну например сначала все из первой категории, затем из второй. А то сложно порой сообразить в какой категории сколько меток и какая отсутствует.
Fetser
Постигающий Дао
 
Сообщения: 101
Зарегистрирован: 24 окт 2009, 23:40
Благодарил (а): 5 раз.
Поблагодарили: 14 раз.

Re: Чистка marks.sml

Сообщение Papazol » 27 фев 2011, 17:23

Вставка CR и LF не предусмотрена, да и в родном файле их нет, так что неизвестно, будет ли так работать. Сортировка также не предусмотрена, метки обрабатываются в том порядке, как записаны в marks.sml. Если в SAS.Планете всё делать "правильно", все категории и все метки будут расположены по возрастанию номеров. Однако реальный файл marks.sml может содержать записи, расположенные дна за другой, а id'ы у них совершенно не соседние, например, 110 и 7. Кроме того, как я раньше написАл, порядок следования полей может быть разный. Так что сравнивать два файла может оказаться проблематично, особенно если они "побывали" в разных версиях SAS.
Реализовать, чтобы метки были сгруппированы по категориям, в принципе можно, но при добавлении новых меток их номера всё равно будут присваиваться "от конца списка". Кстати, в программе MarksEdit есть такая функция, как Reindex.
Аватара пользователя
Papazol
Гуру
 
Сообщения: 1210
Зарегистрирован: 04 дек 2009, 01:39
Откуда: Рязань
Благодарил (а): 29 раз.
Поблагодарили: 147 раз.

Re: Чистка marks.sml

Сообщение Fetser » 27 фев 2011, 17:38

Попробовал в MarksEdit использовать Reindex. Тоже нужная функция. Порядок не изменился, но все id стали по порядку и понятно количество меток.
Fetser
Постигающий Дао
 
Сообщения: 101
Зарегистрирован: 24 окт 2009, 23:40
Благодарил (а): 5 раз.
Поблагодарили: 14 раз.


Вернуться в SAS.Планета

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

cron