+MAP
|_____ DATA
|_____ Program
В своей программе на MapBasic я сейчас открываю таблицу aaa с данными так:
Код: Выделить всё
Open Table "D:\MAP\Data\aaa" Interactive
Код: Выделить всё
Open Table "..\Data\aaa" Interactive
Геоинформационные системы (ГИС) и Дистанционное зондирование Земли
Код: Выделить всё
Open Table "D:\MAP\Data\aaa" Interactive
Код: Выделить всё
Open Table "..\Data\aaa" Interactive
Код: Выделить всё
Open Table ApplicationDirectory$( ) + "\..\Data\aaa.tab" Interactive
Код: Выделить всё
'------------------------------------------------------------------------------
' Функция возвращает полный путь до каталога с данными
'
' Структура папки с картами должна быть строго следующего вида:
'
' + 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
С точки зрения хорошего системного программирования, тем более на стадии наполнения багажа знаний по языку программирования, такое формальное описание функции, дело вполне нормальное, и я бы даже сказал похвальное. Потом, когда уже все в руках будет "гореть" можно и сократить до одной строки.ginpetr писал(а):А почему в одну строку не пишите?
Left$(ApplicationDirectory$( ),instr(1,ApplicationDirectory$( ),"/Program")-1)+"/DATA"
Разве есть большая нужда делать функцию да ещё без аргументов на входе? Или я что-то пропустил?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей
© GIS-Lab и авторы, 2002-2017. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов (подробнее).