2014-03-02 32 views
0

我試圖存儲一個ID號碼,甚至一個電話號碼作爲一個整數值有點麻煩。如何將ID號碼或電話號碼存儲爲整數而不出錯?

這是香港專業教育學院的嘗試:

begin 
    InfoFile := TStringList.Create; 


    ID := StrToInt(edtID.Text); 
    PhoneNumber := StrToInt(edtPhone.Text); 

我不斷獲取***** is not a valid integer value。首先,我知道這個數字對於整數值來說太大了,是否有辦法壓縮或以某種方式變小?或者我應該不使用它作爲變量?我真的不知道我是否有太多意義。

任何意見將不勝感激!

+1

許多國家都有這麼多['不同的約定](http://en.wikipedia.org/wiki/National_conventions_for_writing_telephone_numbers),我不會將電話號碼存儲爲數字值。但這取決於您是否想在您的國家以外使用您的應用程序,以及您的國家/地區使用的電話號碼公約是什麼。 – TLama

+0

似乎你在使用64位整數的答案。只是不要指望它可以在全球範圍內工作,因爲你永遠無法將該整數解碼爲適用於某個國家的格式(除非您還存儲該電話的國家/地區)。此外,您不應該在該字段上設置唯一的約束,因爲您可能會將來自不同國家/地區的兩個數字編碼爲相同的64位整數(假設您將其存儲到數據庫)。 – TLama

+0

@TLama,感謝評論,只是將它用於本地存儲在一個文本文件中。如果它應該在數據庫上工作,它應該在文本文件中工作嗎? –

回答

2

很明顯,您無法壓縮電話號碼。壓縮必須是可逆的。如果你可以壓縮數字,例如,你可以存儲32位的40位值,那麼你的壓縮將不可逆。有不同的值可存儲在32位值中。如果有多個不同的電話號碼,則壓縮不可能有幫助。

如果您必須以整數形式存儲,最合適的解決方案可能是將該數字存儲爲64位整數​​。使用StrToInt64從字符串轉換。可以存儲在64位整數中的最大值是9,223,372,036,854,775,807

在嘗試撥打StrToInt64之前,您將顯然需要清理字符串。你需要刪除空格,連字符等。你確定你可以將數字存儲爲一個整數。例如,我可能會寫一個英國電話號碼爲+44 151 876 2765。你會怎麼做+

因此,雖然Int64爲您提供了更多的範圍,但您可能希望考慮值是否會更好地存儲在字符串中。

+0

StrToInt64就像一個魅力!多謝,夥計。我的問題(例如'+ ***'的電話號碼的例子是我也有一個Date TEdit,用戶輸入他加入的日期。所需的日期格式是'(yyyy/mm/dd) '所以舉例來說,如何將'2009/09/01'轉換爲Integer或Real或者什麼? –

+1

使用'StrToDate'將字符串轉換爲日期。當然,當你考慮所有的可能的格式請確保使用接受格式設置變量的'StrToDate'的重載 –

+0

好吧,看到它只接受一種日期格式,我可以在日期的TEdit旁邊放置一個標籤,通知用戶不管怎樣,我如何將/日期分配給一個變量?Date:Date或Date:Integer',Im與delphi7相當新 –