Q&A

  • String형에서의 Null값의 표현
안녕하십니까?
초짜라 맨날 묻기만 합니다.

일단 제가 구현하고자 하는 환경부터 설명을 드리겠습니다.

컴과 RS232로 개발 장비를 연결했구요, 델파이에서 Serial 데이타를 받는 컴 포넌트는 CPort262란걸 사용하여 데이타를 받고 있습니다.

그런데 문제는 CPort에서 받은 ASCII값을 String으로 Buffer에 저장했다가 Event를 발생시켜 읽어 가도록 하고 있습니다.

여기서 ASCII값을 String으로 돌려주는 과정에서 문제가 발생했는데,
개발 장비쪽에서 00(10진수)이란 데이터를 전송하게 되면 ASCII값으로 Null이 표현 됩니다.
String형의 특성상 Null은 없는 문자가 되고 다음에 들어오는 문자가 Null이 저장되어야할 자리에 저장이 됩니다.

한마디로 요약하자면
전 Null이라해서 표현 안하는게 아니라 ASCII Code값이 어떳턴간에 구애 받지 않고 00을 장비에서 전송했으면 다시 ORD란 함수를 이용하여 00이란 Integer형으로 바꾸고자 하는게 목적입니다.

제가 사용하고 있는 컴포넌트에서 돌려주는 형이 String형이라 이걸 어떻게 처리 해야 할까요? Null일경우 라도 00으로 저장이 되게 말이죠

팀좀 알려 주시면 감사하겠습니다........

모두들 즐거운 주말 되세요        *^^*

     ◇□  "/
     □ ◇□ ◇   시원한
     ┃아이┃   아이스티
     ┃스티┃ 한잔의 여유
     ┗━━┛◇□
1  COMMENTS
  • Profile
    한원희 2002.07.20 22:59


    그냥, 참고만 하세요.
    델파이의 String 형은 C 언어의 문자열형과는 다르게, 0(Null) 문자가 중간에
    와도 상관없도록 되어 있습니다. 이는 델파이의 문자열형이 문자열의 끝을
    인식하기 위해서 0 문자를 사용하는 것이 아니라, 문자열 앞에 따로 문자열의
    길이를 저장하고 있는 형태로 되어 있기 때문입니다.
    제각 생각하기에 스트링형 자체의 문자라기 보다는(왜냐하면, String의 길이를
    SetLength로 미리 충분히 잡아 주었다면, 장비에서 어떤 데이터를 보내던지
    받을 수 있다고 생각됩니다.) 사용하시는 컴포넌트의 문제인것 같습니다.
    컴포넌트에서 다른 데이터 없이 그냥 0을 받았을 경우, Null 을 반환하도록
    말입니다.
    컴포넌트 내에 데이터를 받는 다른 메소드(포인터 버퍼를 이용하는 등의)가
    있는 살펴보시고, 대체할 만한 다른 메소드가 있다면, 그 메소드를 사용하시고,
    대체할 메소드가 없다면, 이런 기능을 지원하는 컴포넌트를 사용해 보시는
    것이 좋을 것이라 생각됩니다.

    실제로 제가 Com 포트를 통한 프로그래밍을 해보질 못해서 더 자세한 설명은
    불가능 하겠네요... 어쩜 위의 답변도 허접한 것일 수도... -_-;;;

    혹은, 장비에서 받은 데이터가 Null 이면, 0 값을 대신 입력하도록 할 수도
    있지 않을까요???(하하.. 이건 답변이 아니라, 오히려 질문이 되어 버렸군요. ^^)
    • 델초^.^;
    • 2002.07.23 00:07
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최진아
    • 2002.07.22 22:05
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 깨구락지
      2002.07.22 23:51
      작성하신 텍스트에디터에서 파라메터값을 처리 하지 않으셨나보군요. 오픈할 화일이름을 파라메터로 전달...
    • 최진아
      2002.07.23 01:37
      제가 초보라서요.. 감사드립니다.
    • 최용일
      2002.07.23 01:58
      안녕하세요. 최용일입니다. 에디터에 화면을 띄우는 것은 님의 프로그램에서 해야 할 일입니다... 이...
    • byun
    • 2002.07.22 21:32
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이현철
      2002.07.22 23:16
      음, 저는 RX 컴포넌트팩에 있는거 쓰거든요.. 자료실에서 rx 로 찾아보세요~
    • 신석기
      2002.07.23 09:44
      이런방법도 있습니다. 간단히 ^^ procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;   ...
    • 홍성락
      2002.07.23 09:16
      hsr//////////////////////////////////////////////////////////////// 좀 어색하지만..... 아래처럼해...
    • 홍성락
      2002.07.23 22:51
      hsr/////////////////////////////////////////////////////////// 예로 2가지입니다(파일참조) 1.위에것...
    • 깨구락지
      2002.07.22 23:56
      exec('CREATE TABLE '+@User_id+'( USER_ID   VARCHAR(20) NOT NULL)')
    • 권수광
    • 2002.07.22 10:43
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한주영
      2002.07.22 16:29
      Midas2까지는 클라이언트당 라이센스수수료가 적용되었습니다. 즉 한서버에 동시에 5개의 클라이언트가 붙...
    • 조성배
    • 2002.07.22 04:08
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 임형호
      2002.07.22 08:59
      옆에 보시면 Delphi Tips 라는 메뉴보이시죠? 거기에서 검색단어를 한글이라고 하시면 .... 바로 뜨네요....
    • 한조연
      2002.07.22 19:39
      필터를 사용하시길 권합니다.
    • 임형호
      2002.07.22 09:18
      실제 Table에 있는 자료가 삭제되는것이 아니라.. Grid상에서만 삭제되도록 한다는 말씀이신가요? 음......
    • 김세형
    • 2002.07.21 09:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2002.07.22 00:34
      글쎄요... WM_COPY 메시지는 에디트 컨트롤이나, 콤보박스의 선택된 내용을 클립보드로 복사하라는 메시...
    • 신복호
    • 2002.07.21 09:34
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 임형호
      2002.07.21 21:37
      둘다 자료를 입력하는것인데요. 위치차이입니다. append는 맨뒤에... insert는 현재자료의 선택위치에......
    • 신복호
      2002.07.23 19:58
      답변 주셔서 감사합니다. 그런데, 말씀하신데 해 보았는데, Insert를 사용하였을 경우에는 에러가 나지 ...
    • 김병찬
    • 2002.07.21 09:22
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 임형호
      2002.07.21 21:57
      음.. 그냥 SQL문으로 비교하시면 안되나요? 가령 생성한 DB의 필드명을 이름=id 이고 패스워드가=pwd 라...
    • yaechan
    • 2002.07.21 03:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김호광
      2002.07.21 05:11
      답변입니다. 1. 비디오 메모리를 확인하십시오. 분명히 비디오 메모리가 적을 것입니다. -> Video...
    • 박지원
    • 2002.07.20 23:37
    • 3 COMMENTS
    • /
    • 0 LIKES
    • KDDG_sonic0
      2002.07.21 01:13
      혹시 open의 구문에서 sql문이 잘못된것은 아닌지 함 체크해 보세요.
    • 박지원
      2002.07.22 01:10
      BDE Administrator 에서 알리아스명에서 open 했을때 초록색 상자로 표시되잖아요.. 그때 에러가...
    • 홍성락
      2002.07.23 09:25
      hsr////////////////////////////////////////////// ODBC MDB로 생성해보세요 제어판에서 ODBC원본으...
    • 유영호
    • 2002.07.20 23:02
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2002.07.20 23:26
      현재 수행중인 창에서 다른 창을 종료하시려는 것 같군요... 그 다른 창이 Form1 인가 본데... Form1...
    • 변재두
    • 2002.07.20 22:57
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2002.07.20 22:59
      그냥, 참고만 하세요. 델파이의 String 형은 C 언어의 문자열형과는 다르게, 0(Null) 문자가 중간에 ...
    • 안복환
    • 2002.07.20 21:24
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2002.07.21 00:02
      hsr/////////////////////////////////////////////////////////////// 범위 초과시 문제인것 같습니다. ...
    • 초짜
    • 2002.07.20 20:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 임형호
      2002.07.20 22:21
      이름의 합을 구한다는건... 이름의 갯수를 구한다는건가요? 아님..가령 다른 필드가 있는데... 이름...