2010-11-05 10 views
0

Y a-t-il une fonction comme la sous-chaîne PHPs? J'ai vu Gauche et Mi mais tous ceux-ci me font spécifier la longueur de ce que je veux que la chaîne soit.Fonction de sous-chaîne semblable à la fonction PHP?

Voici l'exemple de fonction de PHP: $ rest = substr ("abcdef", 1); // renvoie "b"

Je veux juste pouvoir prendre une chaîne et la démarrer à un certain point, pas la terminer aussi bien.

+0

Ne serait pas substr ("abcdef", 1); retourne "bcdef"? – mbeckish

+0

Je ne connais pas php, mais d'après les docs que j'ai cherché, substr ('abcdef', 1); renvoie 'bcdef': http://php.net/manual/fr/function.substr.php Donc, il agit exactement comme Mid() de CF. Peut-être tort, tho –

+0

@Edward M Smith - Pas exactement la même chose. Mid a le paramètre count. Avec substr de PHP, vous n'avez pas besoin de lui dire combien de caractères à saisir. – mbeckish

Répondre

4

Puisque les chaînes des FC sont des chaînes java, vous pouvez utiliser les fonctions de chaîne java

<cfset foo="abcdef"> 
<cfoutput>#foo.substring(1)#</cfoutput> 

returns: 'bcdef' 

Ou, i f ne vous plaît pas, vous pouvez le faire (pas élégant, mais fonctionnel):

mid(foo,2,len(foo)) 
+0

Je ne vois pas quel est le problème avec l'utilisation de ce dernier exemple. Si vous allez avec la sous-chaîne java(), assurez-vous de comprendre ses différences par rapport à la fonction MID de CF (index basé sur 0, index inclusif/exclusif, etc.) – Leigh

+0

Merci Edward! C'est ce dont j'avais besoin. – Darren

1

De substring in coldfusion:

Try

Left(string, length) //returns number of characters defined by length 

ou

Mid(string, start, count) //returns the set of characters from string, beginning at start, of length count. 
+0

Veuillez lire la question. Vous devez spécifier une longueur dans ceux-ci, ce qui est nul, et il devrait y avoir une fonction dans ColdFusion où vous n'avez pas à le faire. – Darren

+0

J'aimerais changer de nombreux aspects de plusieurs langages/frameworks, mais parfois vous devez travailler avec ce que vous avez. Juste essayer d'aider, l'homme ... –

0

CFLib.org est la collection awesomest des fonctions définies par l'utilisateur.

Il y a une UDF qui fait exactement ce que vous voulez: SubStr

Il imite le comportement de php « substr », enfermant le milieu, à gauche et fonctionnalités à droite dans une seule fonction et en ajoutant quelques extra-fonctionnalité et astuce. Pour instance: - substr ("abcdef", -2) est le même que le droit ("abcdef", 2), - substr ("abcdef", 1, 3) est le même que gauche ("abcdef" , 3), - substr ("abcdef", 2, 4) est le même que mid ("abcdef", 2, 4) Dans le même temps, il permet les choses comme - substr ("abcdef", 2) au lieu de mid ("abcdef", 2, len ("abcdef") - 2) - substr ("abcdef", -2, 1) pour dire "commencer 2 caractères avant la fin de la chaîne, et de prendre 1 car. " - substr ("abcdef", -4, -1) pour dire "commencer 4 caractères avant la fin de la chaîne, et jeter le dernier caractère." Il renvoie une chaîne vide en cas d'index incohérents.

est ici la source:

<cfscript> 
/** 
* Returns the substring of a string. It mimics the behaviour of the homonymous php function so it permits negative indexes too. 
* 
* @param buf  The string to parse. (Required) 
* @param start  The start position index. If negative, counts from the right side. (Required) 
* @param length  Number of characters to return. If not passed, returns from start to end (if positive start value). (Optional) 
* @return Returns a string. 
* @author Rudi Roselli Pettazzi ([email protected]) 
* @version 2, July 2, 2002 
*/ 
function SubStr(buf, start) { 
// third argument (optional) 
var length = 0; 
var sz = 0; 

sz = len(buf); 

if (arrayLen(arguments) EQ 2) { 

     if (start GT 0) { 
     length = sz; 
     } else if (start LT 0) { 
     length = sz + start; 
     start = 1; 
     } 

} else { 

     length = Arguments[3]; 
     if (start GT 0) { 
     if (length LT 0) length = 1+sz+length-start; 
     } else if (start LT 0) { 
     if (length LT 0) length = length-start; 
     start = 1+sz+start; 

     } 
} 

if (isNumeric(start) AND isNumeric(length) AND start GT 0 AND length GT 0) return mid(buf, start, length); 
else return ""; 
} 
</cfscript>