Страница 1 из 1
Относительные пути до файла на MapBasic - как?
Добавлено: 02 сен 2015, 17:16
tems-ya
В папке MAP лежат две подпапки 1)Data - данные 2)Program - мои скомпилированные программы на MapBasic
+MAP
|_____ DATA
|_____ Program
В своей программе на MapBasic я сейчас открываю таблицу aaa с данными так:
хотелось бы что-то типа
т.е. полностью отвязанное от фиксированных путей. Возможно-ли? Если да, то как?
Re: Относительные пути до файла на MapBasic - как?
Добавлено: 03 сен 2015, 09:22
ginpetr
Функция ApplicationDirectory$( )
Назначение:
Возвращает строку с указанием каталога, в котором находится приложение MapBasic, выполняющееся в данный момент. Вы можете запустить данную функцию из окна MapBasic в среде MapInfo Professional.
Синтаксис:
ApplicationDirectory$( )
...
см. справку
из этой функции вычесть каталог Program и добавить Data
Лучше, правда, чтобы программа выше данных лежала.
Re: Относительные пути до файла на MapBasic - как?
Добавлено: 03 сен 2015, 12:07
tems-ya
Т.е. полноценно парсить текстовую строку с помощью функций работы со строками - я правильно понял?
Не весело это как-то. Других вариантов нет?
Re: Относительные пути до файла на MapBasic - как?
Добавлено: 04 сен 2015, 03:49
Boris
А что вот так не работает?
Код: Выделить всё
Open Table ApplicationDirectory$( ) + "\..\Data\aaa.tab" Interactive
Re: Относительные пути до файла на MapBasic - как?
Добавлено: 07 сен 2015, 08:33
tems-ya
Работает так
Код: Выделить всё
'------------------------------------------------------------------------------
' Функция возвращает полный путь до каталога с данными
'
' Структура папки с картами должна быть строго следующего вида:
'
' + MAP - (главный каталог может иметь любое имя и расположение)
' |- +Program - каталог с исполняемыми программами *.mbx
' |- +DATA - каталог с файлами данных *.tab
'
' При вызове ф-ии из программы, лежащей в папке ...MAP\Program\,
' функция вернет полный путь до папки ...MAP\DATA\
'------------------------------------------------------------------------------
Function getPatchToDirData( ) as string
Dim Programs_dir as string
Dim Data_dir as string
Dim s1,s2,s3 as string
Dim n as integer
Programs_dir = "Program" 'D:\MAP\Program\
Data_dir = "DATA" 'D:\MAP\DATA\
'полный путь до директории исполняемой программы s1 = D:\MAP\Program\
s1 = ApplicationDirectory$( )
'номер позиции с которой начинается искомая строка
n = InStr(1, s1, Programs_dir)
'если строка не пустая, исключаем имя каталога программ
If n<>0 Then
s2 = Left$(s1, n-1) 'полный путь до корневого каталога с картами s2 = D:\MAP\
s3 = s2 + Data_dir + "\" 'полный путь до директории c данными s3 = D:\MAP\DATA
getPatchToDirData = s3
Else
Note "Не корректная структура каталогов!"
getPatchToDirData = ""
End If
'Print s3
End Function
Re: Относительные пути до файла на MapBasic - как?
Добавлено: 07 сен 2015, 14:56
ginpetr
А почему в одну строку не пишите?
Left$(ApplicationDirectory$( ),instr(1,ApplicationDirectory$( ),"/Program")-1)+"/DATA"
Разве есть большая нужда делать функцию да ещё без аргументов на входе? Или я что-то пропустил?
Re: Относительные пути до файла на MapBasic - как?
Добавлено: 07 сен 2015, 20:54
Boris
ginpetr писал(а):А почему в одну строку не пишите?
Left$(ApplicationDirectory$( ),instr(1,ApplicationDirectory$( ),"/Program")-1)+"/DATA"
Разве есть большая нужда делать функцию да ещё без аргументов на входе? Или я что-то пропустил?
С точки зрения хорошего системного программирования, тем более на стадии наполнения багажа знаний по языку программирования, такое формальное описание функции, дело вполне нормальное, и я бы даже сказал похвальное. Потом, когда уже все в руках будет "гореть" можно и сократить до одной строки.
Тем более, что разница в MapBasic'е между "все в одну строку" и "каждый чих в отдельной функции" - с точки зрения производительности интерпретатора, минимальна. Не ассемблер, однако.
А так получилось - полпути к объектному программированию: на каждый вопрос - свой отдельный ответ.

Re: Относительные пути до файла на MapBasic - как?
Добавлено: 07 сен 2015, 22:23
ericsson
Я только поправлю пару мелочей, которые не влияют на результат, но бросаются в глаза:
"...MAP\DATA\" - нонсенс. В Windows ".." означает родительский каталог.
И "некорректный" в этом случае пишется вместе (это слово уже становится словом-паразитом, но половина тех, кто его использует, не знают, как это делать правильно).