如何在ColdFusion中按最后一个分隔符拆分String

时间:2017-11-10 07:09:19

标签: coldfusion coldfusion-9 cfml

在CF9中,我有一个像getExternalStoragePublicDirectory()

这样的字符串

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

如何在ColdFusion 9中执行此操作?

4 个答案:

答案 0 :(得分:6)

您可以考虑使用GetDirectoryFromPathGetFileFromPath

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

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

答案 1 :(得分:4)

<cfset myString = "C:\Docs\472837\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#" />

答案 2 :(得分:1)

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

<cfset test = "C:\Docs\472837\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, "\"), "\"),但这对我来说并不干净。要么工作得好,不过

答案 3 :(得分:1)

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

path = "C:\Docs\472837\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