Вопрос по написанию в MapBasic
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 18 сен 2014, 10:07
- Репутация: 0
Вопрос по написанию в MapBasic
Добрый день.
Уважаемые форумчане, помогите решить задачу. Постараюсь описать её максимально корректно.
Есть ПО MapInfo 11.0. Как удалось понять есть внутренний язык скриптовый MapBasic. К сожалению я слабо понимаю, что и как программировать, в принципе.
Когда загружается карта, то кликнув правой кнопкой на снимке и выбрав свойства мы видим дополнительную информацию. В данной информации указаны ID_PRODIUCT, DATE_akt, AKT и так далее.
Все данные карты хранятся на сервере, а на сервере их сотни тысяч.
Задача стоит такая. Мы открываем окно с этими полями. Открываем созданный скрипт, который будет спрашивать у нас эти три параметра. Вводим адрес сервера, вводим три параметра, жмем кнопку поиска и открывается окно эксплорера с папкой, содержащей данный файл.
На сервере откровенная каша и бардак из папок и файлов, с разным временем поставки. Хотя есть подобие структуры. На все мои мольбы структуру переделывать оказываются.
В самом имени папки, где возможно лежит файл указывается дата поставки DATE_akt(к примеру сегодня 20140918 (год, месяц, день)). Хотя папок с этой датой может много. Далее в этой папке находится файл с названием ID_PRODIUCT
Прошу помочь решить эту задачу, так как сам совершенно ничего не понимаю в программировании.
Уважаемые форумчане, помогите решить задачу. Постараюсь описать её максимально корректно.
Есть ПО MapInfo 11.0. Как удалось понять есть внутренний язык скриптовый MapBasic. К сожалению я слабо понимаю, что и как программировать, в принципе.
Когда загружается карта, то кликнув правой кнопкой на снимке и выбрав свойства мы видим дополнительную информацию. В данной информации указаны ID_PRODIUCT, DATE_akt, AKT и так далее.
Все данные карты хранятся на сервере, а на сервере их сотни тысяч.
Задача стоит такая. Мы открываем окно с этими полями. Открываем созданный скрипт, который будет спрашивать у нас эти три параметра. Вводим адрес сервера, вводим три параметра, жмем кнопку поиска и открывается окно эксплорера с папкой, содержащей данный файл.
На сервере откровенная каша и бардак из папок и файлов, с разным временем поставки. Хотя есть подобие структуры. На все мои мольбы структуру переделывать оказываются.
В самом имени папки, где возможно лежит файл указывается дата поставки DATE_akt(к примеру сегодня 20140918 (год, месяц, день)). Хотя папок с этой датой может много. Далее в этой папке находится файл с названием ID_PRODIUCT
Прошу помочь решить эту задачу, так как сам совершенно ничего не понимаю в программировании.
-
- Гуру
- Сообщения: 5354
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Вопрос по написанию в MapBasic
Загрузите растры на сервер
http://duncanjg.wordpress.com/2012/11/2 ... is-raster/
http://duncanjg.wordpress.com/2012/11/2 ... is-raster/
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 18 сен 2014, 10:07
- Репутация: 0
Re: Вопрос по написанию в MapBasic
К сожалению сделать это невозможно. Все хранится на ленточном архиве. На самом сервере хранятся только файлы, но размером по 1кб.
Логика такая. Мы находим этот файл при помощи скрипта и уже в отдельном ПО запрашиваем загрузку нужного нам файла. Сидим и ждем пока он с ленты прочтется. Архив, примерно в 200 терабайт.
[ Сообщение с мобильного устройства ]
Логика такая. Мы находим этот файл при помощи скрипта и уже в отдельном ПО запрашиваем загрузку нужного нам файла. Сидим и ждем пока он с ленты прочтется. Архив, примерно в 200 терабайт.
[ Сообщение с мобильного устройства ]
-
- Гуру
- Сообщения: 1018
- Зарегистрирован: 01 авг 2012, 13:55
- Репутация: 241
Re: Вопрос по написанию в MapBasic
Как вариант, возможности "Геолинка" испробовать под вашу задачу, может быть и скрипт писать не придется.
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 18 сен 2014, 10:07
- Репутация: 0
Re: Вопрос по написанию в MapBasic
Уже поднимал этот вопрос, но задачу ограничили в рамках мапинфо.
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
-
- Гуру
- Сообщения: 1018
- Зарегистрирован: 01 авг 2012, 13:55
- Репутация: 241
Re: Вопрос по написанию в MapBasic
"Геолинка" который в мапинфо.Inzaim писал(а):Уже поднимал этот вопрос, но задачу ограничили в рамках мапинфо.
[ Сообщение с мобильного устройства ]
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Вопрос по написанию в MapBasic
я бы даже нескромно так сказал - "Геолинка, уже описанного на форуме"lam писал(а):"Геолинка" который в мапинфо.Inzaim писал(а):Уже поднимал этот вопрос, но задачу ограничили в рамках мапинфо.
[ Сообщение с мобильного устройства ]
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 18 сен 2014, 10:07
- Репутация: 0
Re: Вопрос по написанию в MapBasic
К сожалению геолинк уже оказался сделанным. Он не может выполнить возложенную задачу. В названиях путей к файлам могут быть и посторонние символы. Так что тут без геолинка надо что-то выдумывать.
Кстати, как батник запустить из мапбейсика?
[ Сообщение с мобильного устройства ]
Кстати, как батник запустить из мапбейсика?
[ Сообщение с мобильного устройства ]
-
- Гуру
- Сообщения: 1018
- Зарегистрирован: 01 авг 2012, 13:55
- Репутация: 241
Re: Вопрос по написанию в MapBasic
Здесь можно по подробнее?Inzaim писал(а):В названиях путей к файлам могут быть и посторонние символы. [ Сообщение с мобильного устройства ]
-
- Гуру
- Сообщения: 3058
- Зарегистрирован: 19 май 2010, 19:44
- Репутация: 189
Re: Вопрос по написанию в MapBasic
... наверное, что-то из вспомогательных символов, которые нельзя использовать в названиях файлов/каталогов в винде..., тогда смотреть нужно на Linux...
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 18 сен 2014, 10:07
- Репутация: 0
Re: Вопрос по написанию в MapBasic
Нет, пути содержат нормальные символы. Директории могут называться как угодно, с кучей постранней инфы. Но всегда в папке есть дата и номер акта.
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 18 сен 2014, 10:07
- Репутация: 0
Re: Вопрос по написанию в MapBasic
Вот что получилось. Сделал на основе примеров с сайта mapinfo. Вот тут нашел образец ссылка Далее вписал запрос на ввод переменной AKT. Переменная вставляется в самом низу в строку поиска и производится поиск в имени файла или папки. Вот только поиск идет только в конкретной папке. В подпапках скрипт не ищет. Что очень удручает.
Знаю, что на батниках можно выводить всю структуру папок и подпапок командой dir c:\ /S/B. А чтобы в выводе найти конкретное значение делаем так dir c:\ /S/B |findstr 12345.* Но вот как заставить скрипт искать в подпапках через mapbasic даже не представляю.
Уважаемые, посодействуйте в решении вопроса.
Знаю, что на батниках можно выводить всю структуру папок и подпапок командой dir c:\ /S/B. А чтобы в выводе найти конкретное значение делаем так dir c:\ /S/B |findstr 12345.* Но вот как заставить скрипт искать в подпапках через mapbasic даже не представляю.
Код: Выделить всё
Include "MapBasic.def"
Type FILETIME
dwLowDateTime As Integer
dwHighDateTime As Integer
End Type
Type WIN32_FIND_DATA
dwFileAttributes As Integer
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Integer
nFileSizeLow As Integer
dwReserved0 As Integer
dwReserved1 As Integer
cFileName As String * 260
cAlternate As String * 14
End Type
Define FILE_ATTRIBUTE_DIRECTORY = &H10
Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Integer
Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Integer, lpFindFileData As WIN32_FIND_DATA) As Integer
Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Integer) As Integer
Declare Function FileExists(ByVal Path as String) As Logical
Declare Function GetFileList(ByVal Path as String, FileNames() as String) as Logical
Declare Sub Main()
Function FileExists(ByVal Path As String) As Logical
Dim hFind As Integer
Dim wfd As WIN32_FIND_DATA
Dim FName As String
Dim Ret As Integer
'Get the first file to initialize the find engine
hFind = FindFirstFile(Path, wfd)
'Trim off any spaces
FName = LTrim$(RTrim$(wfd.cFileName))
'No files found
If Len(FName) = 0 Then
FileExists = FALSE
Else 'Found it
FileExists = TRUE
End If
'Close the find engine
Ret = FindClose(hFind)
End Function
Function GetFileList(ByVal Path as String, FileNames() as String) as Logical
Dim hFind As Integer
Dim wfd As WIN32_FIND_DATA
Dim wfdArray() As WIN32_FIND_DATA ' will use this to reset wfdArray after each use -- avoiding system crash!
Dim FName As String
Dim Ret, i As Integer
i=0
ReDim FileNames(i)
ReDim wfdArray(0)
ReDim wfdArray(1)
'Get the first file to initialize the find engine
hFind = FindFirstFile(Path, wfdArray(1))
'Trim off any spaces
FName = LTrim$(RTrim$(wfdArray(1).cFileName))
GetFileList=(Len(FName)>0) ' return "True" if at least one file found
Do
i=i+1
ReDim FileNames(i)
FileNames(i)=FName
ReDim wfdArray(0)
ReDim wfdArray(1)
Ret = FindNextFile(hFind, wfdArray(1))
'Trim off any spaces
if Ret=0 then exit do end if
FName = LTrim$(RTrim$(wfdArray(1).cFileName))
if FName="" then note "Search failed." exit do end if ' should not happen
Loop
'Close the find engine
Ret = FindClose(hFind)
End Function
Sub Main()
Dim AKT As String
Dialog
Title "Поиск"
Control StaticText
Title "Введите номер АКТа:"
Control EditText
Into AKT
Control OKButton
Control CancelButton
'
'Dim YEAR As String
'Dialog
'Title "Поиск"
'Control StaticText
'Title "Введите ГОД поставки:"
'Control EditText
'Into YEAR
'Control OKButton
'Control CancelButton
'Dim MOUNTH As String
'Dialog
'Title "Поиск"
'Control StaticText
'Title "Введите МЕСЯЦ поставки:"
'Control EditText
'Into MOUNTH
'Control OKButton
'Control CancelButton
'
'Dim DAY As String
'Dialog
'Title "Поиск"
'Control StaticText
'Title "Введите ДЕНЬ поставки:"
'Control EditText
'Into DAY
'Control OKButton
'Control CancelButton
Dim Ret As Logical
Dim FName As String
Dim FileNames() as String
Dim i as integer
'run program "cmd /c net use y: \\sonas\FTP\ROOM_DATA\APPSRV03vm\ &"
FName = "S:\DEP_122_PHOTO\WORK\*" + Str$(AKT) + "*.*"
Ret = GetFileList(FName, FileNames())
If Ret = True Then
for i = 1 to ubound(FileNames())
print i & ": " & FileNames(i)
next
Note "Total files found: " & UBound(FileNames())
else
note FName + " Doesn't Exist"
End If
End Sub
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 18 сен 2014, 10:07
- Репутация: 0
Re: Вопрос по написанию в MapBasic
Чувствую, вопрос всех неинтересен.
-
- Гуру
- Сообщения: 5354
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Вопрос по написанию в MapBasic
WinAPI уже неинтересен даже MicroSOFT
- SergeyRyzhkov
- Гуру
- Сообщения: 909
- Зарегистрирован: 02 июл 2014, 19:13
- Репутация: 203
- Ваше звание: GP-экотеррористы
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Вопрос по написанию в MapBasic
Это точноtrir писал(а):WinAPI уже неинтересен даже MicroSOFT

Но чтобы облегчить страдания, Inzaim , используйте рекурсию
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость