Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Gazi
Зарегистрирован: 14.02.2010 Сообщения: 30
|
Добавлено: Ср Мар 17, 2010 1:04 pm Заголовок сообщения: |
|
|
как данные из таблицы MapInfo экспортировать в Excel? Есть какая-то стандартная команда или нужно делать средствами MapBasic? |
|
Вернуться к началу |
|
|
reasonat
Зарегистрирован: 01.07.2009 Сообщения: 224 Откуда: Екатеринбург
|
Добавлено: Ср Мар 17, 2010 1:31 pm Заголовок сообщения: |
|
|
Таблица/Экспорт - в CSV, например. Или копипастом На кодировки только нужно обратить внимание. |
|
Вернуться к началу |
|
|
Gazi
Зарегистрирован: 14.02.2010 Сообщения: 30
|
Добавлено: Ср Мар 17, 2010 3:54 pm Заголовок сообщения: |
|
|
Первый вариант как по мне не очень годится, а вот второй - отлично ))))
спасибо ))) |
|
Вернуться к началу |
|
|
Gazi
Зарегистрирован: 14.02.2010 Сообщения: 30
|
Добавлено: Вт Мар 23, 2010 4:55 pm Заголовок сообщения: |
|
|
Обозначив границы нужной области координатами хочу пройтись по заданному квадрату выбирая координаты через определенный интервал. Примерно так:
n=3
xg1=24.5103
yg1=48.3404
xg2=24.6529
yg2=48.2402
dx=xg2-xg1
dy=yg2-yg1
' Задаю шаг
stepx=dx/n
stepy=dy/n
For j=1 to n
For i=1 to n
x=xg1+stepx
y=yg1+stepy
print x
print y
Next
Next
Но подсчитывает одну и ту же координату 3 раза, а хочу, чтоб добавлялся каждую итерацию шаг |
|
Вернуться к началу |
|
|
reasonat
Зарегистрирован: 01.07.2009 Сообщения: 224 Откуда: Екатеринбург
|
Добавлено: Вт Мар 23, 2010 5:11 pm Заголовок сообщения: |
|
|
писал(а): |
x=xg1+stepx
print x
|
ну вы же догадались вывести рассчитываемые координаты в окно сообщений. Если еще выведете туда же значения xg1 и stepx - увидите, что ничего и не должно меняться.
Посмотрите еще раз на формулу, вы добавляете к одному и тому же фиксированному вне цикла значению одно и то же фиксированное вне цикла значение. Где переменная цикла участвует, где добавляется хоть что-то переменное? Ну умножьте что ли stepx на i |
|
Вернуться к началу |
|
|
Gazi
Зарегистрирован: 14.02.2010 Сообщения: 30
|
Добавлено: Пн Апр 19, 2010 3:55 pm Заголовок сообщения: |
|
|
Все гораздо проще:
For j=1 to n
x=xg1-stepx
y=y+stepy
For i=1 to n
x=x+stepx
Что делать с этим?
В таком виде нормально все
Dim start_x() as Float
...
redim start_x(10000)
как только меняю вот так:
redim start_x(100000)
вылетает ошибка Overflow. |
|
Вернуться к началу |
|
|
Gazi
Зарегистрирован: 14.02.2010 Сообщения: 30
|
Добавлено: Пн Апр 19, 2010 4:54 pm Заголовок сообщения: |
|
|
Максимальный размер массива в приложениях на MapBasic, запускаемых под
MapInfo для Windows, составляет 7000 элементов. При запуске приложений на
MapBasic на других платформах (например, в MapInfo для Windows 95, Windows
NT или Macintosh) максимальный размер массива составляет 32767 элементов.
я понимаю с этим ограничением уже ничего не сделать? |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Пн Апр 19, 2010 8:17 pm Заголовок сообщения: |
|
|
Конечно, ничего. Это документированное ограничение. Зачем массивы большей длины? Если так нужно, пользуйтесь массивами из массивов, вот уже и 32К*32К элементов. Еще можно и возможно нужно использовать таблицы МапИнфо для хранения таких данных, создавайте временные таблицы и работайте с ними, вместо массивов. |
|
Вернуться к началу |
|
|
Gazi
Зарегистрирован: 14.02.2010 Сообщения: 30
|
Добавлено: Чт Апр 22, 2010 2:41 pm Заголовок сообщения: |
|
|
можете привести пример как сделать 32К*32К.
Dim a(), b(),c() as Float
redim a(32767)
redim b(32767)
'объявил три массива, поменял размерность двух.
А как дальше быть? подскажите пожалуйста |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Пт Апр 23, 2010 2:01 pm Заголовок сообщения: |
|
|
Type ArrayOfFloat
A(32000) As Float
End Type
Dim B(32000) As ArrayOfFloat |
|
Вернуться к началу |
|
|
Gazi
Зарегистрирован: 14.02.2010 Сообщения: 30
|
Добавлено: Сб Май 08, 2010 6:39 pm Заголовок сообщения: |
|
|
Вместо массивов использовал таблицы, все получилось, спасибо за помощь.
Правда при выбор 1млн значений и расчет расстояний занимает 5 часов . Причем пробовал на разных машинах делать. В чем проблема? МапБейсик медленный интерпритатор или динамическая запись значений в таблицу? Если как-то задать размерность таблицы, что-ли? может быстрее работать будет? |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Чт Май 13, 2010 7:42 am Заголовок сообщения: |
|
|
Не глядя на то, что у вас получилось сложно сказать - почему так долго. Короче, всегда есть возможность оптимизации. |
|
Вернуться к началу |
|
|
Gazi
Зарегистрирован: 14.02.2010 Сообщения: 30
|
Добавлено: Чт Май 13, 2010 2:58 pm Заголовок сообщения: |
|
|
в хелпе ничего подходящего не нашел. в MapBasic можно задать заведомо размер таблицы (подобно хтмл)? |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Чт Май 13, 2010 6:35 pm Заголовок сообщения: |
|
|
Причем тут размер таблицы? Запросы к этой таблице покажите хотя бы. Индексирована ли таблица по полям, которые участвуют в секции Where запросов? На алгоритм внимательно взгляните, можно ли избавиться от лишних, частоповторяющихся запросов в процесс расчета? Что-то закэшировать в структуры MapBasic и т.д. |
|
Вернуться к началу |
|
|
Arhara
Зарегистрирован: 18.02.2009 Сообщения: 400 Откуда: Moscow, RF
|
Добавлено: Сб Май 15, 2010 4:17 pm Заголовок сообщения: |
|
|
у вас - "голый" расчет расстояний. не ясно как именно вы создаете граф, но если вы его потом выводите в таблицу, в которой существуют только числа, то зачем тогда вообще использовать для расчетов MapInfo?
Выведите в таблицу в формате MS Access, простой командой "Сохранить копию" и "отмучьте" свой алгоритм там с использованием VBA и индексов в таблицах Access. Acceess, хоть и простая, но все же СУБД, в ней и запросы быстрее выполняются и индексы лучше, да и программировать в ней в VBA гораздо сподручней.
Если и там получится 5 часов - тогда либо так и должно быть, либо 1 млн. для такой задачи с таким алгоритмом - избыточный размер.
А в MB оставьте только "экспорт-импорт" да проверку "посчиталось - не посчиталось". |
|
Вернуться к началу |
|
|
|