Transcript 11월12일
Chap 11. 비주얼베이직 파일 시스템 2007년 2학기 -1- 경기분석컴퓨터프로그래밍 01. 파일 다루기 02. 순차 액세스 파일 03. 랜덤 액세스 파일과 이진액세스 파일 2007년 2학기 -2- 경기분석컴퓨터프로그래밍 파일 다루기 파일 다루기 비주얼 베이직 제공하는 파일 액세스 방법 순차(Sequential) 방식 순차적으로 텍스트 파일을 읽거나 저장할 때 사용. 랜덤(Random) 방식 고정된 길이의 레코드를 읽거나 저장할 때 사용 이진(Binary) 방식 임의로 구조화되어 있거나 그렇지 않은 파일을 읽거나 저장 할 때 사용 파일을 다루기 ① Open 문을 이용하려 액세스 방식에 따라 파일을 연다. ② 필요한 함수나 문을 사용하여 파일의 내용을 읽거나 저장한다. ③ Close 문을 사용하여 열려진 파일을 닫는다. 2007년 2학기 -3- 경기분석컴퓨터프로그래밍 파일 다루기 파일을 읽거나 저장하기 위해 사용하는 함수/명령문 2007년 2학기 -4- 경기분석컴퓨터프로그래밍 파일 다루기 엑세스 방법에 따른 함수/명령문 비교 2007년 2학기 -5- 경기분석컴퓨터프로그래밍 파일 다루기 Open 문 파일을 읽거나 저장할 수 있도록 하기 위해 사용하는 구문 구문 형식 Open pathname For mode [Access access] [lock] As [#] filenumber [Len = reclength] Open 문의 구성 요소 2007년 2학기 -6- 경기분석컴퓨터프로그래밍 파일 다루기 Open 문에서의 파일 모드 예 Open "c:\test.txt" For Binary As #1 '이진 방식으로 열어줌 Open "c:\test.txt" For Input As #1 '순차 방식으로 열어줌 Open "c:\test.txt" For Random As #1 '랜덤 방식으로 열어줌 액세스 종류 2007년 2학기 -7- 경기분석컴퓨터프로그래밍 파일 다루기 예 Open "c:\text.txt" For Random Access Read Write As #1 '랜덤 방식으로 파일을 읽고 저장 Open "c:\text.txt" For Binary Access Write As #2 '이진 방식으로 파일 저장 Open "c:\text.txt" For Input Access Write As #1 '오류발생, Write를 Read로 변경해야 하고 Access를 생략 하면 자동으로 Read로 설정됨 Lock 현재 사용 중인 파일을 다른 사용자가 사용할 수 있도록 하 거나, 사용하지 못하도록 설정 2007년 2학기 -8- 경기분석컴퓨터프로그래밍 01. 파일 다루기 02. 순차 액세스 파일 03. 랜덤 액세스 파일과 이진액세스 파일 2007년 2학기 -9- 경기분석컴퓨터프로그래밍 순차 액세스 파일 순차 액세스 파일 특징 전형적인 텍스트 편집기로 작성된 파일, 즉 레코드의 순 차 데이터로 분류되지 않은 데이터로 된 파일과 텍스트로 만 구성된 파일을 처리할 때 유용 순차 액세스를 위해 파일 열기는 다음 작업들 중 하나에 의해 실행 파일로부터 문자를 입력한다(Input). 파일에 문자를 출력한다(Output). 파일에 문자를 추가한다(Append). Open 문 파일을 열기 위해 사용 구문 형식 Open 파일이름(pathname) For [ Input | Output | Append] As filenumber [Len = 버퍼크기(buffersize) ] 2007년 2학기 - 10 - 경기분석컴퓨터프로그래밍 순차 액세스 파일 파일 열기 Input을 위해 순차 파일을 열 때는 파일이 이미 있어야 하 며, 파일이 없으면 오류 발생 Output이나 Append를 위해 파일을 여는 경우 파일이 존재하 지 않더라도 새로 파일을 생성하기 때문에 오류가 발생하지 않음 함수의 종류 2007년 2학기 - 11 - 경기분석컴퓨터프로그래밍 [실습하기] 텍스트박스의 내용 저장하고 불러오기 폼에 컨트롤 추가하기 각 컨트롤의 속성 설정 2007년 2학기 - 12 - 경기분석컴퓨터프로그래밍 [실습하기] 텍스트박스의 내용 저장하고 불러오기 Private Sub cmdFileOpen_Click() Dim F_Line As String Dim f_Data As String Dim select_file As String ‘파일 읽기’ 버튼의 이벤트 핸들러 작성 CommonDialog1.Filter = "텍스트 파일(*.txt)|*.txt" CommonDialog1.FilterIndex = 1 CommonDialog1.DialogTitle = "텍스트 파일 열기" CommonDialog1.InitDir = "g:\교재\한빛\vb\문서\4부" CommonDialog1.ShowOpen select_file = CommonDialog1.FileName '읽어온 파일을 변수에 저장 Open select_file For Input As #1 Do While Not EOF(1) Line Input #1, F_Line F_Line = F_Line & vbCrLf f_Data = f_Data & F_Line Loop Close #1 '파일을 읽어옴 '파일을 닫음 txtEdit.Text = f_Data End Sub 2007년 2학기 '파일을 열어줌 '읽어온 내용을 텍스트박스에 넣음 - 13 - 경기분석컴퓨터프로그래밍 [실습하기] 텍스트박스의 내용 저장하고 불러오기 Private Sub cmdFileSave_Click() Dim Save_File As String If Save_File = "" Then MsgBox "새 파일로 저장하겠습니까?", , "확인" End If Open "g:\교재\한빛\vb\문서\4부\Saved_File.txt" For Output As #1 ‘파일 열기 Print #1, txtEdit.Text ‘텍스트박스의 내용을 파일에 저장 Close #1 ‘파일 닫기 End Sub Private Sub cmdExit_Click() End End Sub 파일 저장과 종료 버튼 이벤트 핸들러 작성 2007년 2학기 - 14 - 경기분석컴퓨터프로그래밍 [실습하기] 텍스트박스의 내용 저장하고 불러오기 프로젝트를 실행 2007년 2학기 - 15 - 경기분석컴퓨터프로그래밍 01. 파일 다루기 02. 순차 액세스 파일 03. 랜덤 액세스 파일과 이진 액세스 파일 2007년 2학기 - 16 - 경기분석컴퓨터프로그래밍 랜덤 액세스 파일 랜덤 액세스 방식 특징 일정한 길이의 레코드 단위로 파일을 읽고 쓰는 경우 랜덤 액 세스 방식을 많이 사용한다 파일을 열기 위해 Open 문 사용 Open 파일이름 [For Random] As filenumber Len = 레코드 길이 Len은 바이트 단위로 각 레코드의 크기를 지정하는 경우에 사용 Seek 문 파일의 포인터를 이동하기 위해 사용 구문 형식 파일 포인터를 옮길 때 Seek 파일번호, 위치 파일 포인터를 얻을 때 Long = Seek( 파일 번호 ) 2007년 2학기 - 17 - 경기분석컴퓨터프로그래밍 랜덤 액세스 파일 Put 문과 Get 문 레코드를 변수에 복사하기 위해서는 Get 문을 사용 파일에 레코드를 추가하거나 변경하기 위해서는 Put문 사용 구문 형식 파일에서 레코드를 읽을 때 Get 파일번호, 레코드 위치, 변수 파일에 레코드를 쓸 때 Put 파일번호, 레코드 위치, 변수 레코드 삭제하기 ① ② ③ ④ ⑤ 2007년 2학기 새 파일을 만든다. 원래 파일의 모든 유효한 레코드를 새 파일에 복사한다. 원래 파일을 닫고 Kill 문을 사용하여 삭제한다. Name 문을 사용하여 원래 파일의 이름으로 변경한다. 다시 파일을 연다. - 18 - 경기분석컴퓨터프로그래밍 [실습하기] 랜덤 액세스 방식으로 파일 읽고 저장 폼에 컨트롤 추가하기 2007년 2학기 각 컨트롤의 속성 설정 - 19 - 경기분석컴퓨터프로그래밍 [실습하기] 랜덤 액세스 방식으로 파일 읽고 저장 Type SungJuck Name As String * 10 Kor As String * 3 Mat As String * 3 Eng As String * 3 Cr_Lf As String * 2 End Type 성적(SungJuk) 구조체를 [프로젝트]->[모듈 추가] 메뉴를 사용하여 모듈 추가 2007년 2학기 - 20 - 경기분석컴퓨터프로그래밍 [실습하기] 랜덤 액세스 방식으로 파일 읽고 저장 Private Sub cmdSave_Click() Dim i As Integer Dim Sung(1 To 3) As SungJuck 프로젝트를 실행 Sung(1).Name = "홍길동" Sung(1).Kor = "99" Sung(1).Mat = "88" Sung(1).Eng = "77" Sung(1).Cr_Lf = vbCrLf Sung(2).Name = "홍길순" Sung(2).Kor = "90" Sung(2).Mat = "86" Sung(2).Eng = "80" Sung(2).Cr_Lf = vbCrLf Sung(3).Name = "이몽룡" Sung(3).Kor = "80" Sung(3).Mat = "88" Sung(3).Eng = "90" Sung(3).Cr_Lf = vbCrLf Open "g:\random_save.txt“ For Random As #1 Len = Len(Sung(1)) For i = 1 To 3 Put #1, i, Sung(i) Next i 파일을 저장하기 위한 이벤트 핸들러 작성 Close #1 End Sub 2007년 2학기 - 21 - 경기분석컴퓨터프로그래밍 [실습하기] 랜덤 액세스 방식으로 파일 읽고 저장 텍스트 파일의 내용을 플렉스 그리드에 출력하기 위한 이벤트 핸들러 작성 프로그램 실행 Private Sub cmdDisplay_Click() Dim Sung(1 To 3) As SungJuck Open "G:\random_save.txt" For Random As #1 Len = Len(Sung(1)) For i = 1 To 3 Get #1, i, Sung(i) MSFlexGrid1.TextMatrix(i, 0) = Sung(i).Name MSFlexGrid1.TextMatrix(i, 1) = Sung(i).Kor MSFlexGrid1.TextMatrix(i, 2) = Sung(i).Mat MSFlexGrid1.TextMatrix(i, 3) = Sung(i).Eng Next i Close #1 End Sub 2007년 2학기 - 22 - 경기분석컴퓨터프로그래밍