2009-07-21 6 views
4

Nous avons une chaîne qui a une limite maximum de 20 mots. Si l'utilisateur entre quelque chose de plus de 20 mots, nous devons tronquer la chaîne à son 20ème mot. Comment pouvons-nous automatiser cela? Nous sommes en mesure de trouver le 20ème jeton aveC#GetToken (myString, 20, '') #, mais nous ne savons pas comment trouver sa position afin de couper à gauche. Des idées? Merci d'avance.Comment trouver la position du nième jeton

Répondre

8

L'UDF ListLeft() devrait faire ce que vous voulez. Il prend une liste et renvoie la liste avec le nombre d'éléments que vous définissez. "Espace" est bien comme délimiteur.

/** 
* A Left() function for lists. Returns the n leftmost elements from the specified list. 
* 
* @param list  List you want to return the n leftmost elements from. 
* @param numElements  Number of leftmost elements you want returned. 
* @param delimiter  Delimiter for the list. Default is the comma. 
* @return Returns a string, 
* @author Rob Brooks-Bilson ([email protected]) 
* @version 1, April 24, 2002 
*/ 
function ListLeft(list, numElements){ 
    var tempList=""; 
    var i=0; 
    var delimiter=","; 
    if (ArrayLen(arguments) gt 2){ 
    delimiter = arguments[3]; 
    } 
    if (numElements gte ListLen(list, delimiter)){ 
    return list; 
    } 
    for (i=1; i LTE numElements; i=i+1){ 
    tempList=ListAppend(tempList, ListGetAt(list, i, delimiter), delimiter); 
    } 
    return tempList; 
} 

p.s. CFLIB.org est une ressource exceptionnelle, et c'est habituellement mon premier arrêt quand je cherche quelque chose comme ça. Je le recommande fortement.

0

Peut-être que vous pourriez éviter la coupe et au lieu de reconstruire le résultat à partir de zéro, quelque chose comme (pseudo-code, je ne sais pas ColdFusion):

result = '' 
    for (i = 0; i < 20; ++i) 
    { 
    result = result + GetToken(myString, i, ' '); 
    } 

Est-ce que ça marche?

0

Vous ne savez pas si CF fournit cela, mais il existe généralement une méthode LastIndexOf (token de chaîne). Utilisez cela combiné avec une fonction de sous-chaîne. Pour isntance (psuedocode):

string lastWord = GetToken(myString, 20, ' '); 
string output = Substring(mystring, 0, LastIndexOf(mystring, lastWord)+StrLength(lastWord)); 
2

peut également utiliser une expression régulière (groupe n ° 1 contient de jeu): ^(?:\w+\s+){19}(\w+)

Questions connexes