首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

用 VC#2005 解析含多種格式的文字檔案 (2) - 完整程式碼實作

     編輯:關於C語言

完整程式碼:三種格式解析顯示於 DataGridView

private void CH1_DemoForm035_Load(object sender, EventArgs e)
{
    txtResult.Text = File.ReadAllText(@"Text\多格式文字檔.txt");
    // 設定三個 DataGridView 欄位標題、樣式、自動調整寬度...
}

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;
                        CurrentRow = myReader.ReadFields();
                        this.DataGridView1.Rows.Add(CurrentRow);
                        break;
                    case "PB":
                        myReader.TextFieldType = FieldType.FixedWidth;
                        myReader.FieldWidths = SecondFormat;
                        CurrentRow = myReader.ReadFields();
                        this.DataGridView2.Rows.Add(CurrentRow);
                        break;
                    case "SP":
                        myReader.TextFieldType = FieldType.Delimited;
                        myReader.Delimiters = ThirdFormat;
                        CurrentRow = myReader.ReadFields();
                        this.DataGridView3.Rows.Add(CurrentRow);
                        break;
                }
            }
            catch (MalformedLineException ex)
            {
                MessageBox.Show("行 " + ex.Message + " 無效,略過。");
            }
        }
        // 三個 Grid 依第一欄遞增排序
        DataGridView1.Sort(DataGridView1.Columns[0], ListSortDirection.Ascending);
        DataGridView2.Sort(DataGridView2.Columns[0], ListSortDirection.Ascending);
        DataGridView3.Sort(DataGridView3.Columns[0], ListSortDirection.Ascending);
    }
}

關鍵技術點

  • PeekChars(2):僅讀取前 2 字元判斷格式,**不移動讀取位置**
  • TextFieldType:切換 FixedWidth / Delimited 模式
  • FieldWidths / Delimiters:依格式設定欄位寬度或分隔字元
  • ReadFields():解析當前行回傳字串陣列
  • MalformedLineException:捕捉格式錯誤行,略過繼續
  • 需引用 Microsoft.VisualBasic.dll 並 using Microsoft.VisualBasic.Devices;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved