2011-03-07 57 views
1

我知道這是用其他語言編寫的,但是想看看是否有現有的代碼/函數。在Coldfusion中是否有函數從字符串中獲取兩行文本?

這個字符串可以從許多不同的查詢來填充,但他們需要的所有顯示的同樣的方式,同樣的長度等

我有一個函數,來控制字數字符串長度,但我寧願確保我至少有2句話或2行文字。

感謝

+0

在哪裏你的「線」所呈現?在我看來,最簡單的方法就是選擇任意數量的角色並進行遊戲,直到您找到正確的角色。 – Groovetrain 2011-03-07 18:00:20

+1

尤利西斯有一句4300字。至於線條,究竟是多久?選擇一個目標字符數,然後添加一些邏輯前進或後退以避免單個字的截斷,再加上一個省略號。 – 2011-03-07 18:05:06

+0

如果少於2行顯示在我們的搜索結果頁面中,那麼要麼是2個句子。這是用於搜索結果的,以便找到的項目的描述不超過2行。我估計約190個字符。 – crosenblum 2011-03-07 18:07:29

回答

1

我在我的工作上有類似的任務,你必須選擇一個任意數字,而且看起來你已經選擇了190.這就是說,你不能只是希望返回的字符/單詞是相關。你必須確保他們是如果它的東西你關心,這似乎你看你的意見。

嘗試找到字符串中的關鍵字,並使用MID()函數來獲得關鍵字兩側的一定數目的字符:

<cfscript> 
    max_chars = 190; 
    full_article = #the full article#; 
    keyword_position = find(keyword, full_article); 

    if(keyword_position != 0) { 
    excerpt = mid(full_article, 
     keyword_position - max_chars/2 - len(keyword_position)/2, 
     max_chars); 
    } 
</cfscript> 

...或者類似的東西。我會把它留給你,以確保你不會在full_article開始之前或結束之後獲取字符,並添加省略號和內容。

+0

這工作,非常好的工作。我希望這種代碼位於cflib.org,因爲基於字的函數很難找出並且很少見。 – crosenblum 2011-03-08 17:20:38

0

嘗試像fullLeft,或者通過在CFLib的other string manipulation UDF的挖掘。如果你正在尋找更具體的東西,你可以向我們展示另一種語言的類似功能,我們可以更好地向你指出類似的東西。

+0

我應該補充說,如果您沒有完全控制輸入字符串,那麼您所做的任何工作都不會完成100%的工作。加上現代字體不是等寬的(每個字符不佔用相同的水平空間),所以左(「這是一個句子」,20)可能按照需要呈現,而左(「這是另一個句子」,20)可能不會。還要小心,當試圖保持字邊界(如上面的fullLeft udf),因爲「fullLeft(」this_is_a_sentence「,10)」可能不會按照期望行事。 – 2011-03-07 18:32:20

0
_TestString = "I know this works in other languages, but wanted to see if there is existing code/functions. This string can be populated from numerous different queries, but they need to be"; 
if (len(_TestString) GT 190) 
{ 
    _TestString = Left(_TestString,190) & "..."; 
} 

將輸出:

我知道這個作品在其他語言,但想看看是否有現有的代碼/功能。該字符串可以從許多不同的查詢來填充,但他們需要的所有顯示的...

你可能不希望做任何事情還不止這些,字符串操作可以得到昂貴沒有理由,你除非必須,否則不應該在顯示層上浪費處理。

+0

但是當你這樣做時會發生什麼:left('my short string',190)&'...'?你不會想要添加一個橢圓,除非有截斷... – 2011-03-07 19:11:14

+0

託德,你是對的。我沒有試圖提供完整的解決方案,只是幫助我的語法,但我同意。根據您的評論進行編輯。 – 2011-03-07 19:20:08

+0

我以前用過類似的東西。它獲得了190個正確的字符,但不一定是最相關的字符。但那不是你的錯。 – crosenblum 2011-03-08 14:32:46

0

CFLIB提供了大量的字符串操作函數。您可能會發現縮寫()是有用的,特別是對於搜索結果:http://cflib.org/udf/abbreviate

<cfscript> 
/** 
* Abbreviates a given string to roughly the given length, stripping any tags, making sure the ending doesn't chop a word in two, and adding an ellipsis character at the end. 
* Fix by Patrick McElhaney 
* v3 by Ken Fricklas [email protected], takes care of too many spaces in text. 
* 
* @param string  String to use. (Required) 
* @param len  Length to use. (Required) 
* @return Returns a string. 
* @author Gyrus ([email protected]@norlonto.net) 
* @version 3, September 6, 2005 
*/ 
function abbreviate(string,len) { 
    var newString = REReplace(string, "<[^>]*>", " ", "ALL"); 
    var lastSpace = 0; 
    newString = REReplace(newString, " \s*", " ", "ALL"); 
    if lenn(newString) gt len) { 
     newString = left(newString, len-2); 
     lastSpace = find(" ", reverse(newString)); 
     lastSpace = len(newString) - lastSpace; 
     newString = left(newString, lastSpace) & " &amp;##8230;"; 
    }  
    return newString; 
} 
</cfscript>