Вопрос по написанию в MapBasic

MapInfo, MapBasic
Inzaim
Новоприбывший
Сообщения: 8
Зарегистрирован: 18 сен 2014, 10:07
Репутация: 0

Вопрос по написанию в MapBasic

Сообщение Inzaim » 18 сен 2014, 10:28

Добрый день.

Уважаемые форумчане, помогите решить задачу. Постараюсь описать её максимально корректно.
Есть ПО MapInfo 11.0. Как удалось понять есть внутренний язык скриптовый MapBasic. К сожалению я слабо понимаю, что и как программировать, в принципе.
Когда загружается карта, то кликнув правой кнопкой на снимке и выбрав свойства мы видим дополнительную информацию. В данной информации указаны ID_PRODIUCT, DATE_akt, AKT и так далее.
Все данные карты хранятся на сервере, а на сервере их сотни тысяч.
Задача стоит такая. Мы открываем окно с этими полями. Открываем созданный скрипт, который будет спрашивать у нас эти три параметра. Вводим адрес сервера, вводим три параметра, жмем кнопку поиска и открывается окно эксплорера с папкой, содержащей данный файл.
На сервере откровенная каша и бардак из папок и файлов, с разным временем поставки. Хотя есть подобие структуры. На все мои мольбы структуру переделывать оказываются.
В самом имени папки, где возможно лежит файл указывается дата поставки DATE_akt(к примеру сегодня 20140918 (год, месяц, день)). Хотя папок с этой датой может много. Далее в этой папке находится файл с названием ID_PRODIUCT

Прошу помочь решить эту задачу, так как сам совершенно ничего не понимаю в программировании.

trir
Гуру
Сообщения: 5354
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Вопрос по написанию в MapBasic

Сообщение trir » 18 сен 2014, 10:38

Загрузите растры на сервер
http://duncanjg.wordpress.com/2012/11/2 ... is-raster/

Inzaim
Новоприбывший
Сообщения: 8
Зарегистрирован: 18 сен 2014, 10:07
Репутация: 0

Re: Вопрос по написанию в MapBasic

Сообщение Inzaim » 18 сен 2014, 11:01

К сожалению сделать это невозможно. Все хранится на ленточном архиве. На самом сервере хранятся только файлы, но размером по 1кб.
Логика такая. Мы находим этот файл при помощи скрипта и уже в отдельном ПО запрашиваем загрузку нужного нам файла. Сидим и ждем пока он с ленты прочтется. Архив, примерно в 200 терабайт.

[ Сообщение с мобильного устройства ]

lam
Гуру
Сообщения: 1018
Зарегистрирован: 01 авг 2012, 13:55
Репутация: 241

Re: Вопрос по написанию в MapBasic

Сообщение lam » 18 сен 2014, 11:14

Как вариант, возможности "Геолинка" испробовать под вашу задачу, может быть и скрипт писать не придется.

Inzaim
Новоприбывший
Сообщения: 8
Зарегистрирован: 18 сен 2014, 10:07
Репутация: 0

Re: Вопрос по написанию в MapBasic

Сообщение Inzaim » 18 сен 2014, 14:48

Уже поднимал этот вопрос, но задачу ограничили в рамках мапинфо.

[ Сообщение с мобильного устройства ]

lam
Гуру
Сообщения: 1018
Зарегистрирован: 01 авг 2012, 13:55
Репутация: 241

Re: Вопрос по написанию в MapBasic

Сообщение lam » 18 сен 2014, 15:09

Inzaim писал(а):Уже поднимал этот вопрос, но задачу ограничили в рамках мапинфо.

[ Сообщение с мобильного устройства ]
"Геолинка" который в мапинфо.

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: Вопрос по написанию в MapBasic

Сообщение Boris » 19 сен 2014, 01:41

lam писал(а):
Inzaim писал(а):Уже поднимал этот вопрос, но задачу ограничили в рамках мапинфо.

[ Сообщение с мобильного устройства ]
"Геолинка" который в мапинфо.
я бы даже нескромно так сказал - "Геолинка, уже описанного на форуме"

Inzaim
Новоприбывший
Сообщения: 8
Зарегистрирован: 18 сен 2014, 10:07
Репутация: 0

Re: Вопрос по написанию в MapBasic

Сообщение Inzaim » 19 сен 2014, 08:03

К сожалению геолинк уже оказался сделанным. Он не может выполнить возложенную задачу. В названиях путей к файлам могут быть и посторонние символы. Так что тут без геолинка надо что-то выдумывать.
Кстати, как батник запустить из мапбейсика?

[ Сообщение с мобильного устройства ]

lam
Гуру
Сообщения: 1018
Зарегистрирован: 01 авг 2012, 13:55
Репутация: 241

Re: Вопрос по написанию в MapBasic

Сообщение lam » 19 сен 2014, 08:24

Inzaim писал(а):В названиях путей к файлам могут быть и посторонние символы. [ Сообщение с мобильного устройства ]
Здесь можно по подробнее?

Донецков
Гуру
Сообщения: 3058
Зарегистрирован: 19 май 2010, 19:44
Репутация: 189

Re: Вопрос по написанию в MapBasic

Сообщение Донецков » 19 сен 2014, 09:15

... наверное, что-то из вспомогательных символов, которые нельзя использовать в названиях файлов/каталогов в винде..., тогда смотреть нужно на Linux...

Inzaim
Новоприбывший
Сообщения: 8
Зарегистрирован: 18 сен 2014, 10:07
Репутация: 0

Re: Вопрос по написанию в MapBasic

Сообщение Inzaim » 19 сен 2014, 10:50

Нет, пути содержат нормальные символы. Директории могут называться как угодно, с кучей постранней инфы. Но всегда в папке есть дата и номер акта.

[ Сообщение с мобильного устройства ]

Inzaim
Новоприбывший
Сообщения: 8
Зарегистрирован: 18 сен 2014, 10:07
Репутация: 0

Re: Вопрос по написанию в MapBasic

Сообщение Inzaim » 19 сен 2014, 15:04

Вот что получилось. Сделал на основе примеров с сайта mapinfo. Вот тут нашел образец ссылка Далее вписал запрос на ввод переменной AKT. Переменная вставляется в самом низу в строку поиска и производится поиск в имени файла или папки. Вот только поиск идет только в конкретной папке. В подпапках скрипт не ищет. Что очень удручает.
Знаю, что на батниках можно выводить всю структуру папок и подпапок командой 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
Уважаемые, посодействуйте в решении вопроса.

Inzaim
Новоприбывший
Сообщения: 8
Зарегистрирован: 18 сен 2014, 10:07
Репутация: 0

Re: Вопрос по написанию в MapBasic

Сообщение Inzaim » 13 окт 2014, 09:54

Чувствую, вопрос всех неинтересен.

trir
Гуру
Сообщения: 5354
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Вопрос по написанию в MapBasic

Сообщение trir » 13 окт 2014, 10:07

WinAPI уже неинтересен даже MicroSOFT

Аватара пользователя
SergeyRyzhkov
Гуру
Сообщения: 909
Зарегистрирован: 02 июл 2014, 19:13
Репутация: 203
Ваше звание: GP-экотеррористы
Откуда: Санкт-Петербург
Контактная информация:

Re: Вопрос по написанию в MapBasic

Сообщение SergeyRyzhkov » 13 окт 2014, 15:37

trir писал(а):WinAPI уже неинтересен даже MicroSOFT
Это точно :)
Но чтобы облегчить страдания, Inzaim , используйте рекурсию

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость