Q&A

  • comma 로 txt 구분=> blank는 제외하려면?


txt정보를 comma로 구분해서  DB 각 필드로 입력하려고 합니다
그런데 string 길이가 일정치 않고 아래처럼

1번=>82000111,뉴코아 분당,,,,,ST,,,,,,,,,,,,뉴코아 분당    =>list[18]까지
2번=>82000222,신 림,,,,,ST,,,,,,,,,,,,신 림,,,,,02,999-1111  =>list[24]까지


List.commaText := S;

List.count 세어보면  1번이 18 ,  2번이 24개입니다


그런데 실제로는 한글로 된 string 정보가


'신 림' 이 1개 필드로 잡히지 않고 '신' 과 '림' 두 list[] 로 잡혀집니다

'뉴코아 분당' 이  '뉴코아'  와  분당'이 아닌
하나로 통째로 들어가게 하고 싶습니다


[대략소스]
while not Eof(F) do
    begin
      Readln(F, S);
            
      List := TStringList.Create;
      List.commaText := S;

       vdcd := List[0];   //코드
       vdnm := List[1];  //이름

       if list.Count > 20 then
              tel := List[23]+'-'+List[24];
       else
              tel := ' ';

      => 이 부분에서 24번째가 온전한 24번째가 안된다는 얘기입니다

          if copy(vdcd,1,3)='820' then     //820은 table2로 그외는 table1
          begin
            table2.Insert;   //shopfa        
            table2['ACD03_FACD'] := VDCD ;
            table2['ACD03_FANM'] := VDNM;
            table2.Post;
            S :='';
          end
          else
          begin      
            table1.Insert;  
            table1['ACD03_VDCD'] := VDCD ;
            table1['ACD03_VDNM'] := VDNM;
            table1.Post;
            S :='';
          end;
    VDCD :='';
    VDNM :='';
    end; // while  not eof do end




3  COMMENTS
  • Profile
    오익환 2003.09.27 03:41
    제가 주로 썼던 함수 입니다. 참고하세요

    //====================================================================
    function   String2Strings(value: string; SEPARATOR : char ): TStrings;
    //--------------------------------------------------------------------
    var lSTRS : TStringList;
    var i     : integer;
    var lSTR  : string;
    begin
      value:=value+SEPARATOR;
      lSTR :='';
      lSTRS:=TStringList.Create;
      for i:=1 to length(value) do
        begin
          if value[i]=SEPARATOR then
            begin
              lSTRS.ADD(lSTR);
              lSTR:='';
            end
          else
            begin
              lSTR:=lSTR+value[i];
          end;
      end;
      result:=lSTRS;
    end;
    //===================================================================

    이렇게 쓰시면....

            List:=String2Strings(S,',');  <---------요거

  • Profile
    남영 2003.09.27 04:25
    txt의 한 줄입니다...

    문제가 생긴것은
    10254,"ABCDEFG, INC.,",,,,,V,,,,,,,,,,,,"ADAPTECH, INC."
    => 인 경우 굵은 글자 부분에 , 와 " 를 구분을 못하고..

    어떤 것은 "ADAPTECH 까지 들어가구

    58674,"HANOS,CUSOU,S.A.",,,,,V,,,,,,,,,,,,,"HANOS,CUSOU,S.A.
    =>위의 문은 아예 읽어들이질 못합니다

    아궁 넘 답답하게 물어보나요.. O.o?!





    >제가 주로 썼던 함수 입니다. 참고하세요
    >
    >//====================================================================
    >function   String2Strings(value: string; SEPARATOR : char ): TStrings;
    >//--------------------------------------------------------------------
    >var lSTRS : TStringList;
    >var i     : integer;
    >var lSTR  : string;
    >begin
    >  value:=value+SEPARATOR;
    >  lSTR :='';
    >  lSTRS:=TStringList.Create;
    >  for i:=1 to length(value) do
    >    begin
    >      if value[i]=SEPARATOR then
    >        begin
    >          lSTRS.ADD(lSTR);
    >          lSTR:='';
    >        end
    >      else
    >        begin
    >          lSTR:=lSTR+value[i];
    >      end;
    >  end;
    >  result:=lSTRS;
    >end;
    >//===================================================================
    >
    >이렇게 쓰시면....
    >
    >>while not Eof(F) do
    >>    begin
    >>      Readln(F, S);
    >>            
    >>      List := TStringList.Create;
    >        List:=String2Strings(S,',');  <---------요거
    >
    >>   //   List.commaText := S;
    >>
    >>       vdcd := List[0];   //코드
    >>       vdnm := List[1];  //이름
    >>
    >>       if list.Count > 20 then
    >>              tel := List[23]+'-'+List[24];
    >>       else
    >>              tel := ' ';
    >>
    >>      => 이 부분에서 24번째가 온전한 24번째가 안된다는 얘기입니다
    >>
    >>          if copy(vdcd,1,3)='820' then     //820은 table2로 그외는 table1
    >>          begin
    >>            table2.Insert;   //shopfa        
    >>            table2['ACD03_FACD'] := VDCD ;
    >>            table2['ACD03_FANM'] := VDNM;
    >>            table2.Post;
    >>            S :='';
    >>          end
    >>          else
    >>          begin      
    >>            table1.Insert;  
    >>            table1['ACD03_VDCD'] := VDCD ;
    >>            table1['ACD03_VDNM'] := VDNM;
    >>            table1.Post;
    >>            S :='';
    >>          end;
    >>    VDCD :='';
    >>    VDNM :='';
    >>    end; // while  not eof do end
    >>
    >>
    >>
    >>
    >>
    >
  • Profile
    오익환 2003.09.27 05:32
    SEPERATOR를 꼭 Comma로 써야만 하는 게 아니라면 다른 것으로
    바꾸심이....
    일반적인 DATA는 없는 | 나 ^ 아님 Chr(28)등등 ...

    다시 맹글어 봅니다.

    //====================================================================
    function CommaString2Strings(value : string) : TStrings;
    //--------------------------------------------------------------------
    const QUOTE    = '"';
    const SEPERATOR= ',';

    var lSTRS  : TStringList;
    var i      : integer;
    var lSTR   : string;
    var lQUOTE : integer;

    begin
      lSTR:='';
      lQUOTE:=0;
      value:=value+SEPARATOR;
      lSTRS:=TStringList.Create;

      for i:=1 to length(value) do
        begin
          if      value[i]=QUOTE then
             begin
               inc(lQUOTE);
               if lQUOTE=2 then lQUOTE:=0;
             end
          else if (lQUOTE=0) and (value[i]=SEPERATOR) then
             begin
               lSTRS.ADD(lSTR);
               lSTR:='';
             end
          else
             begin
               lSTR:=lSTR+value[i];
          end;
      end;
      Result:=lSTRS;
    end;
    //====================================================================