Q&A

  • 구분자로 짜르는 함수는 없나여?
aaachr(10)+chr(13)bbbchr(10)+chr(13)cccchr(10)+chr(13)ddd
이런식으로 데이타가 있을때여...
chr(10)+chr(13)를 기준으로 짤라서
aaa,bbb,ccc,ddd 이런 데이타만 배열어 넣어주려고 하거든여..
비베에서는 split 함수로 짤라주면 되던데...
델파이 에서는 어떻게 해야되나여?
검색해봐두 답이 잘 나오질 않네여..
만약 없다면 어떻식으로 해야될지...좀 가르쳐주세여..
그럼 좋은 하루들 보내세여..^^
4  COMMENTS
  • Profile
    고지범 2002.09.14 03:40
    일반적인 경우라면 - 가령 구분자가 #13, #10, #20 등 잘 알려진 구분자가 아니라면 - Copy, Pos(string 기준), 또는 메모리 비교 등이 정답일 거 같구요...
    지금 같이 #10, #13 이라면 2가지가 더 있겠네요...

    1. 위에 조강일님이 말씀하신 ExtractStrings 사용.
    2. TStrings.Delimiter, TStrings.DelimitedText 이용

    1번과 2번을 특수한 경우라고 말씀드리는 것은 내부코드에서 #10, #13을 이미 구분자로 사용하고 있기 때문입니다.

    아래는 예제입니다.

    procedure TForm1.Button4Click(Sender: TObject);
    const
       TEST_STR = 'aaa'#10#13'bbb'#10#13'ccc'#10#13'ddd'#10'eee'#10#13'fff'; // 데이터
       // 이 데이터에서 eee 전에는 #10만 있죠?
    var
       nIndex   :Integer;
       strOut   :String;
       tempList :TStringList;
    begin
       tempList := TStringList.Create;
       try
          try
                      ExtractStrings([#13, #10], [' '], TEST_STR, tempList);  //ExtractStrings([], [' '], TEST_STR, tempList); // 내부 코드로 보면, 두 문장은 서로 동일한 문장입니다.
             // ExtractStrings를 사용하시면 1,2번째 인자가 set of Char 이기 때문에 배열 형식으로 주셔야 하고요....
             // 4번째 인자는 TStrings 인데, TStrings 는 가상 클래스이기 땜시, 실지 구현이 들어있는 상속된 클래스의 인스턴스를 넣어 주어야 합니다.
             for nIndex := 0 to tempList.Count - 1 do
                strOut := strOut + tempList.Strings[nIndex] + #13#10;
             ShowMessage(strOut);

             tempList.Clear;
             strOut = '';

             //tempList.Delimiter   := Chr(10);
             //tempList.QuoteChar   := Chr(0);
             //tempList.DelimitedText := TEST_STR;
             tempList.Text := TEST_STR; // 물론 위 코멘트와 이 문장이 서로 똑같죠? 내부코드로 보면?

             for nIndex := 0 to tempList.Count - 1 do
                strOut := strOut + tempList.Strings[nIndex] + #13#10;
             ShowMessage(strOut);
          except
             exit;
          end;
       finally
          tempList.Free;
       end;
    end;


  • Profile
    조강일 2002.09.14 02:36
    var
      strs: TStrings;
    begin
      ExtractStrings([#13#10], [' '], 'aaa'#13#10'bbb'#13#10'ccc', strs);
    end;

    위와 같은 형식으로 사용합니다.
    물론 결과는 strs에 들어 오겠죠. ^^

  • Profile
    홍성락 2002.09.14 00:28
    hsr//////////////////////////////////////////////////////////////
    2가지 예입니다, 더 있겠지만...
    스트림과 Copy/Pos함수입니다.
    procedure TForm1.Button1Click(Sender: TObject);
    var
        s  : string;
        TS : Tstrings;
        i, index  : integer;
        ss : array[1..10] of string;
    begin
        s := 'aaa'+chr(10)+chr(13)+'bbb'+chr(10)+chr(13)+'ccc'+chr(10)+chr(13)+'ddd';
        TS := TStringList.Create;
        TS.Text := s;
        index := 0;
        for i := 0 to Ts.Count-1 do
           if TS[i] <> '' then begin
              inc(index);
              ss[index] := TS[i];
           end;
        TS.Destroy;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var
        s, TempS  : string;
        index  : integer;
        ss : array[1..10] of string;
    begin
        s := 'aaa'+chr(10)+chr(13)+'bbb'+chr(10)+chr(13)+'ccc'+chr(10)+chr(13)+'ddd';

        index := 0;
        while Pos(chr(10)+chr(13),S)> 0 do begin
             inc(index);
             ss[index] := copy(s,1,Pos(chr(10)+chr(13),S)-1);
             s := copy(s,Pos(chr(10)+chr(13),S)+2, Length(s));
        end;
        inc(index);
        ss[index] := s;
    end;
  • Profile
    이추형 2002.09.14 00:25
    copy명령어로 잘라주면 않될까요?

    Returns a substring of a string or a segment of a dynamic array.

    Unit

    System

    Category

    string handling routines

    function Copy(S; Index, Count: Integer): string;
    function Copy(S; Index, Count: Integer): array;

    Description

    S is an expression of a string or dynamic-array type. Index and Count are integer-type expressions. Copy returns a substring or sub array containing Count characters or elements starting at S[Index].

    If Index is larger than the length of S, Copy returns an empty string or array.

    If Count specifies more characters or array elements than are available, only the characters or elements from S[Index] to the end of S are returned.

    Note:        When S is a dynamic array, Copy can only be used as a parameter in a call to a procedure or function that expects an array parameter. That is, it acts like the Slice function when working with dynamic arrays.
    • 브래드
    • 2002.09.14 03:03
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김도성
    • 2002.09.14 02:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.09.14 17:44
      MS에서 제공하는 오라클용 드라이버가 있기는 하지만 벤더에서 맹근것 보다 더 좋을수는 없지 않을까요?
    • 브래드
    • 2002.09.14 01:40
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장재선
      2002.09.14 03:00
      간단하게 Form의 Properties에서 FormStyle을 fsStayOnTop으로 설정 하심 됩니당...
    • 김희곤
    • 2002.09.14 01:23
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 니야옹
      2002.09.14 01:55
      디폴트로 깔려있지는 않읍니다. 추가해주셔야되는데...델파이 디렉토리에서 bin및에 있는 dclqrt70.b...
    • 조창범
      2002.09.14 01:33
      델파이7에서는 퀵레포트가 없어지고 rave report라는걸로 바뀌었네여..그게 어떻게 사용하는건진..저두 봐...
    • 델퐁
    • 2002.09.14 01:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 델퐁
      2002.09.14 04:21
      잘못된 프린터로 연결되어 있을때 이런 에러가 뜨네요.쩝 준비된 프린터로 설정을 맞추어 주니 정상적으로...
    • 장재형
    • 2002.09.14 00:58
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.09.14 01:00
      안녕하세요. 최용일입니다. 컴포넌트에서 Owner가 하는 가장 큰 역활은 메모리에서 제거될 때 소유하고 ...
    • 장재형
      2002.09.14 01:55
      짬을 내서 좀 도와 주세요.. 즐코를 하고자하는 델 초보가. ①  inherited Create(AOwner); ...
    • 이추형
      2002.09.14 01:06
      질문이 애매모호 합니다. TDataBase의 Connected 가 True인지, TQuery의 Active가 True인지 확인해 주십...
    • 김희곤
      2002.09.14 01:21
      네.. 일단 감사합니다.. 위의 내용은 DBgrid 에서의 기본적으로 들어가야 되는사항인거 잘 알고있습니다...
    • 홍성락
      2002.09.14 05:46
      hsr///////////////////////////////////////////////////////// 버그는 아니구요 델파이 컴파일러의 특성...
    • 이추형
      2002.09.14 00:34
      procedure TForm1.Button1Click(Sender: TObject); var   loop : integer; begin  &nbs...
    • 스말(^___^)
      2002.09.14 01:53
      소스를 올려볼께요..아무리 확인해봐도 0으로 초기화가 않되고 있습니다..ㅡㅡ;; for nLoop := 0 to 10...
    • 최용일
      2002.09.14 00:28
      안녕하세요. 최용일입니다. 흠~ 어디에서 초기화를 해주었죠? 그런 코드가 없네요... for문돌기 전에...
    • 스말(^___^)
      2002.09.14 00:48
      for문 전에는 쓴적이 없어요 선언하고 다음처럼 for문에서 쓴게 첨이거든요.. 그리고 for문에서 0으로 초...
    • 김일영
      2002.09.14 00:57
      for문 안에서 쓰신게 맞으신가요--. 아시고 계실 것으로 생각합니다만 for문 제어변수는 for문이 종료하...
    • 김해우
      2002.10.23 03:41
      그냥가기가 뭐해서 델파이 4는 98, NT까지만 지원합니다. 델파이 5나 6으로 설치하시면 에러가 나...
    • 라지훈
    • 2002.09.14 00:20
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김영남
      2002.09.14 00:27
      델파이의 컴포넌트들중 Containner (<-영어 맞나?) 성 컴포넌트의 property중에 controlcount라고 있...
    • 이추형
      2002.09.14 00:20
      함수를 새로 냉글어야 하나? procedure TForm1.Button1Click(Sender: TObject); var   I,ii: ...
    • 최용일
      2002.09.14 00:17
      안녕하세요. 최용일입니다. 걍 100더하세요... RandomNum := Random(400) + 100; 0-400까지 발생...
    • 김동완
    • 2002.09.13 23:38
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 고지범
      2002.09.14 03:40
      일반적인 경우라면 - 가령 구분자가 #13, #10, #20 등 잘 알려진 구분자가 아니라면 - Copy, Pos(string 기...
    • 조강일
      2002.09.14 02:36
      var   strs: TStrings; begin   ExtractStrings([#13#10], [' '], 'aaa'#13#10'bbb...
    • 홍성락
      2002.09.14 00:28
      hsr////////////////////////////////////////////////////////////// 2가지 예입니다, 더 있겠지만... ...
    • 이추형
      2002.09.14 00:25
      copy명령어로 잘라주면 않될까요? Returns a substring of a string or a segment of a dynamic array. ...
    • 나옹이
    • 2002.09.13 23:24
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 조덕진
      2002.09.14 01:41
      안녕하세요. 최용일입니다. BLOB필드에 파일을 저장하고 불러오는 팁입니다. If you develop a database ...
    • 김수경
      2002.09.15 00:42
      고생이 많으신 것 같네염 ^^; 메모만 띄울 생각이라면 net send를 사용해 보세요. 명령 프롬프트(...
    • 이대희
    • 2002.09.13 20:42
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 장재형
    • 2002.09.13 20:35
    • 0 COMMENTS
    • /
    • 0 LIKES