thongkorn โพสต์ 2020-3-10 16:41:23

[VB.NET] การอ่านข้อมูลไฟล์ CSV จากลิ้งค์ (URL) โดยตรง (ข้อมูลการเฝ้าระวัง COVID-19 ประเทศไทย)

http://www.g2gnet.com/webboard/images/vbnet/covid19thailand.png

CSV ย่อมาจาก Comma Separated Value เป็นไฟล์ข้อความประเภทหนึ่ง ที่ใช้สำหรับเก็บข้อมูลในรูปแบบตาราง โดยใช้เครื่องหมายจุลภาค หรือคอมม่า (,) ในการแบ่งแต่ละคอลัมภ์ โดยปกติเราสามารถบันทึกไฟล์จาก Microsoft Excel ออกมาเป็น CSV ไฟล์ได้โดยตรง หรืออาจได้ไฟล์ CSV จากการ export ไฟล์จากระบบฐานข้อมูลอื่นๆ ... บทความชุดนี้จะใช้การอ่านไฟล์ CSV จากลิ้งค์โดยตรง คือจะไม่บันทึกไฟล์ CSV ลงในเครื่องคอมฯก่อน แต่จะใช้การอ่านข้อมูลจากไฟล์ CSV ผ่านเว็บไซต์ไปเลย โดยแอดมินจะใช้ ข้อมูลการเฝ้าระวัง COVID-19 ของประเทศไทย ...

ข้อมูลไฟล์ CSV (Comma Separated Value) ... http://www.g2gnet.com/webboard/images/vbnet/covid19csv.png

มาดูโค้ดกันเถอะ ...
Imports System.Net
Imports System.IO

Public Class frmWatchCovid19

    Private Sub frmWatchCovid19_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      lblCount.Text = ""
      txtURL.Text = "https://raw.githubusercontent.com/M4R14/covid-19-thailand/master/data.csv"
    End Sub

    Private Sub btnReadCSV_Click(sender As System.Object, e As System.EventArgs) Handles btnReadCSV.Click
      Try
            '//
            Dim tbl As New DataTable
            tbl.Columns.Add("Date", GetType(String))
            tbl.Columns.Add("Check", GetType(Integer))
            tbl.Columns.Add("Confirmed", GetType(Integer))
            tbl.Columns.Add("Recovered", GetType(Integer))
            tbl.Columns.Add("Deaths", GetType(Integer))
            '/
            Dim strReader As New StringReader(DownloadCSV(txtURL.Text))
            Dim line = strReader.ReadLine
            Dim RowCount As Integer = 0
            While String.IsNullOrEmpty(line) = False Or Not IsNothing(line)
                '// Split comma delimited.
                Dim parts = line.Split(","c)
                If parts(0).Trim.ToLower <> "date" Then
                  tbl.Rows.Add(New Object() { _
                            parts(0).ToString.Trim, _
                            parts(1).ToString.Trim, _
                            parts(2).ToString.Trim, _
                            parts(3).ToString.Trim, _
                            parts(4).ToString.Trim})
                  RowCount += 1
                End If
                '// Get new line.
                line = strReader.ReadLine
            End While
            '//
            dgvData.DataSource = tbl
            lblCount.Text = "จำนวน: " & RowCount & " รายการ."
            '// Setup DataGridView
            Call InitDataGrid()

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

    ' / -----------------------------------------------------------------------------
    ' / Use StreamReader class to download csv without the need to save it locally.
    Public Function DownloadCSV(ByVal url As String) As String
      Dim httpWebRequest As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest)
      Dim httpWebResponse As HttpWebResponse = CType(httpWebRequest.GetResponse(), HttpWebResponse)
      Dim streamReader As StreamReader = New StreamReader(httpWebResponse.GetResponseStream())
      Dim results As String = streamReader.ReadToEnd()
      streamReader.Close()
      Return results
    End Function

    Private Sub InitDataGrid()
      '//
      With dgvData
            .RowHeadersVisible = True
            .AllowUserToAddRows = False
            .AllowUserToDeleteRows = False
            .AllowUserToResizeColumns = True
            .AllowUserToResizeRows = False
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
            .MultiSelect = False
            '// Data rows
            .Font = New Font("Tahoma", 11)
            .RowTemplate.MinimumHeight = 27
            .RowTemplate.Height = 27
            '// Column Header
            .ColumnHeadersHeight = 27
            .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize
            '// -------------- Dot Net Bar ----------------
            '// Autosize Column
            .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
            '.AutoResizeColumns()
            '// Even-Odd Color
            .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
            ' Adjust Header Styles
            With .ColumnHeadersDefaultCellStyle
                .BackColor = Color.Navy
                .ForeColor = Color.Black
                .Font = New Font("Tahoma", 12, FontStyle.Bold)
            End With
            .RowHeadersDefaultCellStyle.SelectionBackColor = Color.Empty
      End With
      '//
      With dgvData.Columns(0)
            .Name = "Date"
            .HeaderText = "วันที่"
            .ReadOnly = True
      End With
      With dgvData.Columns(1)
            .Name = "check"
            .HeaderText = "เฝ้าระวัง"
            .DefaultCellStyle.Format = "n0"
      End With
      With dgvData.Columns(2)
            .Name = "Confirmed"
            .HeaderText = "ยืนยัน"
      End With
      With dgvData.Columns(3)
            .Name = "Recovered"
            .HeaderText = "รักษาหาย"
      End With
      With dgvData.Columns(4)
            .Name = "Deaths"
            .HeaderText = "เสียชีวิต"
      End With
      '//
      For i = 1 To 4
            With dgvData.Columns(i)
                .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ReadOnly = True
            End With
      Next
    End Sub

End Class
ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...

g2gsoftuser โพสต์ 2022-10-25 15:31:11

ขอบคุณครับ
หน้า: [1]
ดูในรูปแบบกติ: [VB.NET] การอ่านข้อมูลไฟล์ CSV จากลิ้งค์ (URL) โดยตรง (ข้อมูลการเฝ้าระวัง COVID-19 ประเทศไทย)