2017-09-13 62 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的幫助下,沒有早點檢查。 –

相關問題