2010-01-27 8 views
5

Ho un variabile String, che ha utente dinamica entrato testoCome creare un delimitatore a più caratteri in Coldfusion per cfloop?

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

Ora, se io uso SP come delimitatore

in cfloop come di seguito

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

Sono uscita come

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

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

Ma io voglio come

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

(L','MN) 

C'è un modo in Coldfusion per farlo?

Grazie

risposta

11

non c'è una diretta modo per farlo. Tuttavia, ci sono un paio di modi diversi per realizzarlo.

Quello che faccio di solito è sostituire il delimitatore multichararacter con un singolo carattere. Di solito uso la campana (chr (7)) perché non è tipabile su una tastiera standard.

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

Quindi, è possibile loop all'interno di una lista:

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

nota l'operatore ciclo semplice. Ti farà risparmiare un po 'di lavoro.

+2

Io uso CHR (30) (RECORD separatore) nello stesso modo. Sembra meno pericoloso e il personaggio è stato progettato proprio per questo. Preferenza personale, immagino. – ale

+0

C'è anche 'ListChangeDelims'. Usando il tuo esempio: '' – ale

+0

ListChangeDelims considera "SP" come una lista di delimitatori "S" e "P". – approxiblue

0

Non utilizzando il built-in List*() funzioni, no. Tutti trattano l'argomento delimitatore come un insieme di caratteri, piuttosto che una stringa letterale. Ma puoi, naturalmente, utilizzare le normali funzioni di stringa (ad esempio Find(), Mid(), ecc.) Per eseguire personalmente l'analisi.

Inoltre, per quel che vale, il ciclo può essere scritta in modo più compatto (fino a quando non si preoccupano gli indici numerici di ogni elemento della lista) come:

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

Utilizzare invece la funzione .split().

Ad esempio, è possibile dividere una stringa da un delimitatore di stringa come questa:

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

Ricorda che 'split (regex)' accetta un'espressione regolare. Quindi è necessario sfuggire a caratteri speciali, come il '' '' 'nell'espressione precedente, ad esempio' theString.split ("& \^&") '. Inoltre, CF10 supporta [delimitatori multi-carattere] (https://learn.adobe.com/wiki/display/coldfusionen/ListToArray) (finalmente!). – Leigh

Problemi correlati