Chap 11. 비주얼베이직 파일 시스템

Download Report

Transcript Chap 11. 비주얼베이직 파일 시스템

IT COOKBOOK
Chap 11. 비주얼베이직 파일 시스템
한빛미디어㈜
-1-
ehanbit.net
IT COOKBOOK
01. 파일 다루기
02. 순차 액세스 파일
03. 랜덤 액세스 파일과 이진액세스 파일
한빛미디어㈜
-2-
ehanbit.net
파일 다루기
IT COOKBOOK
파일 다루기
비주얼 베이직 제공하는 파일 액세스 방법
순차(Sequential) 방식
순차적으로 텍스트 파일을 읽거나 저장할 때 사용
데이터는 ANSI문자로 저장
랜덤(Random) 방식
고정된 길이의 레코드를 읽거나 저장할 때 사용
이진(Binary) 방식
임의로 구조화되어 있거나 그렇지 않은 파일을 읽거나 저장할
때 사용
파일을 다루기
① Open 문을 이용하여 액세스 방식에 따라 파일을 연다.
② 필요한 함수나 문을 사용하여 파일의 내용을 읽거나 저장
한다.
③ Close 문을 사용하여 열려진 파일을 닫는다.
한빛미디어㈜
-3-
ehanbit.net
IT COOKBOOK
파일을 읽거나 저장하기 위해 사용하는 함수/명령문
한빛미디어㈜
-4-
ehanbit.net
IT COOKBOOK
Open 문
파일을 읽거나 저장할 수 있도록 하기 위해 사용하는 구문
구문 형식
Open pathname For mode [Access access] [lock]
As [#] filenumber [Len = reclength]
Open 문의 구성 요소
한빛미디어㈜
-5-
ehanbit.net
IT COOKBOOK
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 '랜덤 방식으로 열어줌
액세스 종류
한빛미디어㈜
-6-
ehanbit.net
IT COOKBOOK
예
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로 설정됨 (Input  읽기전용)
Lock
현재 사용 중인 파일을 다른 사용자가 사용할 수 있도록 하거나,
사용하지 못하도록 설정
Shared
한빛미디어㈜
-7-
ehanbit.net
IT COOKBOOK
01. 파일 다루기
02. 순차 액세스 파일
03. 랜덤 액세스 파일과 이진액세스 파일
한빛미디어㈜
-8-
ehanbit.net
순차 액세스 파일
IT COOKBOOK
순차 액세스 파일
특징
전형적인 텍스트 편집기로 작성된 파일, 즉 레코드의 순차 데
이터로 분류되지 않은 데이터로 된 파일과 텍스트로만 구성된
파일을 처리할 때 유용
순차 액세스를 위해 파일 열기는 다음 작업들 중 하나에 의해
실행
파일의 내용을 읽어오는 경우 (Input).
데어터를 파일에 기록하는 경우
Output : 기존의 데이터를 덮어쓰는 경우.
Append: 기존의 데이터의 끝에 새로운 데이터를 추가하는 경우.
Open 문
파일을 열기 위해 사용
구문 형식
한빛미디어㈜
Open 파일이름(pathname) For [ Input | Output | Append] As filenumber
[Len = 버퍼크기(buffersize)
]
-9ehanbit.net
순차파일 열기
IT COOKBOOK
파일 열기
Input을 위해 순차 파일을 열 때는 파일이 이미 있어야 하며,
파일이 없으면 오류 발생
Output이나 Append를 위해 파일을 여는 경우 파일이 존재하
지 않더라도 새로 파일을 생성하기 때문에 오류가 발생하지
않음
함수의 종류
한빛미디어㈜
- 10 -
ehanbit.net
순차파일 읽기
IT COOKBOOK
Line Input #파일번호, 변수명
파일번호: 읽어올 데이터의 파일번호
변수명: 읽어올 내용을 보관할 파일명
한번에 한줄씩 파일내용을 읽어옴
예) Line Input #1, strTemp
Input #파일번호, 변수목록
예) Input #1, strName, strTel, strAdd
Input( ) 함수
변수명 = input(읽어올 문자수, #파일번호)
예) strTemp=Input(20,#1)
파일번호 #1에서 20개의 문자를 읽어옴
한빛미디어㈜
- 11 -
ehanbit.net
순차파일 저장
IT COOKBOOK
파일은 Append나 Output으로 지정되어야 한다.
파일 기록
Print #파일번호, [변수목록]
파일번호: 저장에 사용될 파일 번호
변수목록: 저장될 내용이 담긴 변수명의 목록이나 문자열
지정된 변수목록에 있는 내용을 그대로 파일에 기록
Write #파일번호, [변수목록]
변수 내용중에서 문자열은 큰따옴표(“)로 감싸서 출력
데이터와 데이터는 콤마(,)를 삽입하여 구분
Input#문을 이용해서 읽어와야 정상적으로 표시
한빛미디어㈜
- 12 -
ehanbit.net
순차파일 닫기
IT COOKBOOK
Close #파일번호
프로그램이 종료할때 자동으로 닫힘
가능하면 Close 문을 이용하여 닫아줌
필요없는 데이터가 남아있게 되어 자원 낭비
예) Close 1, 2  파일번호 1,2 닫음
Close #1  파일번호 1 닫음
Close  모든 파일 닫음
한빛미디어㈜
- 13 -
ehanbit.net
[실습하기] 텍스트박스의 내용 저장하고
불러오기
IT COOKBOOK
 폼에 컨트롤 추가하기





 각 컨트롤의 속성 설정
한빛미디어㈜
- 14 -
ehanbit.net
[실습하기] 텍스트박스의 내용 저장하고
불러오기
IT COOKBOOK
 ‘파일 읽기’ 버튼의 이벤트 핸들러 작성
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 = “C:\"
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
'읽어온 내용을 텍스트박스에 넣음
- 15 ehanbit.net
한빛미디어㈜End Sub
[실습하기] 텍스트박스의 내용 저장하고
불러오기
IT COOKBOOK
 파일 저장과 종료 버튼 이벤트 핸들러 작성
Private Sub cmdFileSave_Click()
Dim Save_File As String
If Save_File = "" Then
MsgBox "새 파일로 저장하겠습니까?", , "확인"
End If
Open “C:\Saved_File.txt" For Output As #1 ‘파일 열기
Print #1, txtEdit.Text
‘텍스트박스의 내용을 파일에 저장
Close #1
‘파일 닫기
End Sub
Private Sub cmdExit_Click()
End
End Sub
 프로젝트를 실행
한빛미디어㈜
- 16 -
ehanbit.net
IT COOKBOOK
01. 파일 다루기
02. 순차 액세스 파일
03. 랜덤 액세스 파일과 이진 액세스 파일
한빛미디어㈜
- 17 -
ehanbit.net
랜덤 액세스 파일
IT COOKBOOK
랜덤 액세스 방식
특징
일정한 길이의 레코드 단위로 파일을 읽고 쓰는 경우 랜덤 액
세스 방식을 많이 사용한다
파일을 열기 위해 Open 문 사용
Open 파일이름 [For Random] As filenumber Len = 레코드 길이
Len은 바이트 단위로 각 레코드의 크기를 지정하는 경우에 사용
레코드를 사용자 정의형(user-defined type)으로 선언해야 읽
거나 쓸 수 있다.
예) Type 사용자 정의형 이름
필드명1 As 데이터형
필드명2 As 데이터형
필드명3 As 데이터형
……………………….
End Type
한빛미디어㈜
- 18 -
ehanbit.net
IT COOKBOOK
Seek 문
파일의 포인터를 이동하기 위해 사용
구문 형식
파일 포인터를 옮길 때
Seek 파일번호, 위치
파일 포인터를 얻을 때
Long = Seek( 파일 번호 )
Put 문과 Get 문
레코드를 변수에 복사하기 위해서는 Get 문을 사용
파일에 레코드를 추가하거나 변경하기 위해서는 Put 문 사용
구문 형식
한빛미디어㈜
파일에서 레코드를 읽을 때
Get 파일번호, 레코드 위치, 변수
파일에 레코드를 쓸 때
Put 파일번호, 레코드
위치, 변수
- 19 -
ehanbit.net
[실습하기] 랜덤 액세스 방식으로 파일 IT
읽고
저장
COOKBOOK
 폼에 컨트롤 추가하기




 각 컨트롤의 속성 설정
한빛미디어㈜
- 20 -
ehanbit.net
[실습하기] 랜덤 액세스 방식으로 파일 IT
읽고
저장
COOKBOOK
 성적(SungJuk) 구조체를 [프로젝트]->[모듈 추가] 메뉴를
사용하여 모듈 추가
Private 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
한빛미디어㈜
- 21 -
ehanbit.net
[실습하기] 랜덤 액세스 방식으로 파일 IT
읽고
저장
COOKBOOK
 파일을 저장하기 위한 이벤트 핸들러 작성
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 “c:\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
한빛미디어㈜
- 22 -
ehanbit.net
[실습하기] 랜덤 액세스 방식으로 파일 읽고
저장
IT COOKBOOK
 텍스트 파일의 내용을 플렉스 그리드에 출력하기 위한 이벤트 핸들러 작성
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
한빛미디어㈜
- 23 -
ehanbit.net
IT COOKBOOK
이진액세스 파일
가공된 파일 구조를 읽어올 때 사용
입출력은 기본적으로 랜덤 액세스 모드와 유사하게
Get, Put 문을 사용하고, 형식도 거의 유사
랜덤 액세스와의 차이점
레코드 단위가 아니라 바이트 단위라는 점
 이진 액세스 파일은 파일의 크기를 작게 만들어야 하
는 경우 주로 사용
한빛미디어㈜
- 24 -
ehanbit.net
IT COOKBOOK
엑세스 방법에 따른 함수/명령문 비교
한빛미디어㈜
- 25 -
ehanbit.net
IT COOKBOOK
다음을 프로그램을 작성하시오
Txt 파일
00340HANMIHEE
00116KIMSUNGKON
00773SEOHUNKANG
…
400
097
400
txtNum
txtName
txtPoint
한빛미디어㈜
- 26 -
ehanbit.net
IT COOKBOOK
Private Type 고객관리
코드 As String * 5
이름 As String * 20
포인트 As String * 3
리턴 As String * 2
End Type
Dim custom As 고객관리
Dim fn As Integer
Dim i As Integer
한빛미디어㈜
- 27 -
ehanbit.net
IT COOKBOOK
Private Sub Form_Load()
fn = FreeFile
Open "고객관리.TXT" For Random As #1 Len = Len(custom)
i=1
Get #fn, i, custom
Me.txtNum = custom.코드
Me.txtName = custom.이름
Me.txtPoint = custom.포인트
End Sub
한빛미디어㈜
- 28 -
ehanbit.net
IT COOKBOOK
Private Sub cmdNext_Click()
If LOF(fn) / Len(custom) Then
i=i
Else
i=i+1
End If
Get #fn, i, custom
Me.txtNum = custom.코드
Me.txtName = custom.이름
Me.txtPoint = custom.포인트
End Sub
Private Sub cmdPrev_Click()
If i - 1 = 0 Then
i=1
Else
i=i-1
End If
Get #fn, i, custom
Me.txtNum = custom.코드
Me.txtName = custom.이름
Me.txtPoint = custom.포인트
End Sub
한빛미디어㈜
- 29 -
ehanbit.net
IT COOKBOOK
Private Sub cmdUpdate_Click()
custom.코드 = Me.txtNum
custom.이름 = Me.txtName
custom.포인트 = Me.txtPoint
Put #fn, i, custom
End Sub
한빛미디어㈜
- 30 -
ehanbit.net