Por ejemplo, solo quiero el "nombre de archivo" de un archivo en un campo. Digamos que tengo myimage.jpg Solo quiero mostrar "myimage" ¿Cómo puedo obtener eso?¿Cómo obtengo el contenido de una cadena menos la extensión en ColdFusion?
Respuesta
Utilice las funciones de Lista para su ventaja.
<cfset FileName = ListDeleteAt(FileFullName, ListLen(FileFullName, "."), ".")>
Tenga en cuenta que esto sólo funciona para los nombres de archivo que en realidad tienen una extensión de archivo (que se define como la cosa después del último punto). Para hacerlo más seguro, lo siguiente es mejor:
<cfset ExtensionIndex = ListLen(FileFullName, ".")>
<cfif ExtensionIndex gt 1>
<cfset FileExt = ListGetAt(ExtensionIndex , ".")>
<cfset FileName = ListDeleteAt(FileFullName, ExtensionIndex, ".")>
<cfelse>
<cfset FileExt = "">
<cfset FileName = FileFullName>
</cfif>
Para complicar las cosas un poco más: Puede haber archivos que comienzan con un punto. Puede haber nombres de archivo que contengan muchos puntos adyacentes. Las funciones de lista devuelven resultados incorrectos, ya que ignoran los elementos de la lista vacía. También puede haber archivos con puntos, pero sin extensión. Estos solo pueden manejarse si proporciona una lista blanca de extensión: ListFindNoCase(FileExt, "doc,xls,ppt,jpg")
. Si quieres dar cuenta de todo esto, es probable que tenga que renunciar a una expresión reguar:
<cfset FileExtRe = "(?:\.(?:doc|xls|ppt|jpg))?$">
<cfset FileName = REReplaceNoCase(FileExtRe, FileFullName, "")>
Para dividir nombre de archivo de ruta, ColdFusion proporciona funciones distintas que también se ocupan de diferencias de plataforma: GetFileFromPath()
y GetDirectoryFromPath()
Por lo tanto, primero debe encontrar la posición del último tope (podría haber más de un tope completo en el nombre de archivo completo). No creo Coldfusion tiene una función de búsqueda que funciona al revés, por lo que invertir la primera cadena:
<cfset Position = Find(".", Reverse(FullFileName))>
Si eso devuelve cero, entonces usted no tiene un fullstop en el nombre del archivo, lo que debe manipularse adecuadamente. Else ...
<cfset Filename = Left(FullFileName, Len(FullFileName) - Position>
BTW: a partir de ColdFusion MX, tiene acceso a las clases Java subyacentes. Llamar a 'FileFullName.lastIndexOf (".")' Es mucho más eficiente que hacer 'Find (' '' ', Reverse (FileFullName))'. – Tomalak
La solución aceptada actualmente no funcionará para un archivo que no contiene una extensión.
Puede resolver esto mediante el uso de una expresión regular para despojar a la extensión sólo si existe:
<cfset FileName = rereplace(FullFileName , '\.[^.]+$' , '') />
Esto todavía no puede ser perfecto - que podría tener un archivo que tiene una. pero no se considera una extensión - se puede resolver esto ya sea mediante el uso de una lista de extensiones conocidas a desnudarse, o mediante la limitación de la duración de una extensión que va a aceptar (por ejemplo, hasta 5):
<cfset FileName = rereplace(FullFileName , '\.(jpg|png|gif|bmp)$' , '') />
<cfset FileName = rereplace(FullFileName , '\.[^.]{1,5}$' , '') />
respuesta de Tomalak es bien, pero esto puede ser complicado. Dado un archivo llamado "mydoc.ver1.doc" (un nombre de archivo de Windows válido) ¿cuál es el nombre del archivo y cuál es la extensión? ¿Qué pasa si hay un archivo de ruta?
Sin embargo, aún puede aprovechar las funciones de la lista, incluso en estos casos.
puede analizar fácilmente el archivo de la ruta con
fullFileName=listLast(fieldname,"\/")
Si usted asume el nombre del archivo es todo antes del punto, entonces
theFileName=listFirst(fullFileName,".")
va a funcionar.
Si quiere asegurarse de obtener todo pero después del último período, entonces se necesita un pequeño truco, pero no mucho. No hay una función listAllButLast()
(aunque tal cosa podría existir en CFLIB.org) pero hay dos maneras en que puedo pensar para obtener lo que buscas.
fileName=reverse(listRest(reverse(fullFileName),"."))
o
fileName=listDeleteAt(fullFileName,listLen(fullFileName,"."),".")
Al igual que con la sugerencia de Tomalak, sin embargo, esto se desintegrará en un nombre de archivo que no tiene una extensión. Envolver esto en un <cfif listLen(fullFileName,".") GT 1>
representará eso.
A partir de ColdFusion 9+ (quizás antes, pero no puedo verificar), se incluyó la biblioteca Apache Commons. Dentro de eso está org.apache.commons.io.FilenameUtils
. Puede utilizar métodos dentro de la reducción de la cantidad de operaciones necesarias en CF para obtener los mismos resultados (o similares).
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ómo obtengo el contenido de una solicitud http en Ruby?
- 2. Agregar extensión de archivo a archivo de extensión-menos
- 3. ¿Cómo obtengo la longitud de una cadena en Perl?
- 4. ¿Qué sucede con esto en la función DecimalFormat() de ColdFusion? ¿Cómo obtengo el resultado correcto?
- 5. Hacer la operación menos en la cadena
- 6. GZip una cadena para la salida de resultados de Coldfusion en "Error de codificación de contenido" en los navegadores
- 7. ¿Cómo puedo sangrar automáticamente MENOS? (la extensión css)
- 8. ¿Cómo puedo eliminar etiquetas HTML de una cadena ColdFusion?
- 9. ¿Cómo obtengo una parte de una cadena en C++?
- 10. ¿Cómo obtengo el último carácter de una cadena?
- 11. cómo borrar el contenido en la secuencia de cadena.
- 12. MENOS interpolación de cadena
- 13. Cómo poner el contenido del getenv() en una cadena
- 14. ¿Cómo obtener la extensión de archivo del tipo de contenido?
- 15. ¿Cómo convertir una representación de cadena de un número a un número en coldfusion?
- 16. ¿Cómo obtengo la longitud de cadena promedio en mysql? Este
- 17. nombre de la llamada del método contenido en una cadena
- 18. Carga de script de contenido en la extensión de cromo
- 19. largo de contenido/multilínea a través cfset en ColdFusion
- 20. ¿Cómo comprobar si el contenido de la cadena contiene HTML?
- 21. Coincide con la ruta de una URL, menos la extensión de nombre de archivo
- 22. Cómo obtengo contenido textual de BLOB en Oracle SQL
- 23. Extensión de Chrome: ¿cómo detectar que el script de contenido ya está cargado en una pestaña?
- 24. ¿Cómo puedo cambiar el nombre de la extensión en una cadena con bash?
- 25. Copie el contenido de un streambuf en una cadena
- 26. ¿Cómo puedo abrir la página emergente de mi extensión de Chrome desde el script de contenido de la extensión?
- 27. ¿Separar una cadena en Ruby, ignorando el contenido de paréntesis?
- 28. ¿Cómo obtengo el contenido de un archivo comprimido usando la biblioteca rubyzip?
- 29. ¿Cómo limitar el script de contenido de extensión de Chrome a un tipo de contenido específico?
- 30. Cómo inyectar CSS utilizando el archivo de script de contenido en la extensión de Chrome?
que idioma? – AnnaR
Sí, es difícil de decir de la pregunta original. :) Cuando respondes, sin embargo, ves que está etiquetado como "fusión fría". – Pistos
Sí, lo siento, estoy en Coldfusion. Recuerdo que había una función que me permitiría hacer algo como esto, pero no puedo encontrarlo. –