查找数字和字母以外的字符串中的字符

2020-08-20 09:11发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我已经对此进行了研究,但似乎找不到解决方法。

我们的经理和助理在创建新的公司产品ID时,可以使用字母,数字和破折号。 所以:

22ZXW-44

是有效的产品编号,但类似于

3#3.25 * 14

不是。

我想写一个报告,使我可以返回产品ID(如第二个示例),方法是检查该字段中除字母,数字和破折号之外的任何内容。

显而易见的答案似乎是某种形式的Contains或通过域ID遍历ProductID的for..each循环,根据字段的长度,逐个字符地测试字符是什么。 我不需要遍历整个字符串-任何无效字符都会标记该字段。

我希望这是有道理的。 有什么建议吗?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我已经对此进行了研究,但似乎找不到解决方法。

我们的经理和助理在创建新的公司产品ID时,可以使用字母,数字和破折号。 所以:

22ZXW-44

是有效的产品编号,但类似于

3#3.25 * 14

不是。

我想写一个报告,使我可以返回产品ID(如第二个示例),方法是检查该字段中除字母,数字和破折号之外的任何内容。

显而易见的答案似乎是某种形式的Contains或通过域ID遍历ProductID的for..each循环,根据字段的长度,逐个字符地测试字符是什么。 我不需要遍历整个字符串-任何无效字符都会标记该字段。

我希望这是有道理的。 有什么建议吗?

付费偷看设置
发送
3条回答
空代码
1楼 · 2020-08-20 09:32.采纳回答

如果可以的话,您可能想要在数据库中编写一个存储函数来执行此检查。 然后,您可以在报表的SQL表达式中使用它来过滤报表,以仅从数据库中检索您要查找的记录,而不是Crystal获取所有记录并在内存中进行处理。 如果数据库能够完成工作,它将更快。

如果您必须在Crystal中进行操作,我会执行以下操作(Crystal语法):

 Local NumberVar i:  = 1;
 本地号码Var len:= Length({MyField});
 找到本地BooleanVar:= false;
 共享的StringVar数组validChars;

//一次创建一个有效值数组,并在每次使用此公式时使用它
 如果OnFirstRecord然后
   validChars = ['-','0'到'9','A'到'Z];

//在字段中遍历字符串,然后确定字符是否有效。
 当我<= len而未找到时
 (
   在validChars中找到:= UpperCase({MyField})[i];
   我:=我+ 1;
 );
 找到

您将在存储的函数中使用类似的逻辑。

-Dell

吹牛啤
2楼-- · 2020-08-20 09:23

这里是具有类似逻辑的替代方法,该逻辑也允许使用小写字母。

本地号码var i:= 1;
 当我<= Length(myString)做(
   如果isnumeric(myString [i])
    或[65至90]中的AscW(myString [i])
    或[97至122]中的ASCW(myString [i])
    OR myString [i] ="-"然后i:= i + 1
 ELSE i:=长度(myString)+ 10);
//只有所有字符都正确的情况下才为真
 i =长度(myString)+1;
 
樱桃小丸子0093
3楼-- · 2020-08-20 09:45

另一个解决方案可以是(明确指定)或将其放入数组并在循环中使用InStr...。

如果InStr({table.field}  ,'*')> 0 OR
    InStr({table.field},'#')> 0或
    InStr({table.field},'。')
 .....
 ..... 
同时打印记录;
 Stringvar MyInput:= {yourproductid};
 numbervar计数器;
 对于Counter:= 1到len(trim(MyInput))do(
 如果asc(mid(MyInput,Counter,1))在[65至90]或//这是针对字母
    [48至57]中的asc(mid(MyInput,Counter,1))或//数字
    [97至122]中的asc(mid(MyInput,Counter,1))或//大写字母
    InStr({yourproductid},'-')> 0
 然后
 <您的产品代码还可以>
 );
 

致谢

Venkat

一周热门 更多>