例如,我只想要一個字段中文件的「文件名」。說我有myimage.jpg我只想顯示「myimage」我如何得到這個?如何在ColdFusion中獲取字符串的內容減去擴展名?
回答
使用列表功能對您有利。
<cfset FileName = ListDeleteAt(FileFullName, ListLen(FileFullName, "."), ".")>
請注意,這僅適用於實際有文件擴展名(即最後一個點後,定義爲的事情)的文件名。爲了使它更安全,以下更好:
<cfset ExtensionIndex = ListLen(FileFullName, ".")>
<cfif ExtensionIndex gt 1>
<cfset FileExt = ListGetAt(ExtensionIndex , ".")>
<cfset FileName = ListDeleteAt(FileFullName, ExtensionIndex, ".")>
<cfelse>
<cfset FileExt = "">
<cfset FileName = FileFullName>
</cfif>
使事情更復雜一點:可能有文件以點開頭。可能有文件名包含許多相鄰的點。列表函數爲它們返回錯誤的結果,因爲它們忽略空列表元素。也可能有文件有點,但沒有擴展名。這些只能在您提供擴展名白名單時處理:ListFindNoCase(FileExt, "doc,xls,ppt,jpg")
。如果要解釋這一切,你可能需要辭職到絡表達式:
<cfset FileExtRe = "(?:\.(?:doc|xls|ppt|jpg))?$">
<cfset FileName = REReplaceNoCase(FileExtRe, FileFullName, "")>
從路徑拆分文件名,ColdFusion的提供不同的功能,也處理平臺的差異:GetFileFromPath()
和GetDirectoryFromPath()
所以你首先需要找到最後一個完整的位置(可能有多個完整的文件名)。我不認爲ColdFusion的具有查找功能是倒過來,所以首先扭轉字符串:
<cfset Position = Find(".", Reverse(FullFileName))>
如果返回零,那麼你不必在文件名中一個句號,所以適當的處理。否則...
<cfset Filename = Left(FullFileName, Len(FullFileName) - Position>
當前接受的解決方案對於不包含擴展名的文件不起作用。
您可以通過使用正則表達式,只有當它的存在是爲了剝離擴展解決這個問題:
<cfset FileName = rereplace(FullFileName , '\.[^.]+$' , '') />
這可能還不是完美的 - 你可能有,有一個文件。
<cfset FileName = rereplace(FullFileName , '\.(jpg|png|gif|bmp)$' , '') />
<cfset FileName = rereplace(FullFileName , '\.[^.]{1,5}$' , '') />
託默勒格的回答是: - ,但它不被視爲一個擴展,你可以通過使用已知的擴展名的列表剝離,或通過限制你將延長多久接受(例如高達5)解決了這個好,但這可能會變得棘手。給定一個文件名爲「mydoc.ver1.doc」(一個有效的Windows文件名),它是文件名,它是擴展名?如果有文件路徑怎麼辦?
但是,即使在這些情況下,仍然可以充分利用列表功能。
您可以輕鬆地解析出從路徑的文件與
fullFileName=listLast(fieldname,"\/")
如果假設文件名是點之前的所有內容,然後
theFileName=listFirst(fullFileName,".")
會工作。
如果你想確保你得到的只是最後一段時間以後的事情,那麼就需要一點小小的詭計,但並不多。沒有一個listAllButLast()
函數(儘管CFLIB.org上可能存在這樣的事情),但我可以通過兩種方式來獲得你想要的結果。
fileName=reverse(listRest(reverse(fullFileName),"."))
或
fileName=listDeleteAt(fullFileName,listLen(fullFileName,"."),".")
與託默勒格的建議,但是,這將打破上缺少擴展名的文件名。將其包裝在<cfif listLen(fullFileName,".") GT 1>
將解決這個問題。
從ColdFusion 9+(也許更早,但我無法驗證)開始,包含了Apache Commons庫。在那裏是org.apache.commons.io.FilenameUtils
。您可以利用減少CF中所需操作數量的方法來獲得相同(或類似)的結果。
filepath = "some/dir/archive.tar.gz";
oUtils = createObject("java", "org.apache.commons.io.FilenameUtils");
writeDump(oUtils.getFullPath(filepath)); // "some/dir/"
writeDump(oUtils.getName(filepath)); // "archive.tar.gz"
writeDump(oUtils.getBaseName(filepath)); // "archive.tar"
writeDump(oUtils.getExtension(filepath)); // "gz"
writeDump(oUtils.getPath(filepath)); // "some/dir/"
writeDump(oUtils.getPathNoEndSeparator(filepath)); // "some/dir"
- 1. C - 擴展字符串的內容
- 2. 如何從ColdFusion中的字符串獲取子字符串
- 3. 如何從內容類型獲取文件擴展名?
- 4. 如何在ColdFusion中從字符串中提取子字符串?
- 5. 如何在awk中擴展字符串
- 6. 如何在PHP中的字符串中減去數字?
- 7. 在ColdFusion中獲取生成的內容
- 8. 減去字符串的值
- 9. 獲取JavaScript中內容類型的默認文件擴展名?
- 10. 如何減去兩個字符串
- 11. XAML:減去標記擴展
- 12. 如何從Chrome擴展中的內容腳本獲取變量?
- 13. 如何獲取Mozilla Thunderbird擴展中的附件內容?
- 14. 在python中減去兩個字符串
- 15. 如何在C#中使用子字符串從(文件名+擴展名)中只獲取「文件名」?
- 16. 如何獲取url html內容到java中的字符串
- 17. 如何使用bash獲取字符串中函數的內容?
- 18. 如何從數組中的HTML字符串獲取內容
- 19. 如何從JQuery中的JSON字符串獲取JSON內容?
- 20. 如何獲取Objective-C中字符串的部分內容?
- 21. 如何根據ActionScript中的文件內容獲取文件類型/擴展名?
- 22. 如何獲取字符串內[[string]]內的字符串? (C#)
- 23. 如何從字符串中的數字中減去百分比?
- 24. 如何使用bash更改字符串中的擴展名?
- 25. 從文件名中減去文件擴展名
- 26. 如何獲得給定內容類型的默認擴展名?
- 27. 「減去」字符串,python中的類
- 28. 在字符串的開始處減去
- 29. 無擴展名的文件獲取內容
- 30. 如何在MySQL中獲取文件名的擴展名?
哪種語言? – AnnaR 2008-10-18 15:47:24
是的,很難從原始問題中分辨出來。 :)當你回答時,你會發現它被標記爲「coldfusion」。 – Pistos 2008-10-18 15:54:08