在CF9中,我有一个像getExternalStoragePublicDirectory()
我想用最后一个反斜杠拆分它,所以它应该看起来像
C:\Docs\472837\nyspflsys\Medical Report\XLSX_46.xlsx
和
array[1] = C:\Docs\472837\nyspflsys\Medical Report
如何在ColdFusion 9中执行此操作?
答案 0 :(得分:6)
您可以考虑使用GetDirectoryFromPath和GetFileFromPath。
<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