어떻게 이 문자열의 내용을 뺀 값에서 확장 ColdFusion?
-
03-07-2019 - |
문제
예를 들어,내가 원하는 그냥"파일이름"에서 파일의 필드가 있습니다.가 myimage.jpg 나만 표시하고 싶은"myimage"어떻게 내가 그니까?
해결책
목록을 사용하여 기능을 장점이다.
<cfset FileName = ListDeleteAt(FileFullName, ListLen(FileFullName, "."), ".")>
알고 있어야만 작품에 대한 파일이 실제로는 이름 가 파일 확장자(으로 정의된 것은 후에 마지막 마침표 뒤에 나오).게 안전하고,다음은 더 나은:
<cfset ExtensionIndex = ListLen(FileFullName, ".")>
<cfif ExtensionIndex gt 1>
<cfset FileExt = ListGetAt(ExtensionIndex , ".")>
<cfset FileName = ListDeleteAt(FileFullName, ExtensionIndex, ".")>
<cfelse>
<cfset FileExt = "">
<cfset FileName = FileFullName>
</cfif>
일을 복잡하게 조금 더:가 있는 파일로 시작하는 점입니다.될 수 있습이 포함된 파일 이름은 많은 인접한 점이 있습니다.목록 기능을 잘못된 결과를 반환한 대로 그들을 무시 빈 목록 요소입니다.수도 있습는 파일이 있는 점,그러나 확장 없다.이러한만 처리할 수 있 제공하는 경우에는 연장이트: ListFindNoCase(FileExt, "doc,xls,ppt,jpg")
.하려는 경우 계정에 대한 이 모든,당신은 아마도 사임하 reguar expression:
<cfset FileExtRe = "(?:\.(?:doc|xls|ppt|jpg))?$">
<cfset FileName = REReplaceNoCase(FileExtRe, FileFullName, "")>
분할 파일의 이름에서 경로,ColdFusion 제공하는 고유한 기능을 하는 또한 처리 플랫폼의 차이: GetFileFromPath()
고 GetDirectoryFromPath()
다른 팁
Tomalak의 대답은 좋지만 이것은 까다로울 수 있습니다. "mydoc.ver1.doc"(유효한 Windows 파일 이름)라는 파일이 주어지면 Filename이며 어떤 확장자입니까? Filepath가 있으면 어떻게됩니까?
그러나 이러한 시나리오에서도 목록 기능을 유리하게 활용할 수 있습니다.
경로에서 파일을 쉽게 구문 분석 할 수 있습니다.
fullFileName=listLast(fieldname,"\/")
파일 이름이 점 앞에있는 모든 것이라고 가정하면
theFileName=listFirst(fullFileName,".")
작동합니다.
마지막 기간 이후의 모든 것을 얻지 않으려면 약간의 속임수가 필요하지만 그다지 많지는 않습니다. A가 없습니다 listAllButLast()
기능 (그런 것이 cflib.org에 존재할 수 있지만) 그러나 당신이 따르는 것을 얻기 위해 생각할 수있는 두 가지 방법이 있습니다.
fileName=reverse(listRest(reverse(fullFileName),"."))
또는
fileName=listDeleteAt(fullFileName,listLen(fullFileName,"."),".")
그러나 Tomalak의 제안과 마찬가지로 이것은 확장이없는 파일 이름으로 분류됩니다. 이것을 a <cfif listLen(fullFileName,".") GT 1>
그것을 설명합니다.
현재 허용 솔루션을 작동하지 않는 파일에 포함되지 않은 확장자.
를 해결할 수 있을 사용하여 이 정규 표현식을 지구의 확장자에만 존재하는 경우:
<cfset FileName = rereplace( FullFileName , '\.[^.]+$' , '' ) />
이것은 여전히 완벽하지 않을-당신은 수도에 있는 파일.하지만 그렇지 않으로 간주장이 해결할 수 있거나 사용하여 목록 확장자를 스트립 또는 제한하여 얼마나 확장을 받아들일 것입니다(예:까지 5):
<cfset FileName = rereplace( FullFileName , '\.(jpg|png|gif|bmp)$' , '' ) />
<cfset FileName = rereplace( FullFileName , '\.[^.]{1,5}$' , '' ) />
그래서 먼저 찾아야하는 위치의 마지막 f 을 ls 돕 이(가 될 수 있는 하나 이상 f 을 ls 돕 이에서는 전체 파일명을 사용할 수).나는 생각하지 않 Coldfusion 찾기 작동 기능을 뒤,그 반대의 첫 번째 문자열:
<cfset Position = Find(".", Reverse(FullFileName))>
는 경우에는 반환한 다음 없 f 을 ls 돕 이 파일 이름에 그렇게 적절하게 처리.다른...
<cfset Filename = Left(FullFileName, Len(FullFileName) - Position>
ColdFusion 9+ (아마도 이전에 확인할 수 없지만). 아파치 커먼즈 도서관이 포함되었습니다. 그 안에 org.apache.commons.io.FilenameUtils
. CF에 필요한 작업량을 삭감하여 동일한 (또는 유사한) 결과를 얻을 수있는 방법을 활용할 수 있습니다.
filepath = "some/dir/archive.tar.gz";
oUtils = createObject("java", "org.apache.commons.io.FilenameUtils");
writeDump(oUtils.getFullPath(filepath)); // "some/dir/"
writeDump(oUtils.getName(filepath)); // "archive.tar.gz"
writeDump(oUtils.getBaseName(filepath)); // "archive.tar"
writeDump(oUtils.getExtension(filepath)); // "gz"
writeDump(oUtils.getPath(filepath)); // "some/dir/"
writeDump(oUtils.getPathNoEndSeparator(filepath)); // "some/dir"