4

最大 20 単語の文字列があります。ユーザーが 20 語を超える何かを入力した場合、文字列を 20 語目で切り詰める必要があります。これをどのように自動化できますか? #GetToken(myString, 20, ' ')# で 20 番目のトークンを見つけることができますが、左トリムするためにその位置を見つける方法がわかりません。何か案は?前もって感謝します。

4

4 に答える 4

8

UDF ListLeft()は、必要なことを行う必要があります。リストを受け取り、定義した要素の数を含むリストを返します。区切り文字は「スペース」で構いません。

/**
 * 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 (rbils@amkor.com) 
 * @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;
}

ps CFLIB.org は優れたリソースであり、通常、このようなものを探しているときに最初に立ち寄ります。強くお勧めします。

于 2009-07-21T17:55:42.733 に答える
2

Can also use a regular expression (group #1 contains match): ^(?:\w+\s+){19}(\w+)

于 2009-07-21T18:05:31.170 に答える
0

CF がこれを提供するかどうかはわかりませんが、通常は LastIndexOf(string token) メソッドがあります。部分文字列関数と組み合わせて使用​​します。例 (疑似コード):

string lastWord = GetToken(myString, 20, ' ');
string output = Substring(mystring, 0, LastIndexOf(mystring, lastWord)+StrLength(lastWord));
于 2009-07-21T17:53:34.487 に答える
0

おそらく、トリミングを避けて、代わりに結果を最初から再構築することができます (疑似コード、ColdFusion はわかりません):

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

それはうまくいくでしょうか?

于 2009-07-21T17:51:00.403 に答える