2014-03-02 3 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 비트 정수로 인코딩 할 수 있으므로 해당 필드에 고유 한 제약 조건을 넣으면 안됩니다 (DB에 저장한다고 가정). – TLama

+0

@TLama, 의견을 주셔서 감사합니다, 그냥 로컬 텍스트 파일에 저장하는 데 사용 .. 만약 DB에서 작동해야합니다, 그것은 텍스트 파일에서 작동해야합니까? –

답변

2

전화 번호를 압축 할 수 없다는 것은 분명합니다. 압축은 되돌릴 수 있어야합니다. 예를 들어, 32 비트에서 40 비트 값을 저장할 수 있도록 숫자를 압축 할 수 있다면 압축은 되돌릴 수 없습니다. 32 비트 값에 저장할 수있는 2 개의 값은 입니다. 전화 번호가 다른 경우 압축하면 도움이되지 않습니다.

아마도 가장 편리한 해결책은 정수로 저장해야하는 경우 숫자를 64 비트 정수로 저장하는 것입니다 (Int64). 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'을 정수 또는 실수로 변환하는 방법은 무엇입니까? –

+1

'StrToDate'로 문자열을 날짜로 변환합니다. 물론 모든 것을 고려할 때 이것은 지뢰밭의 일부입니다. 가능한 포맷들. 포맷 설정 변수를 받아들이는'StrToDate'의 오버로드를 사용하는지 확인하십시오. –

+0

좋아요. 하나의 날짜 형식 만 허용하므로, 날짜에 대한 TEdit 옆에 레이블을 붙여 사용자에게 알릴 수 있습니다 어쨌든/날짜를 변수로 지정하는 방법은 무엇입니까? 'Date : Date' 또는'Date : Integer', delphi7에서 상당히 새로움 –

관련 문제