如何通过 ColdFusion 中的最后一个分隔符拆分字符串

How to split a String by last delimiter in ColdFusion

在 CF9 中,我有一个像 C:\Docs2837\nyspflsys\Medical Report\XLSX_46.xlsx

这样的字符串

我想用最后一个反斜杠拆分它,所以它应该看起来像
array[1] = C:\Docs2837\nyspflsys\Medical Report
array[2] = XLSX_46.xlsx

如何在 ColdFusion 9 中实现?

<cfset myString = "C:\Docs2837\nyspflsys\Medical Report\XLSX_46.xlsx" />
<cfset myArray = ArrayNew(1) /> 
<cfset myArray[2] = ListLast(myString, "\") />
<cfset myArray[1] = REReplace(myString, "\" & myArray[2] & "$", "") />


<cfdump var="#myArray#" />

您可能要考虑使用 GetDirectoryFromPath and GetFileFromPath

<cfset fullPath = "C:\Docs2837\nyspflsys\Medical Report\XLSX_46.xlsx">

<cfset dirPath  = getDirectoryFromPath(fullPath)>    <!--- C:\Docs2837\nyspflsys\Medical Report\ --->
<cfset dirPath  = reReplace(dirPath, "[\/]$", "")>  <!--- C:\Docs2837\nyspflsys\Medical Report  --->
<cfset fileName = getFileFromPath(fullPath)>         <!--- XLSX_46.xlsx                             --->

在这种情况下,我总是使用 reverse 和 listRest,因为它在概念上对我来说很有意义。

<cfset test = "C:\Docs2837\nyspflsys\Medical Report\XLSX_46.xlsx" />
<cfset arr = [
    reverse(listRest(reverse(test), "\")),
    listLast(test, "\")
] />
<cfdump var="#arr#" />

https://trycf.com/gist/71a788189d26944c0fa461f255ab6cc2

可以改用 listDeleteAt(test, listLen(test, "\"), "\"),但我觉得那样不太干净。不过要么工作得很好

我同意 关于内置函数的观点,但如果您仍然想自己解析它,那么这种方式比目前的其他答案更有效(cfscript 语法中显示的示例):

path = "C:\Docs2837\nyspflsys\Medical Report\XLSX_46.xlsx";

file = listLast(path, "/\");               // account for unix path separator as well
dir  = left(path, len(path) - len(file));

如果您使用的是 Lucee,那么您可以利用 left() 的负长度输入,例如:

dir = left(path, -len(file));             // Lucee only, passing negative length to left()

请记住,此方法将尾随路径分隔符保留在 dir 中,因此如果您想删除它,您需要再删除一个字符,即 - len(file) - 1