如何通过 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
在 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, "\"), "\")
,但我觉得那样不太干净。不过要么工作得很好
我同意
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