我知道這是用其他語言編寫的,但是想看看是否有現有的代碼/函數。在Coldfusion中是否有函數從字符串中獲取兩行文本?
這個字符串可以從許多不同的查詢來填充,但他們需要的所有顯示的同樣的方式,同樣的長度等
我有一個函數,來控制字數字符串長度,但我寧願確保我至少有2句話或2行文字。
感謝
我知道這是用其他語言編寫的,但是想看看是否有現有的代碼/函數。在Coldfusion中是否有函數從字符串中獲取兩行文本?
這個字符串可以從許多不同的查詢來填充,但他們需要的所有顯示的同樣的方式,同樣的長度等
我有一個函數,來控制字數字符串長度,但我寧願確保我至少有2句話或2行文字。
感謝
我在我的工作上有類似的任務,你必須選擇一個任意數字,而且看起來你已經選擇了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開始之前或結束之後獲取字符,並添加省略號和內容。
這工作,非常好的工作。我希望這種代碼位於cflib.org,因爲基於字的函數很難找出並且很少見。 – crosenblum 2011-03-08 17:20:38
嘗試像fullLeft,或者通過在CFLib的other string manipulation UDF的挖掘。如果你正在尋找更具體的東西,你可以向我們展示另一種語言的類似功能,我們可以更好地向你指出類似的東西。
我應該補充說,如果您沒有完全控制輸入字符串,那麼您所做的任何工作都不會完成100%的工作。加上現代字體不是等寬的(每個字符不佔用相同的水平空間),所以左(「這是一個句子」,20)可能按照需要呈現,而左(「這是另一個句子」,20)可能不會。還要小心,當試圖保持字邊界(如上面的fullLeft udf),因爲「fullLeft(」this_is_a_sentence「,10)」可能不會按照期望行事。 – 2011-03-07 18:32:20
_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) & "...";
}
將輸出:
我知道這個作品在其他語言,但想看看是否有現有的代碼/功能。該字符串可以從許多不同的查詢來填充,但他們需要的所有顯示的...
你可能不希望做任何事情還不止這些,字符串操作可以得到昂貴沒有理由,你除非必須,否則不應該在顯示層上浪費處理。
但是當你這樣做時會發生什麼:left('my short string',190)&'...'?你不會想要添加一個橢圓,除非有截斷... – 2011-03-07 19:11:14
託德,你是對的。我沒有試圖提供完整的解決方案,只是幫助我的語法,但我同意。根據您的評論進行編輯。 – 2011-03-07 19:20:08
我以前用過類似的東西。它獲得了190個正確的字符,但不一定是最相關的字符。但那不是你的錯。 – crosenblum 2011-03-08 14:32:46
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) & " &##8230;";
}
return newString;
}
</cfscript>
在哪裏你的「線」所呈現?在我看來,最簡單的方法就是選擇任意數量的角色並進行遊戲,直到您找到正確的角色。 – Groovetrain 2011-03-07 18:00:20
尤利西斯有一句4300字。至於線條,究竟是多久?選擇一個目標字符數,然後添加一些邏輯前進或後退以避免單個字的截斷,再加上一個省略號。 – 2011-03-07 18:05:06
如果少於2行顯示在我們的搜索結果頁面中,那麼要麼是2個句子。這是用於搜索結果的,以便找到的項目的描述不超過2行。我估計約190個字符。 – crosenblum 2011-03-07 18:07:29