Страница 1 из 1

Относительные пути до файла на MapBasic - как?

Добавлено: 02 сен 2015, 17:16
tems-ya
В папке MAP лежат две подпапки 1)Data - данные 2)Program - мои скомпилированные программы на MapBasic

+MAP
|_____ DATA
|_____ Program

В своей программе на MapBasic я сейчас открываю таблицу aaa с данными так:

Код: Выделить всё

Open Table "D:\MAP\Data\aaa"  Interactive
хотелось бы что-то типа

Код: Выделить всё

Open Table "..\Data\aaa"  Interactive
т.е. полностью отвязанное от фиксированных путей. Возможно-ли? Если да, то как?

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'е между "все в одну строку" и "каждый чих в отдельной функции" - с точки зрения производительности интерпретатора, минимальна. Не ассемблер, однако. :wink:
А так получилось - полпути к объектному программированию: на каждый вопрос - свой отдельный ответ. :)

Re: Относительные пути до файла на MapBasic - как?

Добавлено: 07 сен 2015, 22:23
ericsson
Я только поправлю пару мелочей, которые не влияют на результат, но бросаются в глаза:

"...MAP\DATA\" - нонсенс. В Windows ".." означает родительский каталог.

И "некорректный" в этом случае пишется вместе (это слово уже становится словом-паразитом, но половина тех, кто его использует, не знают, как это делать правильно).