Crystal reports Crystal Reports查找字符串的前3个单词

Crystal reports Crystal Reports查找字符串的前3个单词,crystal-reports,Crystal Reports,我有一个数据库字段,字符串如下 oh the sea OToole was right I like ramen but Rowing like a Blue but not an artist 它们是用空格隔开的实际单词 我想找出前3个单词的摘录 结果如下所示 oh the sea I like ramen Rowing like a 我尝试了以下方法 ExtractString({tbname.field1},""," ") & " " & ExtractStri

我有一个数据库字段,字符串如下

oh the sea OToole was right
I like ramen but
Rowing like a Blue but not an artist
它们是用空格隔开的实际单词

我想找出前3个单词的摘录

结果如下所示

oh the sea 
I like ramen 
Rowing like a 
我尝试了以下方法

 ExtractString({tbname.field1},""," ") & " " & ExtractString({tbname.field1}," "," ") & ExtractString({tbname.field1},"   "," ")
它对前两个字段有效,但对第二个字段无效

我也试过下面的那个

split({tbname.field1}, " ")[1] & " " & split({tbname.field1}, " ")[2] 
& " " & split({tbname.field1}, " ")[3] 
它给了我一个错误,即指示符必须介于1和数组大小之间


任何见解都非常受欢迎

**编辑以反映数据包含在一行中,而不是三行中

尝试:


**编辑以反映数据包含在一行中,而不是三个单独的行中

尝试:

如果ubound(Split({tbname.field1}))<3则
Join(Split({tbname.field1})[1到ubound(Split({tbname.field1}))],“”)
else连接(拆分({tbname.field1})[1到3],“”)
如果ubound(拆分({tbname.field1}))<3则
Join(Split({tbname.field1})[1到ubound(Split({tbname.field1}))],“”)
else连接(拆分({tbname.field1})[1到3],“”)

我正考虑创建一个sql命令来实现这一点……但更糟糕的是,我需要创建函数等等-_-我知道只有两个字段,所以你得到的是errorHi@Siva,你说的是哪两个字段?你正在分割和检索数据,但你得到了错误。当你试图检索比Array中的项目更多的项目时,会出现错误。我正在考虑创建一个sql命令来实现这一点…但这似乎更糟,因为我需要创建函数等-_-我只有两个字段,因此您得到的是errorHi@Siva,您正在谈论的是哪两个字段?您正在拆分和检索数据,但您得到的是错误..当您尝试检索的项目多于阵列中的项目时,会出现该错误此条件实际上对我有效
ubound(拆分({tbname.field1}))<3或ubound(Split({tbname.field1}))>0
我试图编辑您的答案,但主管的“powers”没有看到合适的答案:)我看到了建议,但它不允许我批准。我想我没有足够的声誉!但是你可以改变你的答案:)(当然,如果你愿意的话)这个条件实际上对我有效
ubound(Split({tbname.field1}))<3或者ubound(Split({tbname.field1}))>0
我试图编辑你的答案,但是主管的“powers”没有看到它是合适的:)我看到了这个建议,但它不让我批准它。我想我没有足够的声誉!但是你可以改变你的答案:)(当然,如果你愿意的话)
// defined delimiter
Local Stringvar CRLF := Chr(10)+Chr(13);

// split CRLF-delimited string into an array
Local Stringvar Array rows := Split({Command.WORDS}, CRLF);

// the results of all the work
Local Stringvar Array results;

// process each 'row'
Local Numbervar i;
for i := 1 to ubound(rows) do (
  // increment the array, then add first 3 words
  Redim Preserve results[Ubound(results)+1];
  results[ubound(results)]:=Join(Split(rows[i])[1 to 3]," ")
);

// create CRLF-delimited string
Join(results, CRLF);
if ubound(Split({tbname.field1})) < 3 then
Join(Split({tbname.field1})[1 to ubound(Split({tbname.field1}))]," ")
else Join(Split({tbname.field1})[1 to 3]," ")