在科研、企业的数据处理中,有时会涉及大量的文件操作。在大量数据处理的时侯,有时需要进行多对一,或一对多的文件操作,即多个数据文件与一个数据文件进行信息交互,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-10S3中41 3263.51.513-10 S3中52 3311.6 1.6… … …
其中多口井的数据在一个表格中,实际工作中需要将其中每口井的资料选出来生成一个独立的文件,文件后缀为.xc,存在目标文件路径下,生成文件的格式为:
井名层位 细分小层号层顶深度 层厚13-10S3中41 3263.5 1.513-10 S3中5 2 3311.61.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#实现文件下载功能
导读: 一.概述: 本文通过一个实例向大家介绍用Visual C#进行Internet通讯编程的一些基本知识。我们知道.Net类包含了请求/响应层、应用协议层、传输层等层次。在本程序中,我们运用了位于请求/响应层的WebRequest类以及WebClient类等来实现高抽象程度的Internet通讯服务。本程序的功能是完成网络文件的下载。 二.实现原理: 程序实现的原理比较
C#高性能的批量数据处理方案
我们经常会遇到这样的数据处理应用场景:我们利用一个组件实时收集外部交付给它的数据,并由它转发给一个外部处理程序进行处理。考虑到性能,它会将数据存储在本地缓冲区,等累积到指定的数量后打包发送;考虑到实时性,数据不能在缓冲区存太长的时间,必须设置一个延时时间,一旦超过这个时间,缓冲的数据必须立即发出去。看似简单的需求,如果需要综合考虑性能、线程安全、内存分配,要实现起来还真有点麻烦。这个问题有不同的解...
Visual C#图像处理全面实战教程
本文还有配套的精品资源,点击获取 简介:《Visual C#图像处理程序设计实例》这本书向读者展示了如何利用C#语言进行图像处理的应用程序开发,适合不同编程水平的读者。它涵盖了C#基础知识、图像处理基础概念、常用算法以及图像分析和识别技术,并通过实际案例和项目实践教授如何将理论知识应用于实际问题解决中。本书还讲解了如何将图像处理程序封装成库或服务,以及如何构建用户友好的图形...
winform 按顺序连续打印多个PDF文件
关于PDF打印的问题,前面有篇文章(点这里查看)也叙述过,今天来谈谈另外一种方法 其实方法很简单,因为需要把多个PDF文档按顺序连续打印,为此我们为什么不把要打印的pdf文档按顺序合并成一个PDF打印呢?如此就简单多了哦。 这里文章写出来并不是为了炫耀什么,只是觉得发现些好东西就分享出来而已,同时也做个记录,方便以后查找 开始正文 1、为了方便,打印方法就不另寻他路了,和前面一致,具体如下...
C#处理大容量数据,及多线程简单应用
应用线程解决界面的假死状态,应用高级SQL语句执行快速导入、导出数据操作。
IC设计新手必看:如何正确使用去耦电容(decap)避免电源噪声?
本文深入探讨了IC设计中去耦电容(decap)的应用技巧,从核心原理到布局实现,帮助新手工程师有效抑制电源噪声。文章详细解析了MIM、MOM等电容类型的特性与选择策略,并提供了先进的布局技巧和验证方法,特别适用于28nm以下先进工艺的电路设计挑战。
用Visual C#实现文件大批量处理之一(转)
在科研、企业的数据处理中,有时会涉及大量的文件操作。在大量数据处理的时侯,有时需要进行多对一,或一对多的文件操作,即多个数据文件与一个数据文件进行信息交互,Microsoft的.NET开发利器C#提供了前所未有的高开发效率,在文...
LTE 中设置voice/data centric的差异
1. 什么是voice centric和data centric Voice centric和data centric的差别在于以语音为中心还是以数据为中心。这里的以某某为中心可不是说说而已。举个栗子,UE一般搜网注册都会按照LUG(LTE->UMTS->GSM)或者LC(LTE->CDMA)的顺序进行,如果UE(未开通VOLTE)注册到LTE时,网络提示不支持语音,比如CSFB。UE就必须disable LTE后回到GU或者CDMA,否则留在不能语音的网络下,UE就会...
用Visual C#实现文件大批量处理之二(转)
2、文件合并按钮响应方法 string winDir1; //源文件路径 string winDir2; //目标文件路径 string temp1; int ii; winDir1=textBox1.Text.Trim(); ...
FPGA新手必看:用USB转TTL实现串口通信的完整流程(附CH340G电路详解)
本文为FPGA新手提供了通过USB转TTL模块实现串口通信的完整实战指南。详细解析了CH340G电路设计要点、硬件连接方法,并分享了经过验证的Verilog代码框架,帮助读者快速掌握FPGA与PC通信的核心技术,解决电平匹配与波特率设置等常见问题。
P4语言实战:如何用Barefoot Tofino实现自定义网络协议(避坑指南)
本文是一份详尽的P4语言实战指南,重点讲解如何利用Barefoot Tofino可编程交换芯片实现自定义网络协议。内容涵盖从P4编程模型解析、自定义协议头定义,到匹配-动作流水线构建、性能优化及生产环境部署的全过程,并特别分享了在资源管理、字节序、调试技巧等方面的宝贵避坑经验,旨在帮助网络开发者和研究人员掌握数据平面编程的核心能力。
在Visual C#下实现图像的透明处理
在该实例中,我先在窗体上画了一些图形,这些图形包括直线、曲线、椭圆等,同时这些图形有的是不透明的、有的是半透明的、有的是强透明的(注:其中的"强透明"意思为非常透明,几乎为全透明,但是又隐约可见)。然后,我在这些图形上覆盖了一幅图像,在正常情况(也就是不透明的情况)下,窗体上的图形为图像所遮盖,所以应该是看不见的。由于我们的图像比较大,所以窗体上的图形在最初的时候是看不见的,只有当图像为透明时,其中的人头图形才会显现,这就正好符合我们程序的初衷了。不过,图像的透明效果实现起来相对复杂,我将会在后面介绍。
手把手教你学Simulink--基于储能系统的建模与仿真场景:-锂电池储能系统充放电管理策略仿真
《锂电池储能系统充放电管理的Simulink建模与仿真》摘要 本文详细介绍了使用Simulink+SimscapeElectrical对锂电池储能系统进行充放电管理策略建模的全过程。从系统结构设计入手,重点阐述了锂电池模型、充放电控制器、热管理系统等核心模块的搭建方法,并提供了完整的仿真流程。文章详细说明了如何实现荷电状态管理、温度控制和功率限制等关键策略,通过仿真分析了电池电压、电流、SoC和温度等关键指标的变化规律。最后提出了基于仿真结果的优化建议,包括参数整定、算法改进等方面,为锂电池储能系统的安全高
用Visual C#实现文件下载
在上面的程序中,我们仅仅用到了WebClient类的一些方法,而WebClient类不光提供了网络文件下载的方法,还提供了文件上传的方法,有兴趣的读者不妨一试――用之实现一个文件上传器。同时这个程序只是一个非常简单的例子,程序下载完一个网页后,它所获得的仅仅是主页面的内容,并不能获得其中的图片、CSS等文件,所以要做出一个比较好的文件下载器还需读者进一步改进之。本程序的功能是完成网络文件的下载。在请求成功后,我们就可以运用WebClient类的实例对象中的DownloadFile()方法实现文件的下载了。
地方政府预算数据抓取:利用Python爬虫获取预算安排、资金分配与支出情况
爬虫是通过模拟浏览器行为,从互联网上自动获取数据的程序。在本案例中,我们将通过爬虫从地方政府的官方网站或预算公开平台抓取各类预算信息。这些信息一般以HTML网页的形式呈现,可以通过爬虫对网页内容进行解析,提取所需的预算数据。Python作为数据抓取的强大工具,凭借其简洁的语法、强大的第三方库(如requestsSelenium等)以及丰富的数据处理能力,成为了开发爬虫应用的首选语言。
LVS 负载均衡面试题及参考答案
什么是 LVS 负载均衡?它的主要作用是什么? LVS(Linux Virtual Server)是一个基于 Linux 内核的开源负载均衡项目。它通过将请求流量按照一定的算法分发到后端的多个真实服务器(Real Server)上,从而实现负载均衡的功能。 从原理上来说,LVS 工作在网络层和传输层之间。当客户端发起请求时,请求首先到达 LVS 服务器,LVS 会根据预先设定的规则和算法,比如轮询(Round - Robin)、加权轮询(Weighted Round - Robin)、最少连
Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误
WinRiver II 测量项目文件扩展名为 MMT,是声学多普勒流速剖面仪(简称 ADCP )测量软件 WinRiver II 的测量项目文件,是现代水域剖面流量测验的重要技术方法。 一、WinRiver II 测量项目 MMT 文件的结构 二、WinRiver II 无法打开或操作测量项目 MMT 文件 三、符合与违反 XML 文件规则的字符 四、Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误
避坑指南:新手爬百度图片3个致命错,改完批量保存本地(亲测有效)
新手爬百度图片的核心是“绕开静态HTML,抓准API接口+处理反爬+提取原图”,改完本文提到的3个核心错,就能稳定批量保存高清图片。这套思路可复用在其他图片网站(如必应图片、360图片),只需修改API接口和参数即可。如果想进一步优化,可添加代理IP池、多线程下载(新手不建议,容易触发反爬)、图片去重等功能!
1806



被折叠的 条评论
为什么被折叠?



