학습목표 텍스트파일을다룰수있다. 스트림읽기, 쓰기를안다. 2
8.1 텍스트파일다루기 8.2 스트림읽기, 쓰기 3
텍스트파일 문자, 숫자, 단어들이하나이상의줄로구성 파일확장명 :.txt,.ini,.log, OpenFileDialog 컨트롤 : 파일의위치를사용자가쉽게선택가능 Filter 속성 : 파일의형식선택가능 ShowDialog 메서드 : 열기대화상자 FileName 속성 : 사용자가원하는위치확인 텍스트파일불러오기구분자 :, 또는 4
예제 8-1 아래자료를텍스트파일로만들어서이름을 student.txt 으로저장하고실행파일위치에둠 강한나,90,100,80 고유한,85,95,75 나보라,90,90,90 당찬나,80,80,80 마동창,99,88,77 student.txt 초기화면 실행화면 5
예제 8-1 컨트롤속성설정 컨트롤이름속성설정 Form Text 파일읽기 Button btnstudent Text 학생성적자료 ListBox lstresult 6
예제 8-1 코드작성 한글내용파일의한글코드처리 파일읽기 : IO.File.ReadAllLines( 파일이름 ) Let 절 : 배열의각변수에파일의내용입력 1. Private Sub btnstudent_click( ) Handles btnstudent.click 2. Dim KS_C_5601 As System.Text.Encoding = System.Text.Encoding.GetEncoding(949) ' 한글코드처리 3. Dim students() As String = IO.File.ReadAllLines("student.txt", KS_C_5601) 4. Dim query1 = From line In students 5. Let data = line.split(","c) 6. Let name = data(0) 7. Let kuk = CInt(data(1)) 8. Let eng = CInt(data(2)) 9. Let su = CInt(data(3)) 10. Select name, kuk, eng, su 11. For Each student In query1 12. lstresult.items.add(student.name) 13. Next 14. End Sub 7
예제 8-2 DataGridView 컨트롤을이용하여파일의여러항목을화면에출력 강한나,90,100,80 고유한,85,95,75 나보라,90,90,90 당찬나,80,80,80 마동창,99,88,77 student.txt 초기화면 실행화면 8
예제 8-2 컨트롤속성설정 컨트롤이름속성설정 Form Text 파일읽기 Button btnstudent Text 학생성적자료 DataGridView dgvstudent 9
예제 8-2 코드작성 DataGridView 컨트롤에데이터소스로질의연결 1. Private Sub btnstudent_click( ) Handles btnstudent.click 2. Dim KS_C_5601 As System.Text.Encoding = System.Text.Encoding.GetEncoding(949) 3. ' 한글코드처리 4. Dim students() As String = IO.File.ReadAllLines("student.txt", KS_C_5601) 5. Dim query1 = From line In students 6. Let data = line.split(","c) 7. Let name = data(0) 8. Let kuk = CInt(data(1)) 9. Let eng = CInt(data(2)) 10. Let su = CInt(data(3)) 11. Select name, kuk, eng, su 12. dgvstudent.datasource = query1.tolist 13. dgvstudent.currentcell = Nothing 14. End Sub 10
예제 8-2 코드작성 DataGridView 컨트롤의헤더이름바꾼예 아래소스추가 1. dgvstudent.columns("name").headertext = " 이름 2. dgvstudent.columns("kuk").headertext = " 국어 " 3. dgvstudent.columns("eng").headertext = " 영어 " 4. dgvstudent.columns("su").headertext = " 수학 " 헤더부분변경 11
예제 8-3 열기대화상자컨트롤이용하여파일내용을리스트박스에출력 초기화면 열기대화상자창 12
예제 8-3 컨트롤속성설정 컨트롤이름속성설정 Form Text 열기대화상자 Button btnstudent Text 학생성적자료 ListBox lstresult OpenFileDialog 실행결과 13
예제 8-3 코드작성 열기대화상자에서파일의위치를찾아서파일을클릭 1. Private Sub btnstudent_click( ) Handles btnstudent.click 2. Dim KS_C_5601 As System.Text.Encoding = System.Text.Encoding.GetEncoding(949) ' 한글 코드처리 3. Dim txtfile As String 4. OpenFileDialog1.ShowDialog() 5. txtfile = OpenFileDialog1.FileName 6. lstresult.datasource = IO.File.ReadAllLines(txtFile, KS_C_5601) 7. lstresult.selecteditem = Nothing 8. End Sub 14
8.1 텍스트파일다루기 8.2 스트림읽기, 쓰기 15
스트림읽기 텍스트파일을이용하여데이터를한줄단위로불러서사용 스트림리더 (StreamReader) 로텍스트파일읽기 1. IO.StreamReader를변수로선언하고, 그변수에 IO.File.OpenText를이용하여파일이름을할당 Dim 변수 As IO.StreamReader 변수 = IO.File.OpenText( 파일이름 ) 두과정을합쳐서다음과같이사용가능 => Dim 변수 As IO.StreamReader = IO.File.OpenText( 파일이름 ) 2. ReadLine을이용하여한줄단위로읽어서변수에할당변수1 = 변수.ReadLine 3. 파일의끝일때까지작업변수.EndOfStream 4. 파일을닫음변수.Close() 16
예제 8-4 score.txt 파일에서일치하는이름을화면에출력 Jane,JN,90,100,80 Sophia,SP,85,95,75 Jennifer,JF,90,90,90 Helen,HL,80,80,80 Steven,SV,99,88,77 초기화면 score.txt 실행화면 17
예제 8-4 컨트롤속성설정 컨트롤이름속성설정 Form Text 스트림리더 Label Text 찾고자하는이름은? Text 찾은이름은 TextBox txtname TabIndex 1 txtfind Button btnfind TabIndex 2 Text 이름찾기 18
예제 8-4 코드작성 score.txt 파일은미리실행파일위치에작성 1. Private Sub btnfind_click( ) Handles btnfind.click 2. Dim st As IO.StreamReader = IO.File.OpenText("score.txt") 3. Dim line As String 4. Dim foundflag As Boolean = False 5. Do While Not (foundflag Or st.endofstream) 6. line = st.readline 7. If line.split(","c)(1) = txtname.text.toupper Then 8. txtfind.text = line.split(","c)(0) 9. foundflag = True 10. End If 11. Loop 12. If Not foundflag Then 13. Dim str As String = " 이I름이없습니다." 14. MessageBox.Show(txtName.Text.ToUpper & str, "Error") 15. txtname.clear() 16. txtname.focus() 17. End If 18. End Sub 19
예제 8-5 test.txt 파일을읽어서리스트박스에출력 90 100 80 85 95 75 90 90 90 80 80 80 99 88 77 test.txt 초기화면 실행화면 20
예제 8-5 컨트롤속성설정 컨트롤이름속성설정 Form Text test.txt 파일불러점수보여주기 Button btnjumsu Text 점수 ListBox lstjumsu 21
예제 8-5 코드작성 1. Private Sub btnjumsu_click( ) Handles btnjumsu.click 2. Dim jumsu(14) As Integer 3. Dim temp() As String = IO.File.ReadAllLines("test.txt") 4. For i As Integer = 0 To 14 5. jumsu(i) = CInt(temp(i)) 6. lstjumsu.items.add(jumsu(i)) 7. Next 8. End Sub 22
스트림쓰기 텍스트파일을이용하여데이터를한줄단위로불러서사용 스트림라이터 (StreamWriter) 로텍스트파일ㅆ기 1. 파일을선택 2. IO.StreamWriter를변수로선언하고, 그변수에 IO.File.CreateText 를이용하여파일이름을할당 Dim 변수 As IO.StreamWriter 변수 = IO.File.CreateText( 파일이름 ) 두과정을합쳐서다음과같이사용하여도된다. => Dim 변수 As IO.StreamWriter = IO.File.CreateText( 파일이름 ) 3. WriteLine을이용하여한줄단위로파일에내용쓰기변수.WriteLine( 내용 ) 4. 파일을닫음변수.Close() 23
예제 8-6 파일생성 버튼클릭시 string.txt 파일생성하고, 파일출력 버튼클릭시리스트박스에파일내용출력 초기화면 생성버튼클릭 파일내용출력 24
예제 8-6 컨트롤속성설정 컨트롤이름속성설정 Form Text 파일에쓰기 Button btncreate Text 파일생성 btnprint Text 파일출력 ListBox lstresult 25
예제 8-6 코드작성 (1) 파일생성 버튼클릭시스트림쓰기를이용하여파일을하나만듬 1. Private Sub btnfcreate_click(...) Handles btnfcreate.click 2. Dim var As IO.StreamWriter = IO.File.CreateText("string.txt") 3. var.writeline(" 가나 ") 4. var.writeline(" 다라마 ") 5. var.writeline(" 바사아자차 ") 6. var.writeline(" 카타 ") 7. var.close() 8. MessageBox.Show(" 파일생성됨 ", " 파일상태 ") 9. End Sub 26
파일출력 버튼 예제 8-6 코드작성 (2) 1. Private Sub btnfprint_click(...) Handles btnfprint.click 2. Dim varout As IO.StreamReader = IO.File.OpenText("string.txt") 3. lstresult.items.clear() 4. Do While Not varout.endofstream 5. lstresult.items.add(varout.readline) 6. Loop 7. End Sub 27
My 네임스페이스 빠른접근을할수있도록설계되어폼을다루거나파일시스템을탐색하거나사용자나응용프로그램에대한정보를출력하려고할때사용 객체 My.Application My.Computer My.Forms My.Resources My.Settings My.User My.WebServices 기능 타이틀, 폴더정보, 버전정보등을포함하는정보제공 현재컴퓨터에위치한하드웨어, 소프트웨어, 파일에대한정보제공 현재비주얼스튜디오프로젝트에서폼에대한정보제공 응용자원에대한정보제공 응용세팅에대한정보제공 컴퓨터상에활성화된사용자정보제공 컴퓨터상에활성화된웹서비스정보제공 28
예제 8-7 현재사용하고있는컴퓨터의이름과컴퓨터의시간을화면에출력 폼에 2개버튼배치 초기화면 사용자이름 클릭 현재시간 클릭 29
예제 8-7 코드작성 메시지박스이용 1. Private Sub Button1_Click( ) Handles Button1.Click 2. MsgBox(My.User.Name,, "My 네임스페이스사용 ") 3. End Sub 4. Private Sub Button2_Click( ) Handles Button2.Click 5. MsgBox(My.Computer.Clock.LocalTime,, "My 네임스페이스사용 ") 6. End Sub 30
예제 8-8 예제 8-3 의열기대화상자컨트롤을이용하여파일의내용을텍스트박스에출력 초기화면 학생성적자료 버튼클릭 31
예제 8-8 컨트롤속성설정 컨트롤이름속성설정 Form Text 열기대화상자 Button btnstudent Text 학생성적자료 TextBox txtresult OpenFileDialog 32
예제 8-8 코드작성 1. Private Sub btnstudent_click(...) Handles btnstudent.click 2. Dim KS_C_5601 As System.Text.Encoding = _ 3. System.Text.Encoding.GetEncoding(949) ' 한글코드처리 4. Dim txtfile As String = "" 5. OpenFileDialog1.Filter = "Text files(*.txt) *.txt" 6. If OpenFileDialog1.ShowDialog() = DialogResult.OK Then txtfile=my.computer.filesystem.readalltext(openfiledialog1.filename, KS_C_5601) 7. txtresult.text = txtfile 8. End If 9. End Sub 33