Wie bekomme ich den Inhalt einer Zeichenfolge abzüglich der Erweiterung in ColdFusion?

7

Zum Beispiel möchte ich nur den "Dateinamen" einer Datei in einem Feld. Sag ich habe myimage.jpg Ich möchte nur "myimage" anzeigen Wie bekomme ich genau das?

    
Gene R 18.10.2008, 15:44
quelle

5 Antworten

8

Nutzen Sie die Listenfunktionen zu Ihrem Vorteil.

%Vor%

Beachten Sie, dass dies nur für Dateinamen funktioniert, die tatsächlich eine Dateierweiterung haben (die als die Sache nach dem letzten Punkt definiert ist). Um es sicherer zu machen, ist das Folgende besser:

%Vor%

Um die Dinge ein wenig weiter zu komplizieren: Es kann Dateien geben, die mit einem Punkt beginnen. Es kann Dateinamen geben, die viele benachbarte Punkte enthalten. Listenfunktionen geben für sie falsche Ergebnisse zurück, da sie leere Listenelemente ignorieren. Es kann auch Dateien geben, die Punkte haben, aber keine Erweiterung. Diese können nur behandelt werden, wenn Sie eine Erweiterungs-Whitelist angeben: ListFindNoCase(FileExt, "doc,xls,ppt,jpg") . Wenn Sie all dies erklären wollen, müssen Sie wahrscheinlich mit einem regulären Ausdruck zurücktreten:

%Vor%

Um den Dateinamen aus dem Pfad zu trennen, bietet ColdFusion verschiedene Funktionen, die auch Plattformunterschiede behandeln: GetFileFromPath() und GetDirectoryFromPath()

    
Tomalak 18.10.2008, 16:40
quelle
6

Tomalaks Antwort ist gut, aber das kann schwierig werden. Gegeben eine Datei namens "meindoc.ver1.doc" (ein gültiger Windows-Dateiname) welcher ist der Dateiname und welche ist die Erweiterung? Was ist, wenn ein Dateipfad vorhanden ist?

Sie können die Listenfunktionen jedoch auch in diesen Szenarien zu Ihrem Vorteil nutzen.

Sie können die Datei einfach aus dem Pfad mit

auslesen %Vor%

Wenn Sie annehmen, dass der Dateiname alles vor dem Punkt ist, dann

%Vor%

funktioniert.

Wenn du sicherstellen willst, dass du alles bekommst, was nach der letzten Periode ist, dann ist ein kleiner Trick nötig, aber nicht viel. Es gibt keine listAllButLast() -Funktion (obwohl so etwas auf CFLIB.org existieren könnte), aber es gibt zwei Möglichkeiten, um zu bekommen, wonach Sie suchen.

%Vor%

oder

%Vor%

Wie bei Tomalaks Vorschlag wird dies jedoch bei einem Dateinamen fehlschlagen, dem eine Erweiterung fehlt. Wrapping in einem <cfif listLen(fullFileName,".") GT 1> wird dafür verantwortlich sein.

    
ale 19.10.2008 15:36
quelle
3

Die derzeit akzeptierte Lösung funktioniert nicht für eine Datei, die keine Erweiterung enthält.

Sie können dies lösen, indem Sie einen regulären Ausdruck verwenden, um die Erweiterung nur zu entfernen, wenn sie existiert:

%Vor%


Dies könnte immer noch nicht perfekt sein - Sie könnten eine Datei haben, die eine. aber es wird nicht als Erweiterung betrachtet - Sie können dies entweder mithilfe einer Liste bekannter Erweiterungen zum Entfernen lösen oder indem Sie begrenzen, wie lange eine Erweiterung akzeptiert wird (z. B. bis zu 5):

%Vor%     
Peter Boughton 18.10.2008 18:45
quelle
1

Sie müssen also zuerst die Position des letzten Vollstops finden (es könnte mehr als einen Vollstopp im vollständigen Dateinamen geben). Ich glaube nicht, dass Coldfusion eine Suchfunktion hat, die rückwärts arbeitet, also kehre zuerst die Zeichenfolge um:

%Vor%

Wenn das Ergebnis Null ist, haben Sie keinen vollständigen Stopp im Dateinamen, also behandeln Sie es entsprechend. Sonst ...

%Vor%     
Guy C 18.10.2008 16:48
quelle
1

Ab ColdFusion 9+ (vielleicht früher, aber ich kann das nicht überprüfen): Apache Commons Bibliothek wurde aufgenommen. Darin ist org.apache.commons.io.FilenameUtils . Sie können Methoden verwenden, um die Anzahl der Operationen in CF zu reduzieren, um dieselben (oder ähnliche) Ergebnisse zu erhalten.

%Vor%     
Tristan Lee 22.10.2014 18:44
quelle

Tags und Links