• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 用Visual C#實現文件大批量處理

    發表于:2007-05-25來源:作者:點擊數: 標簽:大批量科研文件visual實現
    在科研、企業的數據處理中,有時會涉及大量的文件操作。在大量數據處理的時侯,有時需要進行多對一,或一對多的文件操作,即多個數據文件與一個數據文件進行信息交互,Microsoft的.NET 開發 利器C#提供了前所未有的高開發效率,在文件操作方面也有所體現。筆
    在科研、企業的數據處理中,有時會涉及大量的文件操作。在大量數據處理的時侯,有時需要進行多對一,或一對多的文件操作,即多個數據文件與一個數據文件進行信息交互,Microsoft的.NET開發利器C#提供了前所未有的高開發效率,在文件操作方面也有所體現。筆者基于.NET平臺,以C#開發工具,實現了如下功能:

      1、多個文本文件合并成一個文件;

      2、一個電子表格文件分成多個文件。

      一、編程任務描述

      1、從多個文件中讀取數據生成一個文本文件

      筆者是處理測井資料的時侯碰到這種編程需求,現有測井資料若干,每口井一個文件,為進一步處理現需要,將這些數據讀到一新文件中去,在實際處理,當然包括一定的計算與篩選及格式化。

      多個源文件在源文件路徑下,最終生成的目標文件存在在目標文件路徑下。

      例子數據在sourcefile 文件夾下:1.bln,2.bln,3.bln,4,bln,5,bln,6.bln共六個文件,它們合并后生成的total.txt文件在aimfile子文件夾下。

      2、從一個文件中讀數據,生成多個文本文件

      例子源文件是:xcsj.xls存放在aimfile文件夾下,其數據內容是:

    井名 層位 細分小層號 層頂深度 層厚
    13-10 S3中4 1 3263.5 1.5
    13-10 S3中5 2 3311.6 1.6
    … … …        

      其中多口井的數據在一個表格中,實際工作中需要將其中每口井的資料選出來生成一個獨立的文件,文件后綴為.xc,存在目標文件路徑下,生成文件的格式為:

    井名 層位 細分小層號 層頂深度 層厚
    13-10 S3中4 1 3263.5 1.5
    13-10 S3中5 2 3311.6 1.6
    … … …        


      生成的的目標文件13-10.xc等也存放在aimfile文件夾下。

      二、程序界面

      生成一個窗體,窗體上主要添加如下控件:

      1、三個按扭:一是合并文件; 一是文件拆分; 一是退出;

      2、一個列表框 用來顯示程序執行情況

      3、兩個文本框,分別用來輸入源文件路徑與目標文件路徑;

      4、一個進度條,用來指示,程序的執行進度;

      程序界面如下:

              



      三、源程序主要代碼:

      1、名字空間

    using System;using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.IO;
    //使用StreamWriter與StreamReader必須加的Namespaceusing
    System.Data.OleDb;
    using System.Data.SqlClient;
    //讀電子表格文件必須加的Namespace

      2、文件合并按鈕響應方法

    string winDir1;
    //源文件路徑
    string winDir2;
    //目標文件路徑
    string temp1;
    int ii;
    winDir1=textBox1.Text.Trim();
    winDir2=textBox2.Text.Trim()+"\\total.txt";
    //獲取winDir1路徑下所有文件列表
    string[] dirs = Directory.GetFiles(winDir1);
    //建立或打開目標文件
    StreamWriter writer = new StreamWriter(winDir2);
    writer.WriteLine("這是匯總文件頭");
    writer.WriteLine("這是匯總文件第二行");
    ii=0;
    foreach(string dir in dirs)
    {
     StreamReader reader=new StreamReader(dir);
     try
     {
      reader.ReadLine();
      do
      {
       temp1=reader.ReadLine();
       temp1=temp1.Trim();
       writer.WriteLine(temp1);
      }
      while(reader.Peek() != -1);
       ii=ii+1;
     } catch( Exception err)
     {
      MessageBox.Show(err.Message);
     }
     finally
     {
      reader.Close();
     }
    }
    addListItem("合并操作結束");
    addListItem("本次操作共有"+ii.ToString()+"個文件合并到文件total.txt中去");
    addListItem("total.txt文件存放位置為"+textBox2.Text);
    writer.Close();

      3、文件拆分按鈕響應方法

    //定義變量
    string winDir;
    //文件路徑
    string filename;
    //結果文件名
    string [] filename2=new string[300];
    //保存生成的文件名
    string temp1,temp2,temp3,temp4;
    string strCon;
    //連接串
    int ii;
    //統計生成的結果文件數
    ii=1;
    winDir=textBox2.Text.Trim()+@"\xcsj.xls;";
    //創建一個數據鏈接
    strCon= " Provider = Microsoft.Jet.OLEDB.4.0 ;
    Data Source ="+winDir+"Extended Properties=Excel 8.0" ;
    OleDbConnection myConn = new OleDbConnection ( strCon ) ;
    string strCom = " SELECT * FROM [Sheet1$] " ;
    myConn.Open ( ) ;
    //打開數據鏈接,得到一個數據集
    OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
    //創建一個
    DataSet對象 DataSet myDataSet = new DataSet ( ) ;
    //得到自己的DataSet對象
    myDataSet
    try
    {
     myCommand.Fill ( myDataSet , "[Sheet1$]" ) ;
    } catch( Exception err)
    {
     MessageBox.Show(err.Message);
    }
    //根據電子表格中第一列的井號讀出井名到數組中去
    temp1=myDataSet.Tables[0].Rows[0][0].ToString().Trim();
    filename2[ii]=temp1;
    foreach ( DataRow row in myDataSet.Tables[0].Rows )
    {
     if (temp1!=row[0].ToString().Trim() )
     {
      ii=ii+1;
      filename2[ii]=row[0].ToString();
      temp1=row[0].ToString().Trim();
     }
    }
    //進度條初始化
    progressBar1.Step=1;
    progressBar1.Minimum=1;
    progressBar1.Maximum=ii;
    winDir=textBox2.Text.Trim();
    for(int k=1;k<=ii;k++)
    {
     filename=@winDir+"\\"+filename2[k].Trim()+".xc";
     StreamWriter writer = new StreamWriter(filename);
     writer.WriteLine("層位 細分小層號 層頂深度 層厚");
     foreach( DataRow row in myDataSet.Tables[0].Rows )
     {
      temp1=row[1].ToString().Trim();
      temp2=row[2].ToString().Trim();
      temp3=row[3].ToString().Trim();
      temp4=row[4].ToString().Trim();
      writer.WriteLine(temp1+" "+temp2+" "+temp3+" "+temp4);
     }
     writer.Close();
     progressBar1.PerformStep();
    }
    myConn.Close();
    addListItem("操作結果");
    addListItem("共生成"+ii.ToString()+"文件");
    addListItem(@"文件位置:F:\wangwei\work\h12\xc路徑下");
    listBox1.Refresh();

      4、為顯示執行結果添加了一上列表框,為方便操作列表框需要為表單類添加一個方法:

    private void addListItem(string value)
    {
     this.listBox1.Items.Add(value);
    }

      五、要點分析

      1、用StreamWriter與StreamReader類進行文件存取操作

      這是一對從 Stream 派生的類,用于字節的輸入和輸出。其名字空間為 system.io

      2、讀取電子表數據

      本程序提供了一種連接電子表文件的方法,必要的名字空間要加好,注意連接串不要寫錯。

      3、Directory類的GetFiles 方法應用

      可以程序自動的讀出文件列表到到一個標準數組中去,以備進一步使用,選取文件的方法有多種,這種方法體現了C#的高效性,值得向大家推薦。

      說明:本文附源程序,在運行的時侯注意輸入正確的文件路徑。若你機器里面沒裝.net,也可以直接運行已經編譯好的執行文件。在\bin\debug子文件夾下面的Csdata.exe。

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>