Q&A

  • 텍스트화일을 파라독스로 저장시킬때..필드수가 많다면..
안녕하십니까..!! 델초보입니다..!!^^

다름이 아니오라 텍스트 DB를 파라독스를 저장시킬때 궁금한게 있어서 이렇게 글을 올립니다...



텍스트 디비가 그러니까 자리수가 일정치 않게 들어올때..아래와 같이 적용을 시켜

보았습니다..!1 물론 고수님들의 Q/A 답변을 서치하다 찾았구요..!!

질문의 요지는 아래와 같이 DB 필드가 적을땐..이렇게 해도 상관 없을거 같습니다..!!(^^ 제 생각으론..^^)

근데..만약에 적용시키려는 필드가 44개 정도 된다면 아래와 같이 일일이 해야 하는지..

아님..다른 방법이 있는지..고수님들께..여쭤 볼려고 이렇게 글을 올립니다..!!

파라독스 디비에 한필드에 고정된 자리수는 있겠지만..텍스트 화일에 저장되어있는게..일정치 않다는 가정하에서 입니다..!!





procedure TForm1.Button1Click(Sender: TObject);

var F:TextFile;

Str_len, Pos1_len, Pos2_Len, Pos3_len, Pos4_len, Pos5_len, Pos6_len,i: Integer;

S,S1,S2,S3,S4,S5 : String;

begin

AssignFile(F, 'C:11.Txt');

Reset(F);

i := 0;

While Not eof(F) do begin

Readln(F,S);

i := i+1;



Str_len := length(S);

Pos1_len := Pos(',', s)-1;



S1 := Copy(S,Pos1_len+2,Str_len);

Pos2_len := Pos(',',Copy(S1,0, Str_len))-1;



S2 := Copy(S1,Pos2_len+2,Str_len);

Pos3_len := Pos(',',Copy(S2,0, Str_len))-1;



S3 := Copy(S2,Pos3_len+2,Str_len);

Pos4_len := Pos(',',Copy(S3,0, Str_len))-1;



S4 := Copy(S3,Pos4_len+2,Str_len);

Pos5_len := Pos(',',Copy(S4,0, Str_len))-1;



S5 := Copy(S4,Pos5_len+2,Str_len);

Pos6_len := Pos(',',Copy(S4,0, Str_len))-1;



SG1.Cells[0,i] := Copy(S,0,Pos1_len);

SG1.Cells[1,i] := Copy(S1,0,Pos2_len);

SG1.Cells[2,i] := Copy(S2,0,Pos3_len);

SG1.Cells[3,i] := Copy(S3,0,Pos4_len);

SG1.Cells[4,i] := Copy(S4,0,Pos5_len);

SG1.Cells[5,i] := Copy(S5,0,Pos6_len);



showmessage(SG1.Cells[0,i]);

showmessage(SG1.Cells[1,i]);

showmessage(SG1.Cells[2,i]);

showmessage(SG1.Cells[3,i]);

showmessage(SG1.Cells[4,i]);

showmessage(SG1.Cells[5,i]);

end;

end;

3  COMMENTS
  • Profile
    잘난체 2001.12.20 01:21
    수정 하신 부분이.... 자료를 읽었다가.... 그 자료를 스크링 그리드에 넣는 작업을

    보여 주신 것 같습니다....



    말씀 하신대로 필드 수가 많으면 그 필드수만큼을 반복해서 늘려 주셔야 합니다...

    그런데.... 이부분을 함수로 구성하시면 이부분을 해결할 수 있을것 같습니다...



    허접한 소스 이지만 한번 보십시요...





    function TFORM1.Check_Item(DataStr: String; DataCnt:Integer ): String;

    var

    i , j, ValueLen : Integer;

    tmp:String;

    begin



    i := 1;

    j := 0;



    ValueLen := Length(DataStr);



    while i < ValueLen do

    begin



    if DataStr[i] <> ',' then

    tmp:=tmp+ DataStr[i]

    else

    begin

    SG1.Cells[j,DataCnt]:=tmp;

    tmp:='';

    j:=j+1;

    end;

    i:=i+1;



    if i = ValueLen then

    SG1.Cells[j,DataCnt]:=tmp;



    end;

    end;





    전에 비슷한 모듈을 할때.. 이렇게 만든것 같습니다.... 한번 참조하셔서

    수정을 해보세요.....









    한번 해보세요... 잘 수정하시고요...





  • Profile
    Commom 2001.12.20 02:26
    진짜로..죄송합니다..!!귀찮게 해서요..!!ㅜ.ㅜ...

    소스는 아래와 같거든요..!!

    제가 게시물을 잘못 올린거 같습니다..

    이것도 다른 방법으로 가능한가요..?

    감사합니다...^^



    procedure TForm1.Button1Click(Sender: TObject);

    var

    f : TextFile;

    s, s1, s2, s3 : String;

    Str_len, Pos1_len, Pos2_len, Pos3_len, Pos4_len, i : Integer;

    begin

    OpenDialog1.Execute;

    if OpenDialog1.FileName <> '' then

    begin

    Assignfile(F, OpenDialog1.FileName);

    reset(F);





    while Not eof(F) do

    begin

    readln(F,S); // 첫줄을 읽음 i := Pos(' ', S) 첫줄을 읽음

    Table1.Append;

    Table1.Edit;



    Str_len := length(S);

    Pos1_len := Pos(' ', S)-1;



    S1 := Copy(S, Pos1_len+2, Str_len);

    Pos2_len := Pos(' ', Copy(S1, 0, Str_len))-1;



    S2 := Copy(S1, Pos2_len+2, Str_len);

    Pos3_len := Pos(' ', Copy(S2, 0, Str_len))-1;



    S3 := Copy(S2,Pos3_len+2,Str_len);

    Pos4_len := Pos(' ', Copy(S3, 0, Str_len))-1;





    Table1.FieldByName('a').asString := Copy(S , 0, Pos1_len);

    Table1.FieldByName('b').asString := Copy(S1, 0, Pos2_len);

    Table1.FieldbyName('c').asString := Copy(S2, 0, Pos3_len);

    Table1.FieldByName('d').AsString := Copy(S3, 0, Pos4_len);

    Table1.Post;

    Table1.Next;

    end;

    closefile(F);

    end;

    end;



    end.

    -------------------------------------------------------------------------------------

    잘난체 wrote:

    > 수정 하신 부분이.... 자료를 읽었다가.... 그 자료를 스크링 그리드에 넣는 작업을

    > 보여 주신 것 같습니다....

    >

    > 말씀 하신대로 필드 수가 많으면 그 필드수만큼을 반복해서 늘려 주셔야 합니다...

    > 그런데.... 이부분을 함수로 구성하시면 이부분을 해결할 수 있을것 같습니다...

    >

    > 허접한 소스 이지만 한번 보십시요...

    >

    >

    > function TFORM1.Check_Item(DataStr: String; DataCnt:Integer ): String;

    > var

    > i , j, ValueLen : Integer;

    > tmp:String;

    > begin

    >

    > i := 1;

    > j := 0;

    >

    > ValueLen := Length(DataStr);

    >

    > while i < ValueLen do

    > begin

    >

    > if DataStr[i] <> ',' then

    > tmp:=tmp+ DataStr[i]

    > else

    > begin

    > SG1.Cells[j,DataCnt]:=tmp;

    > tmp:='';

    > j:=j+1;

    > end;

    > i:=i+1;

    >

    > if i = ValueLen then

    > SG1.Cells[j,DataCnt]:=tmp;

    >

    > end;

    > end;

    >

    >

    > 전에 비슷한 모듈을 할때.. 이렇게 만든것 같습니다.... 한번 참조하셔서

    > 수정을 해보세요.....

    >

    >

    >

    >

    > 한번 해보세요... 잘 수정하시고요...

    >

    >

  • Profile
    잘난체 2001.12.20 02:58


    그러시면.... 스트링그리드(SG1)을 배열변수나 레코드(C에서 구조체라고 하지요)

    로 바꾸시어서 저장후에....그것을 for문으로 돌려서 DB에 저장하시면

    될것 같습니다.... 잘난체였습니다...