forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Полезные функции (http://forum.boolean.name/forumdisplay.php?f=17)
-   -   Имена файлов (http://forum.boolean.name/showthread.php?t=5519)

impersonalis 08.01.2008 23:33

Имена файлов
 
Расширение файла по его имени
Код:

Function GetFileExtension$(FileName$)
        For i=Len(FileName) To 1 Step -1
                Local c$=Mid(FileName,i,1)
                If c="."
                        Exit
                EndIf
        Next
        Return Right(FileName,Len(FileName)-i)
End Function

Имя файла без рсширения из его произвольного адреса
Код:

Function GetFileName$(FileName$)
        For i=Len(FileName) To 1 Step -1
                Local c$=Mid(FileName,i,1)
                If c="\"
                        Exit
                EndIf
        Next
        Local EXT$=GetFileExtension(FileName$)
        Local NwEXT$=Right(FileName,Len(FileName)-i)
        Return Left(NwEXT,Len(NwEXT)-Len(EXT)-1)
End Function

Количество файлов в директории
Код:

Function GetFilesInDir%(DirName$)
        Local Dir=ReadDir(DirName)
        If DIR=0
                CloseDir (Dir)
                Return 0
        EndIf
        Local file$=""
        Local CNT%=0
        While True
                file$=NextFile$(Dir)
                If file$="" Then Exit
                CNT=CNT+1
        Wend
        CloseDir (Dir)
        Return CNT-3
End Function

Возвращает директорию (возможно с её адресом) по имени и пути файла
Код:

Function GetFileParentDir$(FileName$)
        For i=Len(FileName) To 1 Step -1
                Local c$=Mid(FileName,i,1)
                If c="\"
                        Exit
                EndIf
        Next
        Return Left(FileName,i)
End Function

Функции мои - потому сильно не надейтесь на их надёжность :-D
Демо:
PHP код:

Global test$="C:\folder\file.exten"
DebugLog  "GetFileExtension$("+test$+")="+GetFileExtension$(test)
DebugLog  "GetFileName$("+test$+")="+GetFileName$(test)
DebugLog "GetFileParentDir$("+test$+")="+GetFileParentDir$(test

GetFileExtension$(C:\folder\file.exten)=exten
GetFileName$(C:\folder\file.exten)=file
GetFileParentDir$(C:\folder\file.exten)=C:\folder\

Fla 09.01.2008 00:16

Ответ: Имена файлов
 
Нехочу вдаваться в код, но что будет, если у файла двойное расширение? Напрмиер .tar.gz?

H@NON 09.01.2008 00:16

Ответ: Имена файлов
 
А можно еще увидеть функцию которая бы из глобального пути переделывала в локальный, ну то есть вот у нас путь "C:\folder\file.exten" из этого получал такой: ".../file.exten" если приложение находиться в каталоге folder, и чтобы если мы находимся в каталоге выше, ну например "C:\folder\dir", то он бы выдавал "...\file.exten". Сорри за ошибки, если таковые были :).

impersonalis 09.01.2008 00:23

Ответ: Имена файлов
 
Цитата:

Сообщение от Fla (Сообщение 73422)
Нехочу вдаваться в код, но что будет, если у файла двойное расширение? Напрмиер .tar.gz?

gz - расширение
.tar -имя

HolyDel 09.01.2008 00:24

Ответ: Имена файлов
 
fla, нормально определится. ".gz" будет.

Код:

cmd$=CurrentDir()
DebugLog cmd

DebugLog GetLocalFilePayh$("C:\Develope\Protean\Temp\Sadam\TopSecret\Bush.Idiot")

Function GetLocalFilePayh$(file$)
d$=CurrentDir()

s$=""
For i=1 To Len(file)
        If Mid(file,i,1)<>Mid(d,i,1) Then s=s+Mid(file,i,1)
Next

Return s
End Function


H@NON 09.01.2008 00:35

Ответ: Имена файлов
 
HolyDel, как я понял ты написал функцию которая возвращала бы локальный путь до файла, тока ты упустил момент когда мы находимся в каталоге выше, чем лежит сам файл.

impersonalis 09.01.2008 00:44

Ответ: Имена файлов
 
примечание
Function GetFilesInDir%(DirName$) для использования в каталогах, не содержащх вложенных папок. Иначе вместо -3 на выходе нужно добавить услови на базе FileType

HolyDel 09.01.2008 01:02

Ответ: Имена файлов
 
вот пропатченная версия:
Код:

Function GetLocalFilePayh$(file$)
        Replace(file,"/","\")
        d$=CurrentDir()
       
        s$=""
        For i=1 To Len(file)
                If Mid(file,i,1)<>Mid(d,i,1) Then s=s+Mid(file,i,1)
        Next
       
        For i=1 To Len(d)
                If Mid(file,i,1)<>Mid(d,i,1) And Mid(d,i,1)="\" Then s="..\"+s
        Next
       
        Return s
End Function

а также пропатченная Имперская функция
Код:

Function GetFilesInDir%(DirName$)
        Local Dir=ReadDir(DirName)
        If DIR=0
                CloseDir (Dir)
                Return 0
        EndIf
        Local file$=""
        Local CNT%=0
        While True
                file$=NextFile$(Dir)
                If file<>"." And file<>".." And file<>"" Then CNT=CNT+GetFilesInDir%(file)
                If file$="" Then Exit
                CNT=CNT+1
        Wend
        CloseDir (Dir)
        Return CNT-3
End Function


Fla 09.01.2008 01:06

Ответ: Имена файлов
 
ХолиДел, да мне просто интересно, я на блице не кодю.

*Админы, сделайте вставку ника

impersonalis 09.01.2008 02:29

Ответ: Имена файлов
 
HolyDel занятное решение ;) Интересно - быстрее чем через определение типа объекта?

HolyDel 09.01.2008 10:31

Ответ: Имена файлов
 
не. по хорошему стоило бы определить что ето папка...
в принципе будет работать правильно, но ето:
Цитата:

Local Dir=ReadDir(DirName)
If DIR=0
CloseDir (Dir)
Return 0
EndIf
будет выполняться совсем зазря.


Часовой пояс GMT +4, время: 11:38.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot