如何获取字符串的内容减去ColdFusion中的扩展名?

Gen*_*e R 7 coldfusion

例如,我只想要一个字段中文件的"文件名".说我有myimage.jpg我只想显示"myimage"我怎么得到那个?

Tom*_*lak 9

使用List功能对您有利.

<cfset FileName = ListDeleteAt(FileFullName, ListLen(FileFullName, "."), ".")>
Run Code Online (Sandbox Code Playgroud)

请注意,这仅适用于实际具有文件扩展名的文件名(定义为最后一个点之后的文件扩展名).为了使它更安全,以下是更好的:

<cfset ExtensionIndex = ListLen(FileFullName, ".")>
<cfif ExtensionIndex gt 1>
  <cfset FileExt  = ListGetAt(ExtensionIndex , ".")>
  <cfset FileName = ListDeleteAt(FileFullName, ExtensionIndex, ".")>
<cfelse>
  <cfset FileExt  = "">
  <cfset FileName = FileFullName>
</cfif>
Run Code Online (Sandbox Code Playgroud)

更复杂的事情:可能有一些以点开头的文件.可能存在包含许多相邻点的文件名.列表函数为它们返回错误的结果,因为它们忽略空列表元素.也可能有文件有点,但没有扩展名.只有在您提供扩展名白名单时才能处理这些内容:ListFindNoCase(FileExt, "doc,xls,ppt,jpg").如果您想要考虑所有这些,您可能需要辞职到一个reguar表达式:

<cfset FileExtRe = "(?:\.(?:doc|xls|ppt|jpg))?$">
<cfset FileName  = REReplaceNoCase(FileExtRe, FileFullName, "")>
Run Code Online (Sandbox Code Playgroud)

要从路径中分割文件名,ColdFusion提供了不同的功能,这些功能也可以处理平台差异:GetFileFromPath()GetDirectoryFromPath()


ale*_*ale 6

Tomalak的答案很好,但这可能会变得棘手.给定一个名为"mydoc.ver1.doc"(有效的Windows文件名)的文件,它是文件名,是扩展名?如果有文件路径怎么办?

但是,即使在这些情况下,您仍然可以利用列表函数.

您可以轻松地从路径中解析出文件

fullFileName=listLast(fieldname,"\/")
Run Code Online (Sandbox Code Playgroud)

如果你假设文件名是点之前的所有内容,那么

theFileName=listFirst(fullFileName,".") 
Run Code Online (Sandbox Code Playgroud)

将工作.

如果你想确保你得到的东西除了最后一段时间后的东西,那么需要一点点诡计,但并不多.没有一个listAllButLast()功能(尽管CFLIB.org上可能存在这样的事情),但我有两种方法可以想到你想要的东西.

fileName=reverse(listRest(reverse(fullFileName),"."))
Run Code Online (Sandbox Code Playgroud)

要么

fileName=listDeleteAt(fullFileName,listLen(fullFileName,"."),".")
Run Code Online (Sandbox Code Playgroud)

然而,与Tomalak的建议一样,这将打破缺少扩展名的文件名.将其包含在<cfif listLen(fullFileName,".") GT 1>遗嘱中就可以解释这一点.