ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 4091|ตอบกลับ: 1

[VB.NET] การแยกชุดข้อมูลออกจากกันด้วยเครื่องหมายหลายแบบด้วย TextFieldParser

[คัดลอกลิงก์]

308

กระทู้

498

โพสต์

5971

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
5971




เวลาที่เราทำการแยกแยะข้อมูล (Parser) ด้วยเครื่องหมาย หรือสัญลักษณ์ที่คั่นอยู่ระหว่างข้อมูล (Delimited) ในเท็กซ์ไฟล์ ปกติก็มักจะเจอกับรูปแบบตัวแยกที่แน่นอนตายตัว คือมีแค่แบบเดียว เช่น เครื่องหมายคอมม่า (,) หรือช่องว่าง อย่างใดอย่างหนึ่ง เรียกได้ว่าหากินกันง่ายๆสบายๆ แต่ทว่าบางครั้งชุดข้อมูลมันก็มาแบบแปลกๆ คือมีสารพัดตัวแยกนี่ซิ แล้วจะทำอย่างไร??? วันนี้แอดมินเลยมาขอนำเสนอความเก่งของ VB.Net คือการใช้ TextFieldParser ดังต่อไปนี้ ...


มาดูโค้ดกันเถอะ ...
  1. ' / --------------------------------------------------------------------
  2. ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
  3. ' / eMail : thongkorn@hotmail.com
  4. ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
  5. ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
  6. ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
  7. ' / Purpose: Process a delimited file with many signs.
  8. ' / Microsoft Visual Basic .NET (2010)
  9. ' /
  10. ' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
  11. ' / You can modify and/or distribute without to inform the developer.
  12. ' / --------------------------------------------------------------------
  13. 'Imports System.IO

  14. Public Class frmParserText

  15.     Private strFile As String = String.Empty

  16.     Private Sub frmParserText_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  17.         Call SetupDGVData()
  18.     End Sub

  19.     Private Sub btnImport_Click(sender As System.Object, e As System.EventArgs) Handles btnImport.Click
  20.         Dim OpenFile As New OpenFileDialog()
  21.         ' ระบุ Path เริ่มต้น (Initial) โดยผมเลือกตำแหน่งของโปรเจคปัจจุบัน
  22.         OpenFile.InitialDirectory = MyPath(Application.StartupPath)
  23.         OpenFile.FileName = ""
  24.         ' กำหนดให้เลือกกรอง (Filter) เฉพาะเท็กซ์ไฟล์ (Text File)
  25.         OpenFile.Filter = "Text File (*.txt)|*.txt"

  26.         ' http://msdn.microsoft.com/en-us/library/c7ykbedk.aspx
  27.         ' http://msdn.microsoft.com/en-us/library/system.windows.forms.dialogresult.aspx
  28.         ' .NET มีดีอย่างตรงที่ไม่ต้องเรียก Component มาใช้งาน
  29.         Dim Res As System.Windows.Forms.DialogResult = OpenFile.ShowDialog()
  30.         ' มีการกด Cancel ให้ออกไปเลย ... ดีกว่า VB6 เยอะเลยแบบนี้ ... ยอมรับ - Accept
  31.         If Res = System.Windows.Forms.DialogResult.Cancel Then Return
  32.         '// เรียกไฟล์ตัวอย่าง
  33.         strFile = IO.Path.Combine(OpenFile.FileName)
  34.         dgvData.Rows.Clear()
  35.         '// เริ่มต้นทำการแยกข้อมูล
  36.         Call ParserText()
  37.     End Sub

  38.     ' / --------------------------------------------------------------------
  39.     ' / Parser Text with delimited.
  40.     Private Sub ParserText()
  41.         '// ประกาศ reader ให้เป็นการอ่านข้อมูลเพื่อทำการแยก (TextFieldParser)
  42.         Dim reader As Microsoft.VisualBasic.FileIO.TextFieldParser = My.Computer.FileSystem.OpenTextFieldParser(strFile)

  43.         '// กำหนด reader ด้วย TextFieldType เพื่อทำการแยกชุดข้อมูลออกจากกัน
  44.         reader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
  45.         '// ตั้งค่าให้ reader แยกชุดข้อมูลด้วเครื่องหมายคอมม่า (,) Tap และไปป์ (|)
  46.         reader.Delimiters = New String() {",", vbTab, "|"}
  47.         '// กรณีที่บรรทัดนั้นมีเครื่องหมาย // ก็ไม่ต้องไปสนใจมัน หรือข้ามมันไปเลย
  48.         reader.CommentTokens = New String() {"//"}

  49.         '// วนรอบการอ่านข้อมูลทีละบรรทัด
  50.         Do While Not reader.EndOfData
  51.             Try
  52.                 '// แยกชุดข้อมูลออกจากกันทีละบรรทัดด้วยการใช้ ReadFields method
  53.                 Dim arrFields As String() = reader.ReadFields()

  54.                 '//
  55.                 Dim dgvRow As New DataGridViewRow
  56.                 Dim dgvCell As DataGridViewCell
  57.                 '// แยกข้อมูลออกมาทีละหลัก
  58.                 For Each strField As String In arrFields
  59.                     '// รับค่าเข้ามาทีละเซลล์ (ไฟล์ตัวอย่างมี 3 หลัก)
  60.                     dgvCell = New DataGridViewTextBoxCell
  61.                     dgvCell.Value = strField
  62.                     dgvRow.Cells.Add(dgvCell)
  63.                 Next
  64.                 '// เพิ่มเข้าไปในแถวของตารางกริด
  65.                 dgvData.Rows.Add(dgvRow)

  66.                 '// Trap Error
  67.             Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
  68.                 MessageBox.Show(ex.Message)
  69.             End Try
  70.         Loop

  71.         '// Close the reader
  72.         reader.Close()
  73.     End Sub

  74.     ' / --------------------------------------------------------------------------------
  75.     '// Initialize DataGridView @Run Time
  76.     Private Sub SetupDGVData()
  77.         With dgvData
  78.             .RowHeadersVisible = False
  79.             .AllowUserToAddRows = False
  80.             .AllowUserToDeleteRows = False
  81.             .AllowUserToResizeRows = False
  82.             .MultiSelect = False
  83.             .SelectionMode = DataGridViewSelectionMode.FullRowSelect
  84.             .ReadOnly = True
  85.             .Font = New Font("Tahoma", 9)
  86.             ' Columns Specified
  87.             .Columns.Add("ID", "ID")
  88.             .Columns.Add("Name", "Name")
  89.             .Columns.Add("Point", "Point")
  90.             ' Autosize Column
  91.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  92.             .AutoResizeColumns()
  93.             '// Even-Odd Color
  94.             .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
  95.             ' Adjust Header Styles
  96.             With .ColumnHeadersDefaultCellStyle
  97.                 .BackColor = Color.Navy
  98.                 .ForeColor = Color.Black
  99.                 .Font = New Font("Tahoma", 9, FontStyle.Bold)
  100.             End With
  101.         End With
  102.     End Sub

  103.     ' / --------------------------------------------------------------------------------
  104.     ' / Get my project path
  105.     ' / AppPath = C:\My Project\bin\debug
  106.     ' / Replace "\bin\debug" with ""
  107.     ' / Return : C:\My Project\
  108.     Function MyPath(ByVal AppPath As String) As String
  109.         '/ MessageBox.Show(AppPath);
  110.         AppPath = AppPath.ToLower()
  111.         '/ Return Value
  112.         MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "")
  113.         '// If not found folder then put the \ (BackSlash) at the end.
  114.         If Microsoft.VisualBasic.Right(MyPath, 1) <> "" Then MyPath = MyPath & ""
  115.     End Function

  116.     Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
  117.         Me.Close()
  118.     End Sub

  119.     Private Sub frmParserText_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  120.         Me.Dispose()
  121.         Application.Exit()
  122.     End Sub

  123. End Class
คัดลอกไปที่คลิปบอร์ด

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

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

58

โพสต์

10

เครดิต

Member

Rank: 2

เครดิต
10
โพสต์ 2022-10-25 19:03:01 | ดูโพสต์ทั้งหมด

ขอบคุณครับ
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-3-29 04:26 , Processed in 0.315287 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้