+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"
Разве есть большая нужда делать функцию да ещё без аргументов на входе? Или я что-то пропустил?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей