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 -
경기분석컴퓨터프로그래밍