Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > взять имя из строки


Автор: max85 19.9.2007, 16:25
Добрый день!
Кто может подскажет как вытащить имя файла из строки, например есть строка
D:\Files\file1.cab
надо при нажатии на кнопку в текстовом поле появилось только имя файла с расширением file1.cab

подскажите как можно это сделать...
спасибо!

Автор: Akina 19.9.2007, 16:58
Код

do while AllowedInFileName(Right(str1,1))
 str2=Right(str1,1) & str2
 if len(str1)=1 then exit do
 str1=Left(str1, Len(str1)-1)
loop

Function AllowedInFileName(Symbol As String) As Boolean
 If Symbol = ":"  Or Symbol = "\" Then
  AllowedInFileName=False
 Else
  AllowedInFileName=True
 EndIf
End Function 

Это при условии, что str1 - действительно корректное имя файла

Автор: max85 19.9.2007, 17:12
Спасибоза отзыв!
а если путь будет примерно такой 
D:\path\папка\ghbvth\file.txt
сработает?

Добавлено через 8 минут и 14 секунд
вопрос снимается. глупый вопрос!
СПАСИБО!
работает

Автор: JusTalionis 20.9.2007, 09:19
Akina, объясни мне, плиз, зачем такие сложности, если искомый результат достигается одной строчкой: 
Код
 Right$(pathN$,Len(pathN$)-(InStrRev(pathN$,"\"))) 
 (где pathN$ - содержит исходные путь\имя).

?

Автор: W4FhLF 20.9.2007, 09:28
Код

Arr = Split(Path, "\"): FileName = Arr(UBound(Arr))



Автор: Akina 20.9.2007, 11:22
Цитата(JusTalionis @  20.9.2007,  10:19 Найти цитируемый пост)
зачем такие сложности

Код

filename$ = "x:filename.ext"


Если же входной параметр - гарантированно полное имя, то

Код

filename = mid(fullname, instr(fullname, "\") + 1)

Автор: JusTalionis 20.9.2007, 17:26
Вообще-то я исходил из авторского условия:
D:\path\папка\ghbvth\file.txt

Если же хотим обработать краевые эффекты, все равно легче просто повторить функцию, с другим разделителем:
Код
FileName = Right$(Path, Len(Path) - (InStrRev(Path, "\")))
FileName = Right$(FileName, Len(FileName) - (InStrRev(FileName, ":")))

Ваш второй вариант - не работает, потому что строка делится по первому слэшу, а не последнему.


W4FhLF:
Хотя это и не совсем в бейсиковском духе, но изящный и очень эффективный способ, потому что позволяет выделить любой параметр, а не только последниий. IMHO, это лучшее решение из представленныз здесь.

Автор: Akina 20.9.2007, 20:36
Цитата(JusTalionis @  20.9.2007,  18:26 Найти цитируемый пост)
Ваш второй вариант - не работает, потому что строка делится по первому слэшу, а не последнему.

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


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)