2012-10-31 31 views
2

嗨,我是Crystal Reports中的新成员,我正在使用Crystal Reports 2008,我想知道如何删除字符串中的字母字符,并且只保留数字。有这个功能吗?删除Crystal Report中的字母

例如:点231 /点323/USP 342 输出:231/323/342

谢谢, Captain16

+0

你有没有考虑过使用正则表达式? – craig

+0

你使用什么数据库? – craig

回答

3

使用以下公式

stringvar str; 
stringvar str1; 
numbervar counter; 
numbervar leng; 

leng := len({Your_Field}); 
if leng>0 then 
(
    for counter := 1 to leng do 
    (
     If (Mid({Your_Field}, counter, 1)) in "a" to "z" Then 
     (
      str1:=str1 + Mid({Your_Field}, counter, 1) 
     ) 
     else 
     (
      str := str + Mid({Your_Field}, counter, 1) 
     ) 
    ); 
str 
) 


这里str将得到非字母,而str1将只给出您给定字符串中的字母。 {Your_Field}可以是你的字段或包含字符串的参数。并通过打印str字母可以删除...

231/323/342这是我得到您输入的输出!

希望这会有所帮助,尝试并找回结果!

+0

哇,它的作品!非常感谢.. – Captain16

+0

这就是我的荣幸! –

0

对不起,我不能评论哈里哈兰Anbazhagan的代码(我没有足够的声誉,似乎)。这是很好的代码,但我会添加LCASE来捕捉所有的字母。

If LCASE(Mid({?sample}, counter, 1)) in "a" to "z" Then 

如果您只想识别数字,还有一个IsNumeric()函数。

+0

感谢您的好建议!但默认情况下,我的代码删除大写字母。提问人员Captain16只想从给定的字符串中只删除字母。因此可以通过我的代码来实现。但是,你可以帮助我在'a'到'z'中的If(Mid({Your_Field},counter,1))中添加'NOT'然后'代码?不必要的我使用其他情况,因为我不能'如果'中使用'NOT'。 –

+1

我有机会尝试你的代码......很好!我不知道它理解大小写。我想如果你想摆脱ELSE,你可以在“a”到“z”中做'If NOT(Mid({Your_Field},counter,1))然后'。但我认为你很好,你可以看到你删除了什么。 –