본문 바로가기

Visual Std 2010

txt파일 읽어서 DB에 저장

아래에 있는 예제는 UNIX서버에 있는 txt파일을 로칼PC로 FTP를 통해

전송한후 그 파일을 불러서 행구분을 하고 "|" 구분자를 통해 항목별로 열구분을  한뒤

그리드뷰에 출력하는 예제입니다.

옆에 DB저장 버튼은 그리드뷰에 뿌려진 데이터를 DB에 저장하게 됩니다.

 

Form 디자인입니다. 디자인은 다소 허접하지만 나름대로 깔끔한 디자인이라 미적감각이

있으신분들은 이해하실껍니다. ^^;

 

 

아래는 VB.net 소스입니다.

Public Class QMS_JOBDAN
    Dim fileReader As String


    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Try
            '다운로드할 ftp주소


            Dim u As New Uri(System.IO.Path.Combine("ftp://@@@.@@@.@@@.@@@/aa/bb/cc/", "jobdan.txt"))

 

            'c:에 다운로드
            Dim downFile As String = System.IO.Path.Combine("C:\", "jobdan.txt")

 

            '리퀘스트작성

            Dim ftpReq As System.Net.FtpWebRequest = CType(System.Net.WebRequest.Create(u), System.Net.FtpWebRequest)

 

            '아이디,비번입력

            ftpReq.Credentials = New System.Net.NetworkCredential("아이디", "비번") 'ftp 서버 아이디,비번

 

            '리퀘스트메소드에 다운로드
            ftpReq.Method = System.Net.WebRequestMethods.Ftp.DownloadFile
            ftpReq.KeepAlive = False
            ftpReq.UseBinary = False
            ftpReq.UsePassive = False

 

            '리스폰스취득

            Dim ftpRes As System.Net.FtpWebResponse = CType(ftpReq.GetResponse(), System.Net.FtpWebResponse)

 

            '화일 다운로드하기위에 스트림취득
            Dim resStrm As System.IO.Stream = ftpRes.GetResponseStream()

 

            '다운로드할 화일을 엽니다.
            Dim fs As System.IO.FileStream = New System.IO.FileStream(downFile, System.IO.FileMode.Create, System.IO.FileAccess.Write)

 

            '전송

            Dim buffer(1024) As Byte


            While (True)
                Dim readSize As Integer = resStrm.Read(buffer, 0, buffer.Length)
                If (readSize = 0) Then
                    Exit While
                End If

                fs.Write(buffer, 0, readSize)
            End While

 

            fs.Close()
            resStrm.Close()


        Catch ex As Exception
            'Throw New Exception(ex.Message)
            System.Windows.Forms.MessageBox.Show(ex.ToString())
        End Try

 

        Dim tmpstr As String = My.Computer.FileSystem.ReadAllText("C:\jobdan.txt", System.Text.Encoding.GetEncoding(949))  ' 문자열 가져옴(한글이 포함된경우 깨지는 현상이 있어 인코딩을 하여 한글깨짐을 방지함.

        If tmpstr <> "" Then

            Dim rowArray As String() = tmpstr.Split(vbLf)                     ' 문자열을 잘라서 문자열 배열에 할당

            Dim i As Integer

 

            For i = 1 To rowArray.Length Step 2

                Dim colArray As String() = rowArray(i).Split("|")        ' 칼럼구분자로 문자열 배열 만듬

                If Asc(colArray(0).Chars(0)) = 28 Then  '<--총 28개 컬럼

                    tmpstr = colArray(0)

                    colArray(0) = tmpstr.Substring(1)

                End If

                DataGridView1.Rows.Add(colArray)      'dgvResult                ' DataGridView에 Row 추가

            Next i

 

        End If


        If DataGridView1.RowCount > 0 Then
            Button2.Enabled = True
        Else
            MessageBox.Show("조회된 자료가 없습니다.")
            Return
        End If

 

    End Sub

 

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click

        Try
            For i = 0 To DataGridView1.RowCount - 1 Step 1
                Me.QmS_JOBDANTableAdapter1.InsertQuery(DataGridView1.Item(0, i).Value.ToString,
                                                       DataGridView1.Item(1, i).Value.ToString,
                                                       DataGridView1.Item(2, i).Value.ToString,
                                                       DataGridView1.Item(3, i).Value.ToString,
                                                       DataGridView1.Item(4, i).Value.ToString,
                                                       DataGridView1.Item(5, i).Value.ToString,
                                                       DataGridView1.Item(6, i).Value.ToString,
                                                       DataGridView1.Item(7, i).Value.ToString,
                                                       DataGridView1.Item(8, i).Value.ToString,
                                                       DataGridView1.Item(9, i).Value.ToString,
                                                       DataGridView1.Item(10, i).Value.ToString,
                                                       DataGridView1.Item(11, i).Value.ToString,
                                                       DataGridView1.Item(12, i).Value.ToString,
                                                       DataGridView1.Item(13, i).Value.ToString,
                                                       DataGridView1.Item(14, i).Value.ToString,
                                                       DataGridView1.Item(15, i).Value.ToString,
                                                       DataGridView1.Item(16, i).Value.ToString,
                                                       DataGridView1.Item(17, i).Value.ToString,
                                                       DataGridView1.Item(18, i).Value.ToString,
                                                       DataGridView1.Item(19, i).Value.ToString,
                                                       DataGridView1.Item(20, i).Value.ToString,
                                                       DataGridView1.Item(21, i).Value.ToString,
                                                       DataGridView1.Item(22, i).Value.ToString,
                                                       DataGridView1.Item(23, i).Value.ToString,
                                                       DataGridView1.Item(24, i).Value.ToString,
                                                       DataGridView1.Item(25, i).Value.ToString,
                                                       DataGridView1.Item(26, i).Value.ToString,
                                                       DataGridView1.Item(27, i).Value.ToString)
            Next i


            MessageBox.Show("총 " + CStr(DataGridView1.RowCount) + "건 등록완료")

            Button2.Enabled = False


        Catch ex As Exception
            MessageBox.Show(ex.Message)
            Return
        End Try

 

    End Sub
End Class
 

이상입니다.^^