Q&A

  • Record 형으로 저장된 파일 읽고 쓰기
Record 형으로 저장된 파일을 읽고 쓸려고 합니다.

헌데 문제는 Record type이 혼용되어 있는 파일입니다.



예를들어

Type

TRec1 = record

AA : string[50];

AB : string[4];

end;



TRec2 = record

SA : integer;

SA : integer;

end;



이라는 Type이 정의되어 있고 디스크에 있는 파일은



TRec1 형식의 data가 한번 써여져 있고, TRec2 형식이 500번

반복되어 있습니다.



이것을 읽어들이는 방법을 알고자 합니다. 가능하면 상세하게..

또한 위와 같은 형식으로 저장하는 방법도... 가능하다면.





나름대로 해볼려고 아래와 같이 해보았습니다만 잘안되는군요.

먼저 변수로 아래를 선언하고

Var

FHandle1 : File of TRec1;

DRec1 : TRec1;



FHandle2 : File of TRec2;

DRec2 : TRec2;



....

....



프로시져로

AssignFile(FHandle1 ,'c:테스트파일.tst');

Reset(FHandle1);



Read(FHandle1,DRec1);



이런식으로 읽을려고 하니까, 첫번째 형식은 읽은것 같은데

두번째 형식을 읽기 위해서 어떤식으로 coding해야 할지

모르겠군요.

아니면 방법이 애초부터 틀렸는지 ....





3  COMMENTS
  • Profile
    이상돈 1999.04.03 22:08
    이미지가 두개 있습니다.

    이미지1은 배경

    이미지2는 사진(인물은외에는 일정한 색(파랑이나 검정)

    두이미지를 합성하고 싶은데 쉽지가 않네요.

    배경이미지에 이미지2를(인물부분만)합성해서

    새이미지를 만들어 저장해야하거든요.

    부탁합니다.

    질문만 올려서 죄송....^^;

  • Profile
    김영대 1999.06.18 03:29
    디제이 께서 말씀하시기를...

    > Record 형으로 저장된 파일을 읽고 쓸려고 합니다.

    > 헌데 문제는 Record type이 혼용되어 있는 파일입니다.

    >

    > 예를들어

    > Type

    > TRec1 = record

    > AA : string[50];

    > AB : string[4];

    > end;

    >

    > TRec2 = record

    > SA : integer;

    > SA : integer;

    > end;

    >

    > 이라는 Type이 정의되어 있고 디스크에 있는 파일은

    >

    > TRec1 형식의 data가 한번 써여져 있고, TRec2 형식이 500번

    > 반복되어 있습니다.

    >

    > 이것을 읽어들이는 방법을 알고자 합니다. 가능하면 상세하게..

    > 또한 위와 같은 형식으로 저장하는 방법도... 가능하다면.

    >

    >

    > 나름대로 해볼려고 아래와 같이 해보았습니다만 잘안되는군요.

    > 먼저 변수로 아래를 선언하고

    > Var

    > FHandle1 : File of TRec1;

    > DRec1 : TRec1;

    >

    > FHandle2 : File of TRec2;

    > DRec2 : TRec2;

    >

    > ....

    > ....

    >

    > 프로시져로

    > AssignFile(FHandle1 ,'c:테스트파일.tst');

    > Reset(FHandle1);

    >

    > Read(FHandle1,DRec1);

    >

    > 이런식으로 읽을려고 하니까, 첫번째 형식은 읽은것 같은데

    > 두번째 형식을 읽기 위해서 어떤식으로 coding해야 할지

    > 모르겠군요.

    > 아니면 방법이 애초부터 틀렸는지 ....

    >

    >



    안녕하세요 김영대입니다



    record 로 파일을 핸들링 한다는건 이진 처리가 되기 때문에

    레코드의 형태가 어떻든 파일 포인터의 증가에만 신경쓰면 됩니다

    근데 문제는 TRec1과 TRec2 의 두가지를 Read() 로 읽어야 하는데

    Read() 로 읽으려면 하나의 파일에 대해 하나의 record 형태만

    지원되는 문제입니다



    FHandle1, FHandle2 의 두개의 파일 포인터를 만드시면 두개의

    포인터는 완전히 따로 동작하므로 원하시는 목적을 얻기는 힘들고

    파일 포인터(file of Byte 형태)를 하나만 만들고 BlockRead() 을

    사용하여 뒤의 size 를 TRec1과 TRec2 의 크기만큼 변경해가면서

    읽으시면 될듯합니다



    그리고 또하나는 TRec1 한번 TRec2 500 번이라는 순서가 꼭 일치하지

    않을 수 도 있는 문제입니다

    그래서 대부분은 각 record 타입에 flag 를 두어서 다음에 어떤

    형태의 record 타입이 오는지등의 정보를 넣어두시면 좋을듯 합니다

  • Profile
    이정욱 1999.04.04 04:55
    하이텔서 퍼왔습니다.



    번 호 : 2827

    게시자 : 민성기 (오랑캐꽃)

    등록일 : 1999-02-27 23:55

    제 목 : [응모] 델파이 퀴즈...



    안녕하세요... 민성기 입니다.



    항상 퀴즈를 내 주시는 지훈님께 감사 드리며... ^^;



    음... 예전엔 복잡하고 희안하게 했다가... 요즘엔 RX의 소스를

    고대로 배껴서 쓰고 있습니다. 빠르고 좋길래... 흐흐흐...



    퀴즈 응모 입니당...



    procedure StretchBltTransparent(DstDC: HDC; DstX, DstY, DstW, DstH: Integer;

    SrcDC: HDC; SrcX, SrcY, SrcW, SrcH: Integer; Palette: HPalette;

    TransparentColor: TColorRef);

    const

    PaletteMask = $02000000;

    var

    Color: TColorRef;

    bmAndBack, bmAndObject, bmAndMem, bmSave:HBitmap;

    bmBackOld, bmObjectOld, bmMemOld, bmSaveOld: HBitmap;

    MemDC, BackDC, ObjectDC, SaveDC: HDC;

    palDst, palMem, palSave, palObj: HPalette;



    function PaletteColor(Color: TColor): Longint;

    begin

    Result := ColorToRGB(Color) or PaletteMask;

    end;



    begin

    { Create some DCs to hold temporary data }

    BackDC := CreateCompatibleDC(DstDC);

    ObjectDC := CreateCompatibleDC(DstDC);

    MemDC := CreateCompatibleDC(DstDC);

    SaveDC := CreateCompatibleDC(DstDC);

    { Create a bitmap for each DC }

    bmAndObject := CreateBitmap(SrcW, SrcH, 1, 1, nil);

    bmAndBack := CreateBitmap(SrcW, SrcH, 1, 1, nil);

    bmAndMem := CreateCompatibleBitmap(DstDC, DstW, DstH);

    bmSave := CreateCompatibleBitmap(DstDC, SrcW, SrcH);

    { Each DC must select a bitmap object to store pixel data }

    bmBackOld := SelectObject(BackDC, bmAndBack);

    bmObjectOld := SelectObject(ObjectDC, bmAndObject);

    bmMemOld := SelectObject(MemDC, bmAndMem);

    bmSaveOld := SelectObject(SaveDC, bmSave);

    { Select palette }

    palDst := 0; palMem := 0; palSave := 0; palObj := 0;

    if Palette <> 0 then begin

    palDst := SelectPalette(DstDC, Palette, True);

    RealizePalette(DstDC);

    palSave := SelectPalette(SaveDC, Palette, False);

    RealizePalette(SaveDC);

    palObj := SelectPalette(ObjectDC, Palette, False);

    RealizePalette(ObjectDC);

    palMem := SelectPalette(MemDC, Palette, True);

    RealizePalette(MemDC);

    end;

    { Set proper mapping mode }

    SetMapMode(SrcDC, GetMapMode(DstDC));

    SetMapMode(SaveDC, GetMapMode(DstDC));

    { Save the bitmap sent here }

    BitBlt(SaveDC, 0, 0, SrcW, SrcH, SrcDC, SrcX, SrcY, SRCCOPY);

    { Set the background color of the source DC to the color, }

    { contained in the parts of the bitmap that should be transparent }

    Color := SetBkColor(SaveDC, PaletteColor(TransparentColor));

    { Create the object mask for the bitmap by performing a BitBlt() }

    { from the source bitmap to a monochrome bitmap }

    BitBlt(ObjectDC, 0, 0,SrcW, SrcH, SaveDC, 0, 0, SRCCOPY);

    { Set the background color of the source DC back to the original }

    SetBkColor(SaveDC, Color);

    { Create the inverse of the object mask }

    BitBlt(BackDC, 0, 0, SrcW, SrcH, ObjectDC, 0, 0, NOTSRCCOPY);

    { Copy the background of the main DC to the destination }

    BitBlt(MemDC, 0, 0, DstW, DstH, DstDC, DstX, DstY, SRCCOPY);

    { Mask out the places where the bitmap will be placed }

    StretchBlt(MemDC, 0, 0, DstW, DstH, ObjectDC, 0, 0, SrcW, SrcH, SRCAND);

    { Mask out the transparent colored pixels on the bitmap }

    BitBlt(SaveDC, 0, 0, SrcW, SrcH, BackDC, 0, 0, SRCAND);

    { XOR the bitmap with the background on the destination DC }

    StretchBlt(MemDC, 0, 0, DstW, DstH, SaveDC, 0, 0, SrcW, SrcH, SRCPAINT);

    { Copy the destination to the screen }

    BitBlt(DstDC, DstX, DstY, DstW, DstH, MemDC, 0, 0,

    SRCCOPY);

    { Restore palette }

    if Palette <> 0 then begin

    SelectPalette(MemDC, palMem, False);

    SelectPalette(ObjectDC, palObj, False);

    SelectPalette(SaveDC, palSave, False);

    SelectPalette(DstDC, palDst, True);

    end;

    { Delete the memory bitmaps }

    DeleteObject(SelectObject(BackDC, bmBackOld));

    DeleteObject(SelectObject(ObjectDC, bmObjectOld));

    DeleteObject(SelectObject(MemDC, bmMemOld));

    DeleteObject(SelectObject(SaveDC, bmSaveOld));

    { Delete the memory DCs }

    DeleteDC(MemDC);

    DeleteDC(BackDC);

    DeleteDC(ObjectDC);

    DeleteDC(SaveDC);

    end;



    헥헥~



    쓸 때는 다음과 같이 ... ^^;



    procedure TForm1.Button1Click(Sender: TObject);

    var

    DestBitmap : TBitmap;

    SrcBitmap : TBitmap;

    begin

    DestBitmap := TBitmap.Create;

    SrcBitmap := TBitmap.Create;

    try

    DestBitmap.Width := Image2.Picture.Bitmap.Width;

    DestBitmap.Height := Image2.Picture.Bitmap.Height;

    DestBitmap.Canvas.Draw(0, 0, Image2.Picture.Bitmap);

    SrcBitmap.Assign(Image1.Picture.Bitmap);



    StretchBltTransparent(

    DestBitmap.Canvas.Handle,

    0, 0, DestBitmap.Width, DestBitmap.height,

    SrcBitmap.Canvas.Handle,

    0, 0, SrcBitmap.Width, SrcBitmap.Height,

    SrcBitmap.Palette,

    clBlack

    );



    Image3.Picture.Bitmap.Assign(DestBitmap);

    finally

    DestBitmap.Free;

    SrcBitmap.Free;

    end;

    end;



    음... Image2의 이미지 중 검은 부분을 Image1에 '투명'하게

    올려서리... Image3에 보여주는 놈 입니다.



    이번 기회에 성능 죽여주는 투명 비트맵 예제를 건질 수 있으면

    좋겠네요~







    이상돈 wrote:

    > 이미지가 두개 있습니다.

    > 이미지1은 배경

    > 이미지2는 사진(인물은외에는 일정한 색(파랑이나 검정)

    > 두이미지를 합성하고 싶은데 쉽지가 않네요.

    > 배경이미지에 이미지2를(인물부분만)합성해서

    > 새이미지를 만들어 저장해야하거든요.

    > 부탁합니다.

    > 질문만 올려서 죄송....^^;





    • 이광주
    • 1999.04.03 06:32
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.04.06 22:31
      이광주 wrote: > THTML콤퍼넌트의 프린트기능을 구현하기 어려워 ActiveX Control에 있는 > IE를 불러 붙...
    • 오인균
    • 1999.06.17 23:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.06.18 00:26
      오인균 께서 말씀하시기를... > 델파이4로 명함관리 프로그램을 작성중인데요.. > 질문이 있습니다.. > ...
    • 구자송
    • 1999.04.03 17:50
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 이현신
      1999.06.17 23:00
      델파이에서 아주 간단한 콘솔 프로그램을 만들었는데.. 중간에 어떤 작업을 시켜놓고 대기(for문)를 해 야...
    • 이정욱
      1999.04.06 06:06
      제가 알기로는 정품이 그 기능을 지원하는것으로 알고 있습니다. 퀵리포트 정품이 말이죠... 구자송 ...
    • 이현신
      1999.06.17 23:17
      이현신 께서 말씀하시기를... > 델파이에서 아주 간단한 콘솔 프로그램을 만들었는데.. > 중간에 어떤 작...
    • 구자송
      1999.04.06 10:25
      이정욱 wrote: > 제가 알기로는 정품이 그 기능을 지원하는것으로 알고 있습니다. > 퀵리포트 정품이 말...
    • 안치봉
      1999.04.06 22:40
      qusoft에서 구입하실수 있을것입니다. 나이렉스에서 구입대행도 가능합니다. 구자송 wrote: > 이정욱 ...
    • 왕초
    • 1999.06.17 22:03
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최석기
      1999.06.17 22:13
      왕초 께서 말씀하시기를... > MDIChild폼이 모두 Minimized되어 있는데요.. > 이 MDIChild폼을 MDI 메인 ...
    • 안정한
    • 1999.06.17 21:50
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 구자송
      1999.04.03 17:50
      패키지 프로그램을보면 인쇄전에 화면에서 ReportForm을 변경해서 인쇄를 할수있는 프로그램들이 있는데 어...
    • 이정욱
      1999.04.06 06:06
      제가 알기로는 정품이 그 기능을 지원하는것으로 알고 있습니다. 퀵리포트 정품이 말이죠... 구자송 ...
    • 구자송
      1999.04.06 10:25
      이정욱 wrote: > 제가 알기로는 정품이 그 기능을 지원하는것으로 알고 있습니다. > 퀵리포트 정품이 말...
    • 안치봉
      1999.04.06 22:40
      qusoft에서 구입하실수 있을것입니다. 나이렉스에서 구입대행도 가능합니다. 구자송 wrote: > 이정욱 ...
    • 지팡이
    • 1999.06.17 21:29
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이상돈
      1999.04.03 22:08
      이미지가 두개 있습니다. 이미지1은 배경 이미지2는 사진(인물은외에는 일정한 색(파랑이나 검정) 두이...
    • 신인재
      1999.06.17 22:45
      쩝 MCI함수를 써서 플레이를 해야 될꺼같습니다.. 자료실에 제가 올려놓은 MciPlay.pas가 있습니다. ...
    • 이정욱
      1999.04.04 04:55
      하이텔서 퍼왔습니다. 번 호 : 2827 게시자 : 민성기 (오랑캐꽃) 등록일 : 1999-02-27 23:55 제 ...
    • 디제이
    • 1999.06.17 21:11
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이상돈
      1999.04.03 22:08
      이미지가 두개 있습니다. 이미지1은 배경 이미지2는 사진(인물은외에는 일정한 색(파랑이나 검정) 두이...
    • 김영대
      1999.06.18 03:29
      디제이 께서 말씀하시기를... > Record 형으로 저장된 파일을 읽고 쓸려고 합니다. > 헌데 문제는 Record...
    • 이정욱
      1999.04.04 04:55
      하이텔서 퍼왔습니다. 번 호 : 2827 게시자 : 민성기 (오랑캐꽃) 등록일 : 1999-02-27 23:55 제 ...
    • 문창완
      1999.04.03 18:59
      원본이미지를 출력(프린팅)할때 좌우가 바뀐(대칭된)이미지로 출력하고자 합니다. 방법이 없을까요? ...
    • 최석기
      1999.06.17 20:28
      최기훈 께서 말씀하시기를... > 최석기님이 보내주신 답변 잘받았습니다. > 하지만 TNotifyIconData에 해...
    • 안치봉
      1999.04.03 21:40
      문창완 wrote: > 원본이미지를 출력(프린팅)할때 좌우가 바뀐(대칭된)이미지로 > 출력하고자 합니다. > ...
    • 이호선
      1999.06.17 18:26
      안녕하세요 Chartfx콤퍼넌트를 사용하는데 배포 컴퓨터에 클래스가 등록되지 않았다는 에러가 나오는군요...
    • 안치봉
      1999.04.01 23:02
      문창완 wrote: > 비디오 화상위에 투명 이미지를 씌우고자 하는데 잘 안돼네요... > 통신상에 있는 컴포...
    • 최석기
      1999.06.17 19:16
      이호선 께서 말씀하시기를... > 안녕하세요 > Chartfx콤퍼넌트를 사용하는데 배포 컴퓨터에 클래스가 등...
    • 문창완
      1999.04.03 19:02
      그 문제는 안치봉님 께서 알려준 방법으로 해결하기 보다는 인터넷에서 컴포넌트를 구해서 해결했습니다...
    • 문창완
    • 1999.04.03 18:59
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 북해
      1999.06.17 18:02
      안녕하세요. 동적생성한 버튼을 해체하려하는데 잘 안되네요. 단순히 하나의 버튼을 동적생성하고 해체하는...
    • 안치봉
      1999.04.03 21:40
      문창완 wrote: > 원본이미지를 출력(프린팅)할때 좌우가 바뀐(대칭된)이미지로 > 출력하고자 합니다. > ...
    • 최석기
      1999.06.17 19:10
      북해 께서 말씀하시기를... > 안녕하세요. 동적생성한 버튼을 해체하려하는데 잘 안되네요. 단순히 하나의...
    • 최기훈
    • 1999.06.17 18:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최석기
      1999.06.17 19:12
      최기훈 께서 말씀하시기를... > Window를 구현하는데 궁금한 점이 있어서 이렇게 글을 올립니다. > 작업 ...
    • 한 재
    • 1999.06.17 17:40
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 구자송
      1999.04.03 17:50
      패키지 프로그램을보면 인쇄전에 화면에서 ReportForm을 변경해서 인쇄를 할수있는 프로그램들이 있는데 어...
    • 이정욱
      1999.04.06 06:06
      제가 알기로는 정품이 그 기능을 지원하는것으로 알고 있습니다. 퀵리포트 정품이 말이죠... 구자송 ...
    • 구자송
      1999.04.06 10:25
      이정욱 wrote: > 제가 알기로는 정품이 그 기능을 지원하는것으로 알고 있습니다. > 퀵리포트 정품이 말...
    • 안치봉
      1999.04.06 22:40
      qusoft에서 구입하실수 있을것입니다. 나이렉스에서 구입대행도 가능합니다. 구자송 wrote: > 이정욱 ...
    • 문창완
    • 1999.06.17 07:39
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이대선
      1999.04.03 05:44
      keybd_event를 어떻게 사용해야 하는지 궁금합니다. keybd_event($41,VK_SNAPSHOT,KEYEVENTF_EXTENDEDKE...
    • 최석기
      1999.06.17 17:47
      문창완 께서 말씀하시기를... > 지금 소리가 나는 사운드(Wav 파일)를 어떻게 죽이죠...? > 알려주세요. ...
    • 안치봉
      1999.04.03 07:33
      이대선 wrote: > keybd_event를 어떻게 사용해야 하는지 궁금합니다. > > keybd_event($41,VK_SNAPSHOT...
    • 이호선
    • 1999.06.17 06:34
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 황순갑
      1999.04.03 05:21
      찾습니다. 디지탈카메라의 소스 (비주얼베이직) 을 델파이 소스로 변환해 주실분을 찾습니다. 메일...
    • 최석기
      1999.06.17 17:38
      이호선 께서 말씀하시기를... > 안녕하세요. > ActiveX에서 Chartfx를 사용하는데 배포할때 클래스가 등...
    • 안치봉
      1999.04.03 07:31
      황순갑 wrote: > > 찾습니다. > 디지탈카메라의 소스 (비주얼베이직) 을 델파이 소스로 > 변환해 ...
    • 이주흥
    • 1999.06.17 06:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.06.17 06:35
      이주흥 께서 말씀하시기를... > 하하 ... 또 질문입니다..이거 자꾸 막히네요.. > 저기 ..OpenDialog에서...
    • 이해진
    • 1999.04.03 02:19
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.04.03 04:30
      필드의 종류와 이름들을 말씀해 주세요. 거기에 문제가 있을 수 도있습니다. 특히 한글로 필드명을 준다...
    • 이해진
      1999.04.03 06:35
      델파이에서 테이블 컴포넌트를 사용하지 않고 쿼리 컴포넌트를 사용하니까 문제가 해결되었습니다. 테이...
    • 이광주
    • 1999.04.03 06:32
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.04.06 22:31
      이광주 wrote: > THTML콤퍼넌트의 프린트기능을 구현하기 어려워 ActiveX Control에 있는 > IE를 불러 붙...
    • 김진성
    • 1999.06.17 03:24
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최석기
      1999.06.17 17:43
      김진성 께서 말씀하시기를... > 에궁~ 밑에 질문을 했었는데, 너무 길어져서 이곳에 다시 올립니다. > 저...
    • 초보
    • 1999.06.17 03:04
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이대선
      1999.04.03 05:44
      keybd_event를 어떻게 사용해야 하는지 궁금합니다. keybd_event($41,VK_SNAPSHOT,KEYEVENTF_EXTENDEDKE...
    • 안치봉
      1999.04.03 07:33
      이대선 wrote: > keybd_event를 어떻게 사용해야 하는지 궁금합니다. > > keybd_event($41,VK_SNAPSHOT...