Страница 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 ".." означает родительский каталог.
И "некорректный" в этом случае пишется вместе (это слово уже становится словом-паразитом, но половина тех, кто его использует, не знают, как это делать правильно).