ventajas tutorial juego español descargar coldfusion

tutorial - ¿Cómo obtengo el contenido de una cadena menos la extensión en ColdFusion?



coldfusion tutorial español (5)

La solución aceptada actualmente no funcionará para un archivo que no contiene una extensión.

Puedes resolver esto usando una expresión regular para quitar la extensión solo si existe:

<cfset FileName = rereplace( FullFileName , ''/.[^.]+$'' , '''' ) />


Esto podría no ser perfecto, es posible que tenga un archivo que tenga un. pero no se considera una extensión; puede resolverlo utilizando una lista de extensiones conocidas para eliminar, o limitando la extensión que aceptará (por ejemplo, hasta 5):

<cfset FileName = rereplace( FullFileName , ''/.(jpg|png|gif|bmp)$'' , '''' ) /> <cfset FileName = rereplace( FullFileName , ''/.[^.]{1,5}$'' , '''' ) />

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?


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 que Coldfusion tenga una función de búsqueda que funcione al revés, así que primero invierta la secuencia:

<cfset Position = Find(".", Reverse(FullFileName))>

Si eso devuelve cero, entonces no tiene una tapa completa en el nombre del archivo, así que maneje apropiadamente. De lo contrario ...

<cfset Filename = Left(FullFileName, Len(FullFileName) - Position>


Use las funciones de Lista para su ventaja.

<cfset FileName = ListDeleteAt(FileFullName, ListLen(FileFullName, "."), ".")>

Tenga en cuenta que esto solo funciona para 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 desea explicar todo esto, probablemente deba renunciar a una expresión reguar:

<cfset FileExtRe = "(?:/.(?:doc|xls|ppt|jpg))?$"> <cfset FileName = REReplaceNoCase(FileExtRe, FileFullName, "")>

Para dividir el nombre de archivo de la ruta, ColdFusion proporciona distintas funciones que también manejan las diferencias de plataforma: GetFileFromPath() y GetDirectoryFromPath()


A partir de ColdFusion 9+ (quizás antes, pero no puedo verificarlo), se incluyó la biblioteca de 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"


La respuesta de Tomalak es buena, 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 para su ventaja, incluso en estos escenarios.

Puede analizar fácilmente el archivo de la ruta con

fullFileName=listLast(fieldname,"//")

Si asumes que el nombre del archivo es todo antes del punto, entonces

theFileName=listFirst(fullFileName,".")

trabajará.

Si quiere asegurarse de obtener todo, pero lo que está 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 busca.

fileName=reverse(listRest(reverse(fullFileName),"."))

o

fileName=listDeleteAt(fullFileName,listLen(fullFileName,"."),".")

Al igual que con la sugerencia de Tomalak, sin embargo, esto se descompondrá en un nombre de archivo que carece de una extensión. Envolver esto en un <cfif listLen(fullFileName,".") GT 1> será <cfif listLen(fullFileName,".") GT 1> de eso.