以下的程序代碼示范如何將“多格式文本文 件.txt”中的三種格式數據解析出來並分別顯示於各自的DataGridVIEw控 件中。相關程序代碼列示如下:
private void CH1_DemoForm035_Load(object sender, EventArgs e)
{
txtResult.Text = File.ReadAllText(@"Text\多格式文本文 件.txt");
DataGridVIEw1.ColumnHeadersVisible = true;
// 設定欄標題樣式。
DataGridViewCellStyle columnHeaderStyle = new DataGridVIEwCellStyle();
columnHeaderStyle.BackColor = Color.Beige;
columnHeaderStyle.Font = new Font ("Verdana", 9, FontStyle.Bold);
DataGridVIEw1.ColumnHeadersDefaultCellStyle = columnHeaderStyle;
// 設定 DataGridVIEw 控件的數據行數目。
DataGridVIEw1.ColumnCount = 3;
// 設定各數據行的標題名稱。
DataGridVIEw1.Columns[0].Name = "類別編號";
DataGridVIEw1.Columns[1].Name = "類別名稱";
DataGridVIEw1.Columns[2].Name = "說明";
DataGridView1.AutoSizeColumnsMode = DataGridVIEwAutoSizeColumnsMode.AllCells;
DataGridVIEw2.ColumnHeadersVisible = true;
DataGridVIEw2.ColumnHeadersDefaultCellStyle = columnHeaderStyle;
// 設定 DataGridVIEw 控件的數據行數目。
DataGridVIEw2.ColumnCount = 4;
// 設定各數據行的標題名稱。
DataGridVIEw2.Columns[0].Name = "產品編號";
DataGridVIEw2.Columns[1].Name = "產品名稱";
DataGridVIEw2.Columns[2].Name = "單位數量";
DataGridVIEw2.Columns[3].Name = "單價";
DataGridView2.AutoSizeColumnsMode = DataGridVIEwAutoSizeColumnsMode.AllCells;
DataGridVIEw3.ColumnHeadersVisible = true;
DataGridVIEw3.ColumnHeadersDefaultCellStyle = columnHeaderStyle;
// 設定 DataGridVIEw 控件的數據行數目。
DataGridVIEw3.ColumnCount = 3;
// 設定各數據行的標題名稱。
DataGridVIEw3.Columns[0].Name = "貨運公司編號";
DataGridVIEw3.Columns[1].Name = "貨運公司名稱";
DataGridVIEw3.Columns[2].Name = "電話";
DataGridView3.AutoSizeColumnsMode = DataGridVIEwAutoSizeColumnsMode.AllCells;
}
private void btnParseTextFiles_Click(object sender, EventArgs e)
{
using (TextFieldParser myReader =new TextFIEldParser(@"Text\多格式 文本文件.txt"))
{
// 定義三種格式之各欄的寬度與分 隔字符。
int[] FirstFormat = { 5, 10, -1 };
int[] SecondFormat = { 6, 10, 17, -1 };
string[] ThirdFormat = { "," };
this.DataGridVIEw1.Rows.Clear();
this.DataGridVIEw2.Rows.Clear();
this.DataGridVIEw3.Rows.Clear();
string[] CurrentRow;
while (!myReader.EndOfData)
{
try
{
string RowType = myReader.PeekChars(2);
switch (RowType)
{
case "CK":
myReader.TextFieldType = FIEldType.FixedWidth;
myReader.FIEldWidths = FirstFormat;
// 或是 myReader.SetFIEldWidths(FirstFormat);
CurrentRow = myReader.ReadFIElds();
this.DataGridVIEw1.Rows.Add (CurrentRow);
break;
case "PB":
myReader.TextFieldType = FIEldType.FixedWidth;
myReader.FIEldWidths = SecondFormat;
// 或是myReader.SetFIEldWidths (SecondFormat);
CurrentRow = myReader.ReadFIElds ();
this.DataGridVIEw2.Rows.Add(CurrentRow);
break;
case "SP":
myReader.TextFieldType = FIEldType.Delimited;
myReader.Delimiters = ThirdFormat;
// 或是 myReader.SetDelimiters(ThirdFormat);
CurrentRow = myReader.ReadFIElds();
this.DataGridVIEw3.Rows.Add (CurrentRow);
break;
}
}
catch (MalformedLineException ex)
{
MessageBox.Show("行" + ex.Message + " 是無效的。略過。 ");
}
}
// 排序各個 DataGridVIEw 控 件的內容。
DataGridView1.Sort(DataGridVIEw1.Columns[0],
System.ComponentModel.ListSortDirection.Ascending);
DataGridView2.Sort(DataGridVIEw2.Columns[0],
System.ComponentModel.ListSortDirection.Ascending);
DataGridView3.Sort(DataGridVIEw3.Columns[0],
System.ComponentModel.ListSortDirection.Ascending);
}
}
請注意:
在使用Visual Basic的My對象(或是說My快捷方式 )之前,必須先在項目中添加對Microsoft.VisualBasic.dll的引用,然後如下 所示導入適當的命名空間:
using Microsoft.VisualBasic.Devices;
如此一來,就可以在Visual C# 中使 用與My相似的語法來撰寫程序。