Добрый день, подскажите как можно импортировать с фтп файл с неизветным окончанием названия файла. Dim strPath, strDt, strFile as String strPath = "ftp://10.10.4.3/public/" strDt = InputBox("Введите дату проверки в формате YYYYMMDD", , 20120627) strFile = strPath & "file1.txt_" & strDt & "_2130" & "%%"
и последние цифры "%%" могут быть не известны, кто нибудь знает как сделать?
Пользователь
Сообщений: Регистрация: 23.12.2012
28.06.2012 16:01:17
А вы скажите, как бы вы делали это вручную (будь у вас только браузер) А мы тогда подскажем, как вашу идею воплотить в виде кода.
Без этих неизвестных цифр, файл не скачивается? Когда придумаете, как обойти эти цифры, воспользуйтесь моим решением для загрузки файла из интернета (с Web-сервера, или через FTP):
Пользователь
Сообщений: Регистрация: 01.01.1970
28.06.2012 16:14:32
Идея в том, чтобы автоматически открывался ексель смотрел папку на фтп и брал нужный файл (суть в том что название файла строится на имени файла даты и времени выгрузки с секундами, и секунды всегда разные), поэтому сложность возникла только с выбором файла... я это представляю как цикл просмотра файлов в папке по маске(имяФайла_Date_2130), но как это сделать пока не понимаю
Пользователь
Сообщений: Регистрация: 23.12.2012
28.06.2012 20:33:55
Я бы сделал так:
Взяв за основу модуль класса из дописал бы туда функцию, возвращающую массив имён файлов, найденных в заданной папке:
Function FilesFromFolder(ByVal FtpFolder$, Optional ByVal Mask$ = "*") On Error Resume Next: Kill TMP_FILE_PATH$ folder$ = Replace(BaseFolder & FtpFolder$, "//", "/") If Right(folder$, 1) <> "/" Then folder$ = folder$ & "/"
res$ = Execute(TXT_DIR$) 'ChangeFileCharset TMP_FILE_PATH$, "Windows-1251", "CP866" FilesFromFolder = ReadTXTfile(TMP_FILE_PATH$) Kill TMP_FILE_PATH$ While Right(FilesFromFolder, 2) = vbNewLine: FilesFromFolder = Left(FilesFromFolder, Len(FilesFromFolder) - 2): Wend FilesFromFolder = Split(FilesFromFolder, vbNewLine) End Function
Ну а потом уже работал бы с полученным массивом имен:
Sub test() On Error Resume Next strDt = InputBox("Введите дату проверки в формате YYYYMMDD", , 20120627) strFile = strPath & "file1.txt_" & strDt
Dim FTP As New FTPcommander ' загружаем с FTP список файлов arr = FTP.FilesFromFolder(WEB_FOLDER$, strFile & "*")
' перебираем имена файлов в массиве For i = LBound(arr) To UBound(arr) MsgBox "Найден подходящий файл: " & vbNewLine & arr(i) Next i
Set FTP = Nothing End Sub
Пользователь
Сообщений: Регистрация: 22.12.2012
28.06.2012 21:14:41
Может так - можно как скрипт.vbs использовать, можно как макрос:
Dim FSO Dim TheFolder, TheFiles, AFile strPath = "ftp://10.10.4.3/public/" strDt = InputBox("Введите дату проверки в формате YYYYMMDD", , 20120627) strFile = strPath & "file1.txt_" & strDt & "_2130" & "%%"
Set FSO = CreateObject("Scripting.FileSystemObject") Set TheFolder = FSO.GetFolder(strPath) 'Каталог Set TheFiles = TheFolder.Files
For Each AFile In TheFiles If UCase(FSO.GetExtensionName(AFile.Path)) = "TXT_" & strDt & "_2130" & "*" Then AFile.Delete Next
Строка strFile = strPath & "file1.txt_" & strDt & "_2130" & "%%" совершенно лишняя... :) Хотя, если там есть аналогичные файлы, но не "file1" - тогда из неё "file1" нужно как-то в код прикрутить... Т.е. проверяем расширение и одновременно имя файла.