2017-09-13 60 views
-2

在互联网上有类似或相同的问题,但答案不适用于我。我们开发了多平台产品,它在Delphi的编译器和FPC下编译。 首先,我用:Object Pascal如何在Delphi编译器和FPC中查找字符是字母数字还是下划线?

Uses: 
    System.Character; 

Character.TCharacter.IsLetterOrDigit(..) 

,但它不能FPC下进行编译,所以要根据其他来源,我用:

Uses: 
    Character; 

TCharacter.IsLetterOrDigit(..) 

代替,但仍然不能在FPC下编译。

有人能找到一种方法,代码将在Delphi编译器和FPC上工作?我没有将FPC设置为与我的项目一起工作,所以我无法自己弄清楚,如何修复代码以在FPC中工作(我可以通过构建服务器以复杂的方式对其进行测试),并且可以'找一个办法,怎么做。

我也想用正则表达式编写,但同事们说,这对他们来说太复杂了。

+1

我会在独立的单元中创建自己的函数并使用'{$ IFDEF FPC}'在Delphi和FPC实现之间进行分支。 – Victoria

+0

是的,我会使用类似if( in ['0'..'9','a'..'z','A'..'Z','_']),但同事们说,必须有一些功能可以更加整洁(并且可以在更多地方重复使用)。我只关心ASCII顺便说一句。我不想创建一个新的功能,因为我真的认为它已经写好了。 –

+0

你不明白维多利亚说什么。你的新功能不会完成这项工作。它只是有条件地调用Delphi和FPC的库方法。在这样做时,它提供了一个平台独立的界面。 –

回答

6

Delphi和FPC都包含一个名为TCharacter的类,该类将公开一个名为IsLetterOrDigit的方法。换句话说,你的问题的前提是错误的。使用TCharacter.IsLetterOrDigit是完全合理的。

文档链接:

这是完全有可能的,为什么你的代码没有,你目前使用的的FPC的最新版本,这可以解释。虽然这是猜测,因为您没有包含错误消息的任何细节。

+0

我意识到,我们的构建服务器有一些奇怪的配置,我做了不同的方式,如['0','9','a','z','A','Z','''''''''''''''', _'],因为无论如何,我的同事不想使用TCharacter,这是一个较小的邪恶。谢谢。 –

+0

在Delphi中,'in ['0'..'9','a'..'z','A'..'Z','_']'表达式不能正常工作,如Delphi,Char映射到WideChar,并且集合只能包含0..255个值,因此不包含WideChars。无论您的同事因不明原因而不想使用它,而是使用'TCharacter'。 –

+0

FWIW,'Tcharacter ...弃用'使用TCharHelper';'在XE7的帮助下,没有早点检查。 –

相关问题