Q&A

  • 파일을 읽어서 지정된 셀에 뿌려주는 방법좀 가르쳐주세요.
안녕하세요. 전 델파이 초보입니다.
다름이 아니라 제가 지금 Grid에다 항목을 입력하고 그것을 파일에 저장한 후에 다시 읽어오는 프로그램을 짜고 있는데 입력된 항목을 파일에 저장하는 데까지는 끝났는데 그 파일을 다시 그 Grid에 불러오는 것이 되지 않네요.
고수님들의 지도 부탁드리겠습니다.

아래는 제가 짠 소스입니다.
좀 난잡하지만 이해해 주시고 봐 주세요.

unit device4;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    StringGrid1: TStringGrid;
    OpenDialog1: TOpenDialog;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  Title : array[0..8] of String
    = ('Device List','Device Name', 'Company', '수량','구입년도','Model Name','Serial Number','고장유무','용도');

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var
        
        i : integer;

begin
        // 행과 열의 크기를 결정합니다.
        StringGrid1.RowCount := 31;
        StringGrid1.ColCount := 9;

        // 행과 열에 들어갈 제목을 넣는다.

        StringGrid1.Cells[0,1] := 'Routine Switcher';
        StringGrid1.Cells[0,2] := 'Video Server';
        StringGrid1.Cells[0,5] := 'VCR';
        StringGrid1.Cells[0,6] := 'DA Convertor';
        StringGrid1.Cells[0,8] := 'Serial Hub';
        StringGrid1.Cells[0,10] := 'PGM Monitor';
        StringGrid1.Cells[0,12] := 'Keyborad Monitor Mouse Switcher';
        StringGrid1.Cells[0,13] := 'Rom Writer';
        StringGrid1.Cells[0,15] := 'Emulator';
        StringGrid1.Cells[0,17] := 'ISA 확장슬롯';
        StringGrid1.Cells[0,19] := 'Line Monitor';
        StringGrid1.Cells[0,20] := 'Device Server';
        StringGrid1.Cells[0,21] := 'ECP';
        StringGrid1.Cells[0,22] := 'MCS3';
        StringGrid1.Cells[0,24] := 'TCD';
        StringGrid1.Cells[0,25] := 'Rack';
        StringGrid1.Cells[0,26] := 'Ethernet Hub';
        StringGrid1.Cells[0,29] := 'Rom Eraser';

        for i:= 0 to StringGrid1.ColCount-1 do
          StringGrid1.Cells[i, 0] := Title[i];


end;

procedure TForm1.Button2Click(Sender: TObject);

var
        sTemp : string;
        f:textfile;
        Col_1, Row_1 : integer;

begin

        // 파일을 불러온다
        opendialog1.Execute;
        Assignfile(f, opendialog1.FileName);
        Reset(f);
        for Col_1 := 1 to StringGrid1.Colcount-2 do
        begin
          for Row_1 := 1 to StringGrid1.Rowcount-2 do
          begin
            Readln(f,stemp);
            StringGrid1.Cells[Col_1, Row_1] := sTemp;
          end;
        closefile(f);
        end;

end;

procedure TForm1.Button3Click(Sender: TObject);

var
        Col, Row : integer;
        F1 : TextFile;
        sTemp_1 : string;

begin
        // 입력된 자료를 파일에 저장한다.
        opendialog1.Execute;
        Assignfile(F1, opendialog1.FileName);
        Rewrite(F1);
        for Col := 1 to StringGrid1.ColCount-2 do
        begin
          for Row :=1 to StringGrid1.RowCount-2 do
          begin
            sTemp_1 := StringGrid1.Cells[Col, Row];
            Writeln(F1, sTemp_1);
        end;
        end;
        CloseFile(F1);
end;

end.
2  COMMENTS
  • Profile
    신강섭 2002.09.24 19:31
    일단 님의 소스를 보니까...
    그리드에서 한줄을 읽어서 파일에다가 한줄씩 저장을 하네요...
    일단 이렇게 저장을 하면 다시 읽어올때 어떤게 어떤자료인지 알수가 없네요
    그러니까.. 일단 저장할때 적당한 구분자를 두어서 저장을 하시는게 좋을꺼 같아요
    예를 들어 저장할때

    procedure TForm1.Button3Click(Sender: TObject);
    var
            Col, Row : integer;
            F1 : TextFile;
            sTemp_1 : string;
    begin
            // 입력된 자료를 파일에 저장한다.
            opendialog1.Execute;
            Assignfile(F1, opendialog1.FileName);
            Rewrite(F1);
            for Col := 1 to StringGrid1.ColCount-2 do
            begin
              for Row :=1 to StringGrid1.RowCount-2 do
              begin
                sTemp_1 := StringGrid1.Cells[Col, Row] + '|';
                // '|'라는 구분자를 넣어서 저장을 하는거죠
                Writeln(F1, sTemp_1);
            end;
            end;
            CloseFile(F1);
    end;

    위처럼 저장을 한 후 파일에서 읽어들일때는
    '|'를 기준으로 해당 데이터를 읽어오시면 되겠죠...

    그리고 굳이.. 파일에다가 저장을 하셔야 하는지
    이런부분은 db를 이용하면 편하게 쓰실텐데요.....




  • Profile
    하일수 2002.09.25 02:49
    지적해 주신 내용 잘 보았습니다.
    하지만 제 실력이 워낙 초보라서 비교인자를 어떻게 응용해야 할 지 모르겠네요. 좀 더 공부하도록 해서 좀 더 낳은 질문을 하도록 하겠습니다.
    답변 감사합니다.
    • 전형식
      2002.09.24 22:34
      받는쪽이 서버라고요? 그럼 여러 써버한테 보낸달 말씀입니까? (개그 패러디 임다) ^^; 받는쪽이 다중서...
    • 최병철
      2002.09.25 01:37
      델파이5에서는 아래와 같은 순서로 하였읍니다 먼저 델파이 메뉴바에서 - Componet 메뉴를 선택하면 하...
    • 최용일
      2002.09.25 00:23
      안녕하세요. 최용일입니다. 데이터 받는것을 쓰레드에서 돌려보세요... 잘 될거 같은데... ^^ 항상 ...
    • 초짜
    • 2002.09.24 21:03
    • 3 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2002.09.24 21:16
      procedure TForm1.Button1Click(Sender: TObject); var   buffer : String; begin  &nb...
    • 초짜
      2002.09.24 21:35
      정말 감사합니다.. 많은도움이 됬습니다. 한가지 더 질문을 해도 될가여? 한글을 쓸대 공백을 줄...
    • KDDG_ZZOM
      2002.09.24 22:27
      format이라는 함수를 이용해보시고요... 아니면 생노가다 함수하나 만들어 사용해도 될것같네요...^^ ...
    • 나옹이
    • 2002.09.24 20:55
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.09.25 01:21
      안녕하세요. 최용일입니다. Range나 Selection객체의 InsertBreak메소드를 이용하세요... uses &nbs...
    • 나옹이
      2002.09.25 01:48
      흠냐...이런게 있었네요.....ㅡㅜ 정말 감사합니다.... 근데.... 이런 걸 찾으려면 어디서 찾아야 하...
    • 최용일
      2002.09.25 01:59
      MSDN에도 다 나와 있습니다. within result를 이용해서 근접검색을 여러번하시면 검색될건데... 간단히 ...
    • 신강섭
      2002.09.24 20:51
      TFlat... 을 이용하세요... 플랫컴포넌트.. 잘쓰면 이쁘더라구여.... 자료실에 가서 검색해보면 있을꺼에...
    • 김종화
      2002.09.24 23:12
      답변 감사드리구여.. 자료실에서 컴포넌트는 찾았는데요.. 설치가 안되네요..ㅠㅠ 거기 Txt 파일에 ...
    • 조성필
      2002.09.24 23:59
      팁란이나 강의실에 보시면 해결 방법이 나와있습니다. 저두 처음에 그것때문에 여러가지 컴포넌트를 설치...
    • 신강섭
      2002.09.25 02:51
      그거는 델파이가 설치한 컴포넌트의 위치를 찾지 못해서 그런거거덩여 그러니까... 델파이의 Tools->En...
    • 김종화
      2002.09.25 05:02
      오늘도 하나 배웠습니당. 감사합니당.. 알려주신대로 하니깐 설치는 잘 됬는데요... 제가 원하...
    • KDDG_ZZOM
      2002.09.24 22:42
      안타깝게도 스트링그리드에서 표현하기가 힘들것같네요... 델파이가 업되면서 이기능이 업좀되길 바라는데...
    • 최병철
      2002.09.24 21:16
      제가 여러가 테트스한 결과 저의 실수 였읍니다. 혹시 몰라서 [Tip]에 예제 소스를 올렸읍니다. 참...
    • 김대훈
    • 2002.09.24 19:55
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 고지범
      2002.09.25 06:18
      보통 .dpr 파일은 이렇게 구성되죠... 1)   Application.Initialize; 2)   Applicat...
    • 김형환
      2002.09.24 20:19
      ============================================================== ===================
    • KDDG_ZZOM
      2002.09.24 20:00
      PostMessage(Handle, WM_CLOSE, 0, 0); 이케 해보세요... 즐프하세요...
    • 박동호
    • 2002.09.24 19:43
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.09.24 19:52
      MS_ACCESS의 Model Deigner에서 추가 삭제 모두 가능합니다. 당연히 기존의 데이타모두 보존되구요.. MS_...
    • 이정용
    • 2002.09.24 19:36
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이승근
    • 2002.09.24 19:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정경철
      2002.09.24 23:38
      1. 외부 프로그램을 실행 할 듯 한데.. 외부 프로그램 실행 하는법은    여기 한텔의 팁에서 "...
    • 허진규
    • 2002.09.24 19:31
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 신강섭
      2002.09.24 19:43
      MaskEdit의 OnEnter()에다가 아래와 같이 써넣으시면 되네요... 자세한 사항은 EM_SETSEL 을 도움말에...
    • KDDG_ZZOM
      2002.09.24 19:40
      검색하시면 나올것같은데...   MaskEdit1.SetFocus;   MaskEdit1.SelStart := 8; &...
    • 한원희
      2002.09.24 19:34
      안녕하세요. 한원희입니다. form2 그러니까, frmMnuF1_5P의 TEdit 의 값들을 가져오기 오려고 하시는 건...
    • 왕초보
    • 2002.09.24 09:02
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 고지범
      2002.09.25 05:54
      날짜에 관련된 것은 자료형 구조만 파악하면 딴거 안쓰고 걍... 됩니다.. 먼저 TDateTime, TDate 찾아 보...
    • 이준해
      2002.09.24 19:04
      DateUtils.pas 파일을 찾아보세요. 필요하신건 다 있을 겁니다.
    • 임형호
      2002.09.24 17:39
      화면옆에 '팁' 메뉴를 누르고.. 검색란에 '날짜' 라고 입력해보세요. 관련 내용들이 나옵니다. 아마..님...
    • 하일수
    • 2002.09.24 05:57
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 신강섭
      2002.09.24 19:31
      일단 님의 소스를 보니까... 그리드에서 한줄을 읽어서 파일에다가 한줄씩 저장을 하네요... 일단 이렇게...
    • 하일수
      2002.09.25 02:49
      지적해 주신 내용 잘 보았습니다. 하지만 제 실력이 워낙 초보라서 비교인자를 어떻게 응용해야 할 지 모...
    • 고지범
      2002.09.25 06:13
      메모리를 접근할 때, Alignment라는 것이 있습다. packed keyword는 Alignment를 무시할껀지 적용할 껀지...
    • sunny
    • 2002.09.24 03:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.09.24 18:22
      고생이 많으십니다. 인덱스의 일방적인 값으로 데이타를 나열하는것은 권장하고 싶지 않은 방법입니다. ...
    • 최수림
      2002.09.24 06:35
      ^^ 프로젝트 --> 랭귀지에 대한 내용은 저도 잘모르구요..!! TEdit 글짜가 깨져서 나오시면 &n...
    • 이경문
      2002.09.24 03:14
      TrayIcon과 관련된 컴포넌트를 사용했을 경우에 그런 경우가 종종 발생하곤 합니다. 메인 폼에서 WM_QUERY...
    • 최명관
      2002.09.24 03:50
      이미 WM_QUERYENDSESSION을 잡아서 해봤거든요. 근데 종료가 안되네요.. RX 라이브러리에 있는 트...