2010-01-27 17 views
5

que tienen una variable de cadena que ha de usuario dinámica introducido texto¿Cómo hacer delimitador de caracteres múltiples en Coldfusion para cfloop?

EX: - <cfset setPars="SPTO_DATE('04/11/2009 11:59:59 PM', 'MM/DD/YYYY HH:MI:SS AM')SP(L','MN)>'

Ahora Si uso SP como delimitador

en cfloop como a continuación

<cfloop index="i" from="1" To="#ListLen(setPars,'SP')#"> 
     <br/> #ListGetAT(setPars,i,'SP')# 
    </cfloop> 

soy obteniendo salida como

TO_DATE('04/11/2009 11:59:59 

M', 'MM/DD/YYYY HH:MI: 

Pero quiero como

TO_DATE('04/11/2009 11:59:59 PM', 'MM/DD/YYYY HH:MI:SS AM') 

(L','MN) 

¿Hay alguna manera en ColdFusion para hacer eso?

Gracias

Respuesta

11

no hay una directa forma de hacer esto. Sin embargo, hay un par de maneras diferentes de lograrlo.

Lo que suelo hacer es reemplazar el delimitador de caracteres múltiples con un solo carácter. Usualmente uso el timbre (chr (7)) porque no es tipable en un teclado estándar.

<cfset list = replace(setPars, 'SP', '#chr(7)#', 'all')> 

A continuación, puede recorrer más de la lista:

<cfloop list="#list#" index="i" delimiters="#chr(7)#"> 
    <br />#i# 
</cfloop> 

Nota al operador de bucle simple. Te ahorrará un poco de trabajo.

+2

utilizo CHR (30) (separador de registro) de la misma manera. Parece menos peligroso y el personaje fue diseñado para eso. Preferencia personal, supongo. – ale

+0

También hay 'ListChangeDelims'. Usando su ejemplo: '' – ale

+0

ListChangeDelims trata a "SP" como una lista de delimitadores "S" y "P" en su lugar. – approxiblue

0

no se utiliza el incorporado en List*() funciones, no. Todos ellos tratan el argumento del delimitador como un conjunto de caracteres, en lugar de una cadena literal. Pero puede, por supuesto, usar las funciones de cadena regulares (por ejemplo, Find(), Mid(), etc.) para realizar el análisis usted mismo.

Además, por lo que vale la pena, el bucle se puede escribir de forma más compacta (siempre y cuando no se preocupan por los índices numéricos de cada elemento de la lista) como:

<cfloop index="i" list="#setPars#"> 
    <br/> #i# 
</cfloop> 
2

Uso .split() función de su lugar.

Por ejemplo, se puede dividir una cadena por un delimitador de cadena como esta:

"string&^&string&^&string".split("&^&") 
+1

Solo tenga en cuenta 'split (regex)' acepta una expresión regular. Por lo tanto, debe escaparse de caracteres especiales, como el símbolo '^' en la expresión anterior, es decir 'theString.split (" & \^& ")'. Además, CF10 es compatible con [delimitadores de caracteres múltiples] (https://learn.adobe.com/wiki/display/coldfusionen/ListToArray) (¡finalmente!). – Leigh

Cuestiones relacionadas