在科研、企业的数据处理中,有时会涉及大量的文件操作。在大量数据处理的时侯,有时需要进行多对一,或一对多的文件操作,即多个数据文件与一个数据文件进行信息交互,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。
分享到:
相关推荐
Visual C# 2005 文件IO与数据存取秘诀 源代码 CH2
【Visual C# 2005文件IO与数据存取秘诀】是台湾微软资深专家写的。水平极高,程序范例也很有参考学习价值。
001,002,003全部下载后用360解压软件解压即可
Your hands-on guide to Visual C# fundamentals Expand your expertise—and teach yourself the fundamentals of Microsoft Visual C# 2013. If you have previous programming experience but are new to Visual ...
怎样用Visual C#实现文件下载功能的详解实例。
Visual C# and Databases is a tutorial that provides a detailed introduction to using Visual C# for accessing and maintaining databases. Topics covered include: database structure, database design, ...
以前用的DLL一般都是用Visual C++、Delphi或者VB等编程语言来编写的,这种DLL的编写和使用,我们大都已经比较习惯了。作为新一代的程序开发语言--Visual C#,到底是如何编写和使用DLL的呢!本文就试着就这方面的问题...
书第1,2章分别介绍了使用Visual C#和SQL Server开发数据库应用程序的基本知识,第3章~第10章,通过开发8个完整实用的数据库应用程序,系统全面地介绍了用Visual C#和SQL Server来进行数据库应用程序开发的各种技术...
Visual C# 2005 文件IO与数据存取秘诀(章立民研究室著) 源代码 CH13-CH14
共分14章,主要内容包括.NET平台与Visual Studio 2010开发环境、C#语言基础及面向对象程序设计、C#程序设计、C# Web程序设计、C#泛型编程、C#数据库程序设计及ADO.NET等相关知识,并在最后讲解了运用C#处理文件和...
应用程序设计编制(Visual C#平台)Visual C# .NET试题汇编(程序员级)
第1章 Visual C#2008与窗体界面 第2章 Visual C# 2008与图形图像 第3章 Visual C#2008与多媒体 第4章 Visual C#2006与数据库 第5章 Visual C#2008的SQL查询与图表技朮 第6章 Visualc#2008的打印与水晶报表技术 ...
Visual C# 示例 源码Visual C# 示例 源码Visual C# 示例 源码Visual C# 示例 源码Visual C# 示例 源码Visual C# 示例 源码Visual C# 示例 源码Visual C# 示例 源码Visual C# 示例 源码Visual C# 示例 源码Visual C# ...
Visual C#2010新增了大量可圈可点的丰富特性,《Visual C# 2010从入门到精通:Step by Step》围绕着基础知识和这些新特性全面介绍了如何利用Visual Studio2010和.NET Framework 4.O编写应用程序。书中沿袭深受读者...
完全手册Visual C# 2008开发技术详解
Visual C#实现文件分割合并器.doc
Visual C# Homework Projects: A Computer Programming Tutorial by Philip Conrod English | 7 Aug. 2017 | ASIN: B074N8QQG3 | 920 Pages | AZW3 | 23.48 MB Visual C# programming concepts are taught while ...
Visual C# 2005从入门到精通,初学者必备资料;
使用Visual C#开发asp.NET入门.rar使用Visual C#开发asp.NET入门.rar使用Visual C#开发asp.NET入门.rar使用Visual C#开发asp.NET入门.rar使用Visual C#开发asp.NET入门.rar
《Visual C# 2008控件使用范例详解》适合稍有.NET基础的所有Visual C# 2008应用开发人员,是你提高编程水平,高效完成任务的良师益友;针对每个控件应用技术点的详尽阐述,也可供你作为案头的速查手册。 第1章 可...