文件处理程序(共8篇)
文件处理程序 篇1
摘要:本文主要阐述C语言文件处理的过程和方法。以“家庭理财程序”的设计与实现为例, 介绍C语言强大的文件处理功能, 将程序运行时所需的原始数据从文件中读取, 对数据进行操作处理, 并将程序运行的结果写入到文件, 提高数据的输入输出的处理效率。
关键词:文件,家庭理财程序
读取文件中的数据和将数据写入文件的相关编程技术是使用计算机程序解决实际问题所必需的。C语言具有较强的文件处理功能,可以将程序运行时所需的原始数据从文件中读取,并将程序运行的结果写入到文件中,提高数据的输入输出的处理效率。本文以"家庭理财程序"的设计与实现为例,利用文件存储数据,对数据进行操作,阐述C语言文件处理的过程和方法。
一、需求分析
为了实现家庭合理收入支出,利用现代科技,实现家庭理财管理,及时了解家庭财政状况。所有收支项目信息都存储在notebook文件中,用户根据需要对文件数据进行操作,可增加一条家庭收支项目记录(收支钱数为正数代表收入,负数代表支出),随时列出家庭所有收支项目记录,查询最后一次输入的收支项目记录,显示家庭收支结余钱数等。
二、程序设计与实现
1、程序设计思路
首先设计家庭收支项目记录的数据结构,使用到结构体。C程序是由函数构成的,根据系统功能进行设计,本程序的函数包括:主函数main () 、显示用户界面函数menu () 、增加一条家庭收支项目记录函数add_item () 、显示家庭所有收支项目记录函数all_item () 、查询最后一次输入的家庭收支项目记录函数last_item () 、统计家庭所有收支项目记录总数函数item_count () 。各函数间通过函数调用实现功能的整合, 其中主函数分别调用menu () 、add_item () 、all_item () 、last_item () 函数,显示用户菜单界面、根据菜单选择,实现增加一条家庭收支项目记录,显示家庭所有收支项目记录,查询家庭最后一次输入的收支项目记录、查看收支结余的功能。
2、程序实现方法
(1) 定义家庭收支项目记录的数据结构item
(2) 定义显示用户界面函数menu ()
说明:定义用户界面,显示用户选择主菜单。家庭理财程序界面如图1所示。
功能:首先系统显示用户界面,提供菜单供用户选择,菜单包括四个选项,若用户输入1并按Enter键,表示用户要增加一条家庭收支项目记录;若用户输入2并按Enter键,表示用户要显示家庭所有收支项目记录;若用户输入3并按Enter键,表示用户要查询最后一次家庭收支项目记录;若用户输入0并按Enter键,表示退出系统,结束程序。
(3) 定义统计家庭所有收支项目记录总数函数longitem_count (FILE*fp)
说明:所有家庭收支项目记录信息都存储在文件中,首先将文件指针定位到文件首,获取文件开始位置begin,然后将文件指针移动到文件尾,获取文件结束位置end,最后,通过 (end-begin) /sizeof (struct item) -1计算家庭所有收入支出项目记录总数。其中使用到文件随机定位函数fseek () 和获取当前位置指针函数ftell () 。
(4) 定义增加一条家庭收支项目记录函数voidadd_item (FILE*fp)
功能:实现主界面菜单1功能,若用户输入1并按Enter键,表示用户要增加一条家庭收支项目记录。效果如图2所示:
(5) 定义显示家庭所有收支项目记录函数voidall_item (FILE*fp)
功能:实现主界面菜单2功能,若用户输入2并按Enter键,表示用户要显示家庭所有收支项目记录。效果如图3所示:
说明:首先将文件指针定位到文件首,逐条读取每条收支项目数据,读取时判断文件是否结束,使用到文件结束检测函数feof () ,若文件未结束,继续读取记录并在屏幕上显示输出相应信息,若文件结束,结束程序。
(6) 定义查询最后一次输入的家庭收支项目记录函数void last_item (FILE*fp)
功能:实现主界面菜单3功能,若用户输入3并按Enter键,表示用户要查询最后一次家庭收支项目记录信息。效果如图4所示:
说明:首先调用统计家庭所有收支项目记录总数函数item_count () ,确定文件中是否有记录,若有记录,则使用随机定位函数fseek () 将文件指针定位到文件最后一条记录,然后使用随机读函数fread () 从文件中读取该记录,最后在屏幕上显示最后一次输入的家庭收支项目记录数据信息。若文件中没有记录,输出错误提示信息"no items in file!"。
(7) 定义主函数main ()
功能:按一定顺序调用各功能函数,串起整个程序,实现系统所有功能。
实现代码如下:
三、结论与分析
C语言中文件处理的一般过程可归纳为三个步骤:打开文件、读写文件和关闭文件。先利用fopen () 函数配合恰当的使用方式打开文件,再选择适当的读写函数读写文件,最后切记一定要利用fclose () 函数关闭该文件,避免意外的发生。文件的读写方式有顺序读写和随机读写,在读写文件尤其是读文件时应关注文件的位置指针,必要时可使用rewind () 函数重定位或fseek () 函数移动位置指针, 进行随机读写。
参考文献
[1]杨俊红主编.C语言程序设计项目化教程.中国水利水电出版社, 2010年.
[2]高维春主编.C语言程序设计项目教程.人民邮电出版社, 2010年.
文件处理程序 篇2
前言
本文件结合了哈尔滨市烟草专卖局(公司)的管理特点,依据GB/T19001—2008《质量管理体系 要求》制定,明确了市局(公司)卷烟生产全过程监督管理的控制要求。
本文件是《质量手册》的支持性文件。
本文件的附录A是规范性的附录。
本文件由专卖监督管理处归口管理。
本文件的批准人:李明学。
本文件的审核人:张志军。
本文件主要起草人:刘洪宇。
本文件2010年11月30日发布,2011年1月1日实施。目的为加强哈尔滨市烟草行业内部专卖管理监督,促进行业自律,规范行业生产经营秩序,特制定本程序。适用范围
本程序适用于市局、各县(市区)局对辖区内同级监管的市烟草公司及其卷烟经营活动内部专卖管理监督的过程控制。职责
3.1 专卖主管副局长
3.1.1 各级专卖主管局长对属地专卖内管负总责。市局局长是专卖内管工作的一把手,对卷烟经营专卖内管工作负全面领导责任;负责领导、指导、组织协调全市专卖内管队伍建设,健全机构、完善装备;
3.1.2 负责组织专卖内管专题会议,进行问题查找、分析、沟通;
3.1.3 负责审核对业务经营部门或人员有违法、违规行为责任追究的结果处理,保障全市卷烟经营同级监管工作有效正常开展。
3.2 市局专卖监督管理处
是本程序的归口管理部门,负责本程序的编制、修订。
3.2.1 专卖监督管理处处长、分管专卖内管工作的副处长对卷烟经营专卖内管工作负领导责任。负责协助局长指导、组织全市专卖内管队伍建设,指导、组织市区各分局、各县(市)局做好同级监管、日常监管工作,指导、组织对县级局专卖内管工作开展情况进行检查和考核,保障全市卷烟经营同级监管工作的有效开展。
3.2.2 负责贯彻落实上级烟草专卖局内部专卖管理监督的规定和要求,制定实施本辖区内部专卖管理监督工作流程和工作制度,建立内部专卖管理监督长效机制;
3.2.3 负责对市烟草公司卷烟经营活动进行事前、事中、事后的内部监管,查处本辖区行业内部发生的违法、违规案件;
3.2.4 负责组织县级局做好同级监管、日常监管工作,对县级局专卖内管工作开展情况进行检查和考核。
3.2.5 负责对各项考核指标进行分解并制定辖区内专卖管理工作计划,指导、配合、协调各分局(县级局)查处各类涉烟违法案件
3.3 市区分局、各县市局
3.3.1 负责收集属地卷烟经营活动数据、查处违法违纪行为。
3.3.2 负责本辖区内贯彻落实烟草专卖法律、法规、规章及相关政策。
3.4 法规处
3.4.1 负责监督审核行政执法、案件办理中各环节依法落实情况及行政复议的受理及组织工作。
3.4.2 对案件办理过程进行审核、评查并签署意见。
3.5 其他部门(单位)
营销中心、物流中心、财务处、各卷烟营销部负责卷烟购进、入库扫码、准运证到货情况等数据及时交专卖监督管理处。内容和要求
4.1总要求及监管内容:
4.1.1有关卷烟经营全过程管理监督按《国家烟草专卖局关于印发烟草行业内部专卖管理监督工作规范的通知》国烟专【2011】49号和哈烟专【2011】16
号《行业内部专卖管理监督工作规范实施细则》执行。
4.1.2市局内管监督内容包括:市烟草公司卷烟经营活动,每月对卷烟购进、库存、准运证到货确认、销售等行为进行监管,填写《内部专卖管理监督检查工作底稿》。
4.1.3县分局监管内容包括:辖区内烟草公司卷烟经营活动。每月对卷烟销量、零售户管理信息、卷烟配送等行为进行监管,填写《内部专卖管理监督检查工作底稿》
4.2计划制定及分解
4.2.1市局专卖处根据卷烟经营状况及省局的总体安排,适时制订烟草专卖局本《卷烟内部专卖管理监督工作方案》报局长审批。
4.2.2市区各分局(县级局)根据方案要求,结合各自实际制订具体的实施方案,本《工作计划》或者《工作要点》,经县分局长审批后执行。
4.3内部监管实施:
4.3.1市局专卖监督管理处、市区各分局(县级局)在卷烟经营活动中,对出现符合条件的异常情况都要进行调查核实,通过填写相关工作表格,记录整个过程,确保调查核实过程的真实性和痕迹化。
4.3.2市局专卖处、市区各分局(县级局)专卖内管人员通过信息系统或者卷烟经营部门提供的相关资料,对订单采集、卷烟销售、卷烟到货、卷烟配送、零售户信息维护等环节,按照确定的条件进行查询、分析、对比,确认异常情况。
4.3.3市局专卖监督管理处、市区各分局(县级局)专卖内管人员按照属地管理的原则,根据确认的异常情况填写《内部专卖管理监督异常情况登记表》,对异常情况进行具体描述和分析,提出由谁来调查、如何处理的初步意见,上报内部专卖管理监督部门负责人后,由市局专卖监督管理处汇总情况形成季度内部专卖管理监督工作情况汇报,按季度上报省局。
4.3.4市局专卖监督管理处、市区各分局(县级局)专卖内管人员提出调查意见,按照属地管理的原则专卖管理监督处负责人或县分局局长根据上报的异常情况决定由内部专卖管理监督人员或者稽查队员开展调查,或由相关业务部门协助调查。
4.3.5市局专卖监督管理处、市区各分局(县级局)专卖内管人员根据本单位内部专卖管理监督部门负责人提出的调查意见,采取走访客户、向相关业务部门询证等措施开展调查、了解情况,并将调查过程和结果记录在《内部专卖管理监督异常情况调查(询证)记录表》中。
4.3.6市区各分局(县级局)填写的《内部专卖管理监督异常情况调查(询证)记录表》应在规定的时限内上报市局专卖监督管理处备案。并由市局专卖监督管理处将《内部专卖管理监督异常情况调查(询证)记录表》记录的调查情况汇总到季度内部专卖管理监督工作情况汇报中后,按季度上报省局。
4.3.7市局专卖监督管理处、市区各分局(县级局)专卖内管人员调查结束后,填写《内部专卖管理监督异常情况调查处理表》报告专卖管理监督处负责人。内部专卖管理监督部门负责人根据调查情况表的描述得出调查结论,按正常、违规还是违法进行判断定性。
4.3.8市局专卖监督管理处、市区各分局(县级局)专卖内管人员依据相关法律、法规、规章和责任追究制度,根据调查的违规问题的定性,依照内管工作制度或卷烟经营内控的规定,提出初步处理意见,报副局长审核,局长审批。
4.3.9记录管理及纠正整改:市局专卖监督管理处、市区各分局(县级局)
专卖内管人员根据审批意见,填写《内部专卖管理监督异常情况登记台帐》、《内部违法违规行为移交处理登记台帐》、《内部违法违规行为移交处理通知书》,将上述工作形成的工作底稿、工作表格等相关资料整理归档。属于违规的,需要追究相关人员责任的,按有关规定处理;需要有关部门整改问题的,提出整改意见,移交卷烟经营分管领导和责任部门研究处理;属于违法、犯罪的,移交司法机关依法处理,并追究相应的刑事责任。
4.3.10营销中心、物流中心、名烟总汇、财务管理处、各卷烟营销部等其他有关部门要把处理结果和整改情况及时反馈市局专卖管理监督处。由市局专卖监督管理处汇总各相关责任部门的整改情况汇总形成季度内部专卖管理监督工作情况汇报后,按季度上报省局。
4.4 涉案管理
4.4.1 卷烟经营内部监管活动中出现违反烟草专卖管理规定和本程序规定的,由内管员上报专卖监督管理处按《卷烟打假打私对标工作程序》、《案件办理控制程序》和《卷烟市场监管控制程序》实施管理和处置。
4.4.2 有关卷烟内部监管责任追究,按《国家烟草专卖局关于印发烟草行业内部专卖管理监督工作规范的通知》国烟专【2011】49号和哈烟专【2006】64号《行业内部专卖管理监督工作责任追究制度》执行。
4.5 专卖内管考核办法
4.5.1 有关卷烟经营内部监管活动事前、事中、事后监督按《国家烟草专卖局关于印发烟草行业内部专卖管理监督工作规范的通知》国烟专【2011】49号和哈烟专【2007】42号《行业内部专卖管理监督检查考核办法》及《对标运行控制程序》的规定执行。
4.5.2 对市局同级卷烟经营企业的考核
4.5.2.1市烟草专卖局对市烟草公司同级监管的办法包括:通过定期、不定期检查,实地检查库存,查阅账册、报表、票据,登录专卖内管信息系统,数据分析和举报突查等方法,并结合内管检查、日常监管、重点抽查等结果,发现违规问题。
4.5.2.2市烟草公司违规违法问题包括:超计划、合同购进卷烟,出现虚假订单、虚拟客户、向无证户供货、直接向社会集团供货,拆单分摊、卷烟体外循环,捆绑销售等情形。
4.5.2.3经查实属地接受市局同级监管卷烟经营企业(市烟草公司)发现
4.5.2.2所列的各项违法、违规问题中任何一项违规问题,则该考核结果为不合格,得0分,无违法、违规问题相应项得该项的满分。同时将考核结果在规定的时限内上报省局。考核要求
内管成效考核有关记分方法、考核办法等考核项目按黑烟专【2010】75号《关于开展专卖管理兑额对标工作的通知》执行。相关文件
6.1《中华人民共和国烟草专卖法》
6.2《中华人民共和国烟草专卖法实施条例》
6.3《国家烟草专卖局关于印发烟草行业内部专卖管理监督工作规范的通知》国烟专【2011】49号
6.4黑烟专【2010】75号《关于开展专卖管理兑额对标工作的通知》
6.5哈烟专【2007】42号《黑龙江省市烟草专卖局关于印发<行业内部专卖管
理监督检查考核办法>的通知》
6.6哈烟专【2011】16号《行业内部专卖管理监督工作规范实施细则》
6.7《对标运行程序》
6.8《卷烟打假打私对标工作程序》
6.9《案件办理控制程序》
6.10《卷烟市场监管工作程序》相关记录
7.1《内部专卖管理监督异常情况登记表》
7.2《内部专卖管理监督异常情况调查处理表》
7.3《内部专卖管理监督异常情况登记台帐》
7.4《举报投诉信息情况登记表》
7.5《内部专卖管理监督异常情况下发处理表》
7.6《内部专卖管理监督上级交办任务登记表》
7.7《内部专卖管理监督上级交办任务登记台账》
7.8《内部专卖管理监督县级局上报问题处理表》
7.9《内部专卖管理监督问题处理移交表》
7.10《内部专卖监督管理处理问题登记台账》
7.11《内部专卖管理监督检查工作底稿》
7.12《内部专卖管理监督整改通知》
7.13《内部专卖管理监督工作考核打分表》
7.14《每月违规情况统计表》
7.15《内部专卖管理监督检查函》
7.16《内部专卖管理监督整改报告》附录
程序化归档文件探讨 篇3
1 实现归档文件整理的程序化的意义
1.1 操作规范化
如何在实施《归档文件整理规则》基础上继续细化归档文件整理工作, 规范操作程序和优化工作状态, 直接关系到归档文件整理水平与工作效率。怎么接收文件, 归档文件怎么装订, 怎么排序并如何组成基本保管单位, 整理归档文件, 先干哪些工作。后干哪些工作, 这些工作应当建立哪些标准规范等, 都是需要我们认真考虑的问题即使被有些人认为轻车熟路的文件鉴定, 也是大有学问。将归档文件整理纳入程序化管理, 确定每一归档文件整理程序化琐议个程序中的主要内容、操作要领和技术规范等方面, 就可以基本解决上述问题。
1.2 实现过程质量控制
实现归档文件程序化整理、规范化操作, 便有了简单易行的操作规范和考核指标, 可以做到程序项目明确, 质量指标清晰, 考核标准明确。便于对工作质量加以监督测评, 实现归档文件整理全过程质量控制, 保证归档文件整理工作质量得到不断提高。
1.3 实现过程质量控制
归档文件整理既没有固定而明确的程序, 也没有具体工作标准, 多人同时开展工作必然是忙乱不堪、互不衔接, 甚至窝工返工, 越忙越乱只有在工作程序与操作标准明确之后, 多人同时工作才可以分工明确, 按部就班, 相互衔接, 有次序高效率和相互配合地将工作开展下去。
1.4 实现文书和档案管理良好衔接
归档文件整理是文书管理与档案管理的接合部, 又是文档一体化管理的“接口”, 一些文书和档案管理人员往往予以忽略, 文件交接不认真清点, 不办理任何手续, 出了问题难以追究责任一些负责文档编程的计算机人员也往往对此问题认识不清, 使两者“接口”发生错位, 影响了文档一体化的有机衔接如果制定了归档文件整理程序, 就可以明确文书和档案人员在文件交接中的各自责任, 也可以实现计算机文件即时归档工作的良好衔接, 使数字文件和数字档案的管理平台结合为一个有机整体。
2 归档文件整理程序
2.1 文件交接
如果文书员不负责归档文件整理, 就应将一年中收集到的全部文件于次年初集中向档案员办理交接。交接文件时, 文书管理人员应将收、发文分开排序、分类捆扎作出文件移交清单和必要说明, 与文件一同向档案员办理移交档案员应认真查看文件交接说明并按文件清单逐一点核, 准确无误后双方办理文件交接手续, 双方在文件交接清单上签字, 各留一份存查。
2.2 文件鉴定
文件鉴定包括以下四个方面:一是文件齐全性鉴定。将文件清点并与相应年度收、发文簿认真对照, 统计出当年文件收集齐全率二是文件完整性鉴定。所接收文件中有无其他缺件 (如文件正本与定稿是否一一对应, 文件是否短缺附件、附表等) 、缺页、残页或其他污损现象三是文件价值鉴定将全部接收的文件区分出应归档文件和不归档文件两大部分, 并对文件鉴定进行复验, 以发现并纠正文件漏归档和误归档问题, 还应检查有无文件重复归档问题四是归档文件技术鉴定将全部归档文件逐份鉴定, 确认定稿是否签发, 正本是否盖章合同协议法律手续是否完备齐全:所有文件办理中有无铅笔、圆珠笔等非永久性字迹:文件字迹反差是否良好文件鉴定是非常细心的工作, 应当逐件甚至逐页鉴定, 尤其是文件价值鉴定, 决定文件存亡, 实施者应认真负责处置对于文件鉴定中发现的问题, 尤其是归档文件中的问题, 应向文书人员及时确认, 采取补救措施, 未能解决的问题应记录在相应档案盒内备考栏中。
2.3 文件装订
为防止文件散失, 应及时拆除金属钉予以线订起钉应保证不伤及文件, 开张不一的文件应予折叠或齐边, 无法折叠或裁边的文件外观也应整齐美观。
2.4 归档文件分类
按分类表对归档文件划分类别, 某一类文件数量过多可再细分类, 分类文件应有类别标志, 以避免之后文件整理发生混类问题分类文件应分别捆扎, 将注明文件类别的“类签”置于该类文件之首。
2.5 划分文件保管期限
按照相应标准将不同保管价值的文件区分出来, 予以捆扎, 杜绝混淆。
2.6 文件整理
将已划分出类别与保管期限的文件组成基本保管单位, 并按照本单位文件一上级文件一其他文件统一排序以固定其次序每年的文件排序方式应予一致, 以便于检索。
2.7 基本保管单位排序
将已确定的若干文件保管单位进行排序, 编立统一的流水号并在标签上标示, 以保证各保管单位间文件的有机联系。标注流水号应使用阿拉伯数字, 保证不重号、不漏号。
2.8 加盖文件归档戳记
在指定位置加盖归档文件戳记并填写相应内容, 归档戳记不应覆盖文件字迹并保证清晰, 所填写内容应保证无误并用词规范。
2.9 折叠档案盒并予以定型
将平面展开的档案盒折叠成立体状并予以定型, 档案盒外观整洁, 保证不同脊厚的档案盒数量满足需要。
2.1 0归档文件登录和计算机做表
按照相应要求, 将归档文件整理要素逐一录入计算机应保证该录入的文件不遗漏, 重要的录入项目不遗漏、无差错, 将归档文件目录封面及录入完毕的归档文件目录打印输出, 并在“备注”栏内注明相应盒号、所在柜号, 以便于检索
3 实现归档文件整理计算机程序操作和文档一体化管理
归档文件整理的程序化、规范化是实现计算机文件整理的基础。只有将归档文件整理程序分解成一个个细小的操作动作并实现整体联动, 才能在此基础上设计出较为理想的归档文件整理软件。我们应当让计算机在归档文件整理过程中从容应对复杂细腻的工作流程, 对具体标准做到正确判断与准确选择、程序运行, 尤其是文件分类、价值鉴定这些“高难度”动作上也按照人的意愿圆满完成, 戳记加盖的位置适当, 内容记录得准确, 档案盒脊背与封面各项标志都准确到位, 才算圆满达到目标将归档文件整理全过程贯彻始终并能确保工作质量, 是该系统设计的基本要求计算机归档文件整理程序应与原有文书管理和档案管理程序联结起来, 使之成为一个通畅的“信息通道接口”, 使文书与档案工作的计算机处理结合为一个有机整体, 实现文档计算机一体化管理。
摘要:归档文件整理只有科学地划分分成若干个既相互独立又相互联系的程序, 才能使该项工作井井有条, 忙而不乱。实现归档文件程序化整理, 还在于规范此项工作, 实行全过程质量控制, 提高归档文件整理水平和工作效率, 并为实现归档文件计算机整理奠定基础。
批量文件重命名VB程序设计 篇4
关键词:VB6.0,程序设计,文件重命名
1 引言
在编程中经常会按顺序处理或引用某一文件夹中的一批同类型文件,一般情况下,这些文件的名称或者没有统一的规律,或者名称中的序号不连续,使用前需要对这些文件按一定规律重新命名。
虽然Windows XP系统提供了批量文件重命名的方法,也可以用其他软件如ACDSee或一些专用重命名软件[1]进行文件重命名,但其操作方式和处理结果都不能令人满意,在网上有大量网友寻求批量文件重命名的方法。因此,设计一个程序小巧、功能强大、界面友好、操作简单的批量文件重命名程序很有必要,VB即可很方便地完成这个工作。
VB对文件的重命名主要用Dir函数和Name方法[2]。在设计的程序中,新文件名由“固定部分”+“顺序变化的序号”组成,主文件名的最大长度限定为8。例如,对80个jpg文件重命名,可设固定部分为PIC,变化部分为001,则重命名后80个文件名依次为:PIC001.jpg,PIC002.jpg,……,PIC080.jpg。
2 程序界面和操作流程
程序界面和操作流程如图1所示,主要使用了文件系统控件[3]。图1中仅对和编程有关的控件进行了标注,一些标签控件和右侧两个框架控件未标出,读者不难辨认,图1中的序号标明了操作顺序。
操作流程由如下6步组成:
(1)指定驱动器:从驱动器列表框Driver1中选择文件所在的驱动器。
(2)指定文件夹:从目录列表框Dir1中选择文件所在的文件夹。
(3)指定文件类型:从组合列表框Comb1中选择文件的类型(设计时内置了20多种常用类型),如果列表框中没有所需类型,按“*.扩展名”的格式从键盘输入,指定类型后在文件列表框File1中仅显示指定类型的文件。
(4)输入新文件名中的固定部分:在文本框Text1中输入新文件名中的固定部分。
(5)指定新文件名中序号部分的样式:从列表框List1中选择一种序号样式(设计时内置了5种样式,最大的样式可一次重命名99999个文件),应注意主文件名的长度最大为8,如果超长会提示修改。
(6)进行重命名:单击命令按钮[重命名](Command1),完成后在标签Label5处显示:有××个文件被重命名。
3 程序列表及说明
(1)Form1的Load事件,程序启动后显示D盘根文件夹下所有文件:
(2)Drive1的Change事件,驱动器改变时目录列表框Dir1中内容随之改变:
(3)Dir1的Change事件,目录改变时文件列表框File1中内容随之改变:
(4)Combo1的Got Focus事件,组合框Combo1得到焦点时选定文件扩展名:
(5)Combo1的Click事件,单击(选取)组合框Combo1列表中的扩展名时将选定类型的文件显示在文件列表框File1中:
(6)Combo1的Key Up事件,在组合框Combo1的文本框中键盘输入扩展名时将该类型的文件显示在文件列表框File1中:
(7)Command1的Click事件,完成文件重命名:
(8)Command2的Click事件,退出程序:
4 结语
在程序设计中的一个重要环节是从前向后依次先把文件重命名并移动到一个新建文件夹temp中而不是原地重命名,这样作的目的是防止新文件名和后面原有的文件重名而产生运行错误,当原来的一批文件名有序但序号不连续且新文件名和原文件名形式相同时,这种情况就会发生。当所有文件完成重命名后再把temp中的文件移回原处并删除temp文件夹。
参考文献
[1]http://zhidao.baidu.com/question/11524922.html.
[2]孟德欣,等.VB程序设计[M].清华大学出版社,2009,7.
气象数据文件异机备份程序浅析 篇5
伴随国民经济与科技水平的快速发展, 气象现代化设备越来越多的投入到业务日常运行之中。目前, 气象系统观测仪器多为自动观测, 每种设备相对独立, 并分别生成气象数据文件。气象数据文件作为观测成果对于气象研究具有极其重要的科学价值。为便于统一存储、保证气象数据文件获取的完整性与连贯性, 避免因断电、观测设备故障等原因造成数据丢失, 有必要将各种气象数据文件进行集中管理。因此, 实现异机备份气象数据文件是非常有必要的。同时, 因气象数据文件存在多样性、时效性等特点, 市场上诸多应用程序对于备份气象数据文件并不适用, 无法满足气象部门对于备份文件的特殊要求。相比较而言, 由气象部门工作人员自身开发异机备份程序, 针对性则更强, 更贴近需求, 所开发程序通常具有灵活、高效的优点。
1 指导思想
异机备份气象数据文件, 可以最大限度的保证数据文件的存储安全性, 实现与原机存储的双重保险。通过简单的批处理命令, 使用CMD命令处理器逐条解释执行, 可在DOS环境下实现对气象数据文件的异机备份, 如若保存多种气象数据文件, 则运转周期长, 效率明显降低, 并缺乏交互能力, 灵活性及可扩展性不强。因此, 有必要引入高一级程序语言来实现异机备份气象数据文件的要求。
C# (C sharp) 语言是微软 (Microsoft) 公司为.NET Framework量身订做的程序语言, C#拥有C/C++的强大功能以及Visual Basic简易易用的特性, 是第一个组件导向 (Component-oriented) 的程序语言, 和C++与Java一样亦为对象导向 (object-oriented) 程序语言。综上, C#是一种安全的、稳定的、简单的、优雅的编程语言, 它在继承C和C++强大功能的同时去掉了一些它们的复杂特性 (例如没有宏和模版, 不允许多重继承) 。C#综合了VB简单的可视化操作和C++的高运行效率, 因其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持, 具有极高的使用价值。
在明确所使用的程序语言之后, 我们需对实现思路展开梳理。本文仅以一般气象台站常有的EN风仪数据文件及自动气象站B和采集数据文件为例进行说明:
1) 了解气象数据文件结构并对文件格式进行定义:EN风仪数据文件每日生成FA与DF两种数据文件, B和采集数据文件则包含有B、Z、P、T、U、W、R共计7种文件。经过总结, 我们可简单理解为上述文件格式分别为FAyyMM.dat、DFyyMM.dat、BIIiiiMM.0yy、ZIIiiiMM.0yy、PIIiiiMM.0yy、TIIiiiMM.0yy、UIIiiiMM.0yy、WIIiiiMM.0yy、RIIiiiMM.0yy, 其中IIiii为台站区站号、MM为月份、yy为年份后两位。不难发现, 对于EN风仪数据文件, 我们可将其定义为“FA (DF) ”+“yyMMM”+“.dat”;对于固定台站, 其区站号不变, 如六合气象站为“58235”, 则B文件格式可固定为“B58235”+“MM.0yy”, 其他采集数据文件格式依此类推。
2) 确定C#程序实现方针并选用合适语句:本文仅针对简单异机气象数据文件备份, 故以简单思路为之。经过多次验证, 我们得出在保证原存储设备和目的存储设备内部时钟准确的基础上, 以当前时间查找最新气象数据文件进行备份方法简单可行。因此, 在C#中, 需使用时间函数。
2 实现过程
首先, 以EN风仪气象数据文件为例, 需对“yyMM”进行赋值, 有String FileStr=DateTime.Now.ToString ("yyMM") , 取出当前时间, 如“1011”;其次, 对文件格式进行描述, 为FileStr="FA (DF) "+FileStr+".dat", 这样, 备份气象数据文件名被定义;然后, 对原存储路径与目的存储路径分别进行确定, 通过语句“System.IO.File.Copy”即可实现异机备份, 注意的是, copy语句要求前后路径指向文件名, 同时, 在存储气象数据文件时, 应使用“true”语句, 以实现覆盖存储。对于自动气象站数据文件的备份, 在EN风仪气象数据文件基础之上, 只需对时间及文件名进行重新定义, 便能嫁接过来实现异机气象数据文件备份了, 程序举例如下:
3 改进与应用前景
应该说, 我们设计的这套异机备份气象数据文件程序, 通俗直观容易理解, 思路清晰, 实现方便, 对基层台站具有较高的可操作性, 各台站可通过“计划任务”, 实现定时气象数据文件的异机备份。另一方面, 该程序若进一步完善, 引入读写程序方法、日志报错、失败再存储等功能, 对于所需备份气象数据文件举一反三, 扩展存储文件类型, 就可以实现更为完善、实用的功能, 也将具有更为宽阔的推广空间间
参考文献
[1]http://baike.baidu.com/view/6590.htm.
[2]Karli Watson, Christian Nagel.C#入门经典[M].3版.北京:清华大学出版社.
文件处理程序 篇6
关键词:FLASH,程序文件系统,FAT格式
随着嵌入式技术的发展, 许多嵌入式设备的文件系统都建立在FLASH上。FLASH存储器具有容量大, 可多次擦写和掉电数据不丢失等优点。本文以并行FLASH HY29LV160B为存储芯片, 分析和设计一个主要用于存储应用程序、设备驱动程序、动态链接库等文件, 提供创建、删除、修改、读写文件等功能的程序文件系统。
1. 程序文件系统的结构分析
程序文件系统是基于FAT16格式的文件系统, 与标准FAT格式相比还存在部分差异:标准FAT文件系统支持子目录, 程序文件系统不支持子目录;标准FAT格式的FDT项的每项为32字节, 包含文件名、扩展名、文件属性、创建时间、起始簇、文件大小这些信息, 程序文件系统没有文件属性、创建时间, 多出文件显示名字段, 总共48字节;标准FAT文件系统是8.3文件名格式, 程序文件系统为17.3格式。
程序文件系统的整体结构与FAT文件系统一样, 采用FDT、FAT表、数据区这三部分来实现文件系统, FDT表主要存放文件注册信息, 通过FDT表的信息可以找到文件起始数据簇的位置。FAT表可以查找到文件占用了那些数据簇, 并且指示对这些数据簇的使用顺序, 可以说是一种链式结构。
FDT表是由很多个FDT项组成, 每个FDT项代表一个注册的文件, 如果这个FDT项的文件名第一个字节非0时表示文件有效;如果这个FDT项的文件名第一个字节为0xFF时表示该项为空, 没有注册文件;文件名第一个字节为0时表示文件被删除, FDT项无效。
FAT表是由很多个FAT项组成, 每一个FAT项代表一个数据簇的使用情况, 当这个FAT项的内容是未分配的簇时, 是可以被分配的;当FAT项的内容是坏簇时, 不能分配给任何文件;当FAT项的内容是释放簇时, 表示该簇原来分配给一个文件, 后来删除过这个文件, 虽然释放簇是可以再利用的, 但是不能分配给一个文件, 仅当没有未分配的簇时, 整理一次FAT表, 将释放簇变成未使用的簇时才能将对应数据簇分配给文件使用;当FAT项的内容非以上几种时, 说明数据簇已经分配给文件使用, 这种情况下, FAT项对应的数据簇是不能被分配的, FAT项的内容由两种可能值:文件的最后一簇, 下一簇的簇号。当FAT项的内容是文件最后一簇时, 表示文件占用的数据簇链结束, 否则FAT项的内容是文件占用下一数据簇的簇号, 也就是下一个FAT项的项号。
2. 程序文件系统中文件数据的定位
文件数据位置的确定是通过FAT表和FDT表和起来决定的, 首先通过查找FDT表得到文件基本信息, 取得文件起始簇的簇号, 文件起始簇的簇号对应的数据簇便是文件的第一块数据, 然后查找FAT表, 查找文件起始簇的FAT项, 得到下一簇的簇号, 这个簇号对应的数据簇便是文件的第二块数据, 依次推算, 如果FAT项的内容为文件最后一簇时表示文件的数据链结束。
下面我们用一个例子来说明, 假设文件系统运行一段时间后, FAT表和FDT表变成如表1和表2所示。
通过FDT表和FAT表得知:
Name1文件起始为0, 查找FAT表得知文件占用的链为0→1→3→6
Name2文件起始为2, 查找FAT表得知文件占用的链为2→4
Name3文件起始为5, 查找FAT表得知文件占用的链为7→5→8→……
以上得到的链便是文件数据情况, 例如簇大小为512字节, 数据区起始地址0x10000, 那么Name1文件的数据为起始地址为0x10000、0x10200、0x10600、0x10c00的数据簇。通过Name3文件占用的数据簇信息可以看出, 文件使用簇的顺序与簇号的顺序没有关系, 文件某簇的簇号可以比下一簇的簇号大。
如果删除Name1文件后这两个表将变为如表3和表4所示。
Name1文件删除后仅仅时文件在FDT注册取消, 文件占用链被释放, 文件数据还保存在FLASH。由于文件占用链被释放, 因此找不到Name1文件的占用链顺序, 文件也不能恢复。
如果这时FAT表中没有未分配的簇, 但是却需要分配一个簇, 这就需要整理FAT表, 将那些释放的簇变为未分配的簇, 整理后FAT表将如表5所示:
此时第0簇将可以再分配给其他某个文件。
由于定义释放数据簇标志为0x00, 与第0簇冲突, 因此在定义指向下一簇的簇号时, 把指向的簇号+1, 也就是说, 簇从逻辑上讲时从1开始 (数组从0开始) 。例如FAT表中第1个FAT项内容为3, 代表下一个数据簇为第2簇 (对应FAT表第2项) 。
3. 程序文件系统的可靠性保证
掉电保护是为了在写文件系统重要数据时掉电, 使得数据丢失或写入错误数据后能够进行恢复的一种保障机制。主要是通过掉电保护状态项和备份扇区进行恢复, 恢复的途径有两种:一种是继续完成未完成操作, 另一种是恢复到操作前的状态。因此, 在进行掉电保护后的操作只有操作成功或失败两种状态, 如果成功数据写入正确;如果失败, 要将数据恢复到写前的状态。
只有写重要数据时需要用到掉电保护, 非重要数据或不影响文件系统的数据不需要掉电保护, 下面列举需要用到掉电保护的几种情况:
写FAT表
写FAT表有这几种情况:分配一簇给某个文件、删除一个文件时释放文件占用的簇、整理FAT表。对于中间一种情况不需要使用到备份扇区, 对于第一种情况和最后一种就需要用到备份扇区。
写FDT表
写FDT表有这几种情况:创建一个文件、修改文件信息、整理FDT表、删除文件。对于中间两种情况需要用到备份扇区, 其它情况不需要用到备份扇区。
整理数据扇区
对数据扇区的整理主要是由于要写入的数据簇不空, 需要擦除, 但是又不能破坏其它文件的数据。整理数据扇区时需要用到备份扇区。
针对以上几种情况, 文件系统需要做的掉电保护步骤为:
步骤1:找一个未用的掉电保护状态项
步骤2:写掉电保护状态标志为‘准备掉电保护’
步骤3:写入掉电保护信息, 如果要用备份扇区的应该写备份扇区
步骤4:写掉电保护状态标志为‘开始写数据’
步骤5:做要保护的工作
步骤6:写掉电保护状态步骤为‘完成掉电保护’
当步骤1、2、3时掉电表示写掉电保护信息未完成, 此时掉电保护是无效的。步骤4、5时掉电表示已经做好掉电保护, 但是重要数据写入未完成, 掉电保护有效。而步骤6时掉电表示已经完成掉电保护, 数据已经写入, 不需要进行恢复。
用到掉电保护的情况很多, 因此会对备份扇区的寿命产生影响, 为了尽量减少备份扇区使用的次数, 还要保证数据写入正确, 归纳程序文件系统的特征后发现:修改FDT表和FAT表出现在写文件的时候, 而写文件的过程中掉电, 文件的数据是不正确的, 仅当文件数据全部写入后文件数据才有效, 文件数据有效只有在关闭打开文件后, 因此在对文件进行簇分配、写文件时文件长度变化时不写入FLASH, 当关闭文件时将这些信息一次性写入FLASH, 如果写文件过程中掉电, 下次上电时由于未保存文件新分配簇的数据, 文件保持写前的状态。
4. 结束语
本文详细分析了以并行FLASH HY29LV160B为存储介质的程序文件系统的分析与设计, 该文件系统能有效进行管理应用程序、设备驱动程序、动态链接库等程序文件, 通过掉电保护和恢复来保证文件系统的可靠性和完整性, 有较高的安全性。该文件系统适合于多种采用FLASH作为存储介质的嵌入式设备, 具有较高的使用价值。
参考文献
[1]陈智育.嵌入式系统中Flash的文件系统[J].单片机与嵌入式系统应用.2002 (2)
[2]扶小飞, 郑善贤.一种Flash文件系统的设计和实现[J].微计算机信息.2010 (5)
应用程序开发中对文件的运算 篇7
文件的格式非常繁多, 但程序经常操作的文件主要有数据库文件, 文本文件, XML文件, 其它格式的文件都可以直接或间接地转换成这三种格式的文件。
总体而言, 对数据库文件的操作主要是通过数据库管理系统来完成的, 对其它两种格式文件的操作, 主要是通过操作系统的文件管理系统完成的。
就操作模式而言, 对数据库文件的直接操作是通过结构化查询语言完成的;对文本文件的直接操作主要是通过各种语言的正则表达式来完成的 (比如Java语言的正则表达式) ;对XML文件的操作主要是通过一些业界通用的标准接口来完成的 (比如JAXP DOM4j等) 。这些操作模式, 我们可以统称为操作接口。
2 文件运算的常用操作接口的论述
2.1 结构化查询语言
结构化查询语言基于关系数据库的关系模型。关系模型具有坚实的数学理论基础, 而且简单明了, 所以一经推出就受到了学术界和产业界的高度重视和广泛响应, 至今仍是数据库市场的主流。关系数据库中的全部信息均用二维表表示, 表是一种逻辑的概念, 实际上表存储在物理文件上, 在这些表之间不存在用户可见的导航链, 对表 (或物理文件) 的操作和检索是通过数据语言, 即结构化查询语言 (SQL) 来完成, SQL语言通常分为三类:数据操纵语言DML, 数据定义语言DDL, 数据控制语言DCL。DDL (CREATE, ALTER, DROP, DECLARE) 主要实现对关系数据库模式的定义, DML (SELECT, DELETE, UPDATE, INSERT) , 主要实现对数据的增, 删, 改, 查;DCL (GRANT, REVOKE, COMMIT, ROLLBACK) 主要实现对数据库资源权限和事务的控制。需要说明的是, 针对不同的数据库, 对应厂商的分类稍有不同, 但主要内容都是按这种方式分类的。
在应用程序中, 访问数据库资源主要是通过开放数据库互连ODBC (Open Database Connectivity) 驱动或java数据库连接JDBC (Java Data Base Connectivity) 驱动的方式实现的。ODBC是MICROSOFT提出的数据库访问接口标准, 它建立了一组规范, 并提供了一组对数据库访问的标准API (应用程序编程接口) 。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持, 用户可以直接将SQL语句送给ODBC。JDBC由一组Java语言编写的类和接口组成, 为工具/数据库开发人员提供了一个标准的API, 据此可以构建更高级的工具和接口, 使数据库开发人员能够用纯Java API编写数据库应用程序, 实现对数据库文件中数据的运算。
总之, 无论是ODBC还是JDBC, 它本质上都是一个利用SQL操作数据库数据的标准接口, 使应用程序对数据库的操作不依赖任何DBMS (DataBase Management System) , 不直接与DBMS打交道, 所有的数据库操作由对应的DBMS的ODBC或JDBC驱动程序完成.这些驱动程序主要完成三件事:与数据库建立连接、发送操作数据库的语句并处理结果。
ODBC, JDBC作为非常成熟的基础框架, 在系统设计中都得到了广泛的应用, 我们在程序中可以直接通过ODBC或JDBC接口去操作数据库, 也可以通过一些基于ODBC, JDBC的框架去操作数据库, 框架提供了比原始ODBC, JDBC接口更强大的功能, 比如IBM的ETL工具DataStage通过ODBC在AIX等平台上实现异构数据库中数据的交换, JAVA领域著名的OR Mapping工具Hibernate是基于JDBC之上开发出来的。
SQL技术非常成熟, 非常普及, 在此不赘述。
2.2 正则表达式
正则表达式 (Regular Expression) 在计算机科学中, 是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串, 类似于SQL的DML语言, 提供对文件中文本内容的检索或替换。正则表达式的本质是它分别指示字符串的集合和在这些集合上的运算。许多文本编辑器及搜索工具都是基于正则表达式对文本内容进行处理。正则表达式的第一个实用应用程序即为Unix中的qed编辑器。目前主流的开发语言 (PHP、C#、Java、C++、VB、Javascript、Rubby等) 、数以亿万计的各种应用软件中, 以及很多现代工具所使用的库中 (比如unix grep, Perl等) 都可以看到正则表达式散射出的耀眼光芒。
然而, 很多人因为正则表达式看上去比较古怪而且复杂所以不敢去使用, 在这里我用理论加实例的方式简单介绍一下正则表达式的基础知识, 正则表达式由一些普通字符和一些元字符 (元字符, 通俗地说就是正则表达式的保留字符) 组成, 这个表达式的作用相当于一个SQL查询语句, 其中的普通字符包括大小写的字母和数字, 而元字符则具有特殊的含义, 下面对元字符予以解释:
.点:匹配任何单个字符, 如:例如正则表达式r.t匹配这些字符串:rat、rut;
$:匹配行结束符。例如正则表达式Tom$能够匹配字符串There is Tom;
^:匹配一行的开始。例如正则表达式^Where能够匹配字符串Where are you?;
*:匹配任意数量的任何字符;
:这是引用符, 将元字符当作普通的字符来进行匹配, $被用来匹配美元符号;
[]:匹配括号中的任何一个字符。例如正则表达式r[aou]t匹配rat、rot和rut;
<>:匹配词的开始和结束, 例如正则表达式
() :将匹配这个表达式的字符保存到一个临时区域, 用1到9的符号来引用;
|:将两个匹配条件进行逻辑“或” (Or) 运算;
+:匹配1或多个正好在它之前的那个字符。例如正则表达式9+匹配9、99、999等;
?:匹配0或1个正好在它之前的那个字符;
{i}:匹配指定数目的字符, 这些字符是在它之前的表达式定义的;
需要注意的是:不同工具正则表达式有不同的表达风格, 但基本与以上表示法极为相似, 我们熟悉了一种表达方式之后, 其它的也极易掌握。
为了加深读者对正则表达式的理解, 我们抛开空泛的概念, 进一步以JAVA为例, 介绍正则表达式的使用。Java API本身提供了对正则表达式非常好的支持, 也就是说, 我们通过Java语言提供的接口可以非常方便的使用正则表达式 (匹配、查找、替换、判断字符串) 。
2.3 XML查询语言
2.3.1 概述
进入新世纪以来, 数据库技术面临一场变革, 即在原来关系数据库技术成熟之后, 新的数据库技术在哪里?一个重要的的趋势是具有灵活的半结构化特性的XML数据的出现。XML作为一种重要的存储和交换格式, 在互联网络环境中扮演极重要的角色, 它各种资源的数字化等方面得到越来越广泛和深入的应用。可以想象, 在不久的将来, XML数据的规模将可能达到甚至超过各种关系数据库中的数据规模, 从而成为继关系数据之后新的主流数据库。
XML是一种开放的、自描述的方式定义数据结构, 即它可以同时描述数据内容和数据结构, 通过这些结构了解数据之间的关系。下面的几个小节详细分析了XML相关的一些技术及这些技术之间的关系。
2.3.2 XML文档解析
为了能够方便地从XML文档中提取有用信息, 我们可以用一些封装好的API来直接对XML文档进行解析。两种常见的解析方式分别是:SAX和DOM。
SAX (Simple API for XML) 将XML文档看成一个数据流来进行处理, 它不需要将XML文档在内存中构建成树的形式, SAX的工作原理简单地说就是对文档进行顺序扫描, 当扫描到文档 (document) 开始与结束、元素 (element) 开始与结束、文档 (document) 结束等地方时通知事件处理函数, 由事件处理函数做相应动作, 然后继续同样的扫描, 直至文档结束。SAX提供了一系列的标准接口规范供人们编程使用 (如表1) 。
DOM (Document Object Model) 把一个XML文档表示成一个节点树, 并在内存中生成这棵树, 树中可以保存某个结点的父亲及孩子信息, 所以, DOM处理XML文档比较方便, 但消耗内存较大, 对较大的XML文档不太适用。
DOM接口如表3所示。
2.3.3 解析器
SUN参考W3C的标准制订了JAXP规范, 它也只是一个spec, 本身是不做任何事情的, 它的作用就是提出一个统一的接口, 让其它的XML API都来遵循JAXP编程, 那么用JAXP写出来的程序, 底层的API可以任意切换 (解析器) , 本质上它进一步封装了saxdom两种接口。SAX, DOM是两种对XML文档进行分析的方法 (它没有具体的实现, 只有接口) , 它必须配合XML解析器后才可以工作, 两个最常用的解析器是:Crimson和Xerces, Crimson来自于Sun捐赠给Apache的ProjectX项目, Xerces来自IBM捐赠给Apache的XML4J项目, IBM JDK中默认的解析器是:Xerces, 而SUN JDK中默认的解析器是:Crimson。
W3C的DOM标准API操作极不便利, 后来为了便于使用, 人们开发出Java专用的XML API, 结果是就产生了JDOM和DOM4J, 其实可以理解JDOM和DOM4J就相当于SAX/DOM+JAXP, 具体的解释器可以选择。 (关于JDOM和DOM4J更详细的资料, 请读者自己查阅)
目前关于如何处理XML的文章琳琅满目, 各种接口杂乱无章, 通过上面的分析, 我们已经非常清楚地知道:
首先, SAX和DOM是XML文档解析的模型, 它没有具体的实现, 只有接口规范, 单纯的SAX和DOM在处理文档的方式上又有区别, 为了进一步统一接口, SUN参考W3C的标准制订了JAXP规范, 它也只是一个spec, 本身是不做任何事情的。
其次, JAXP, JDOM, DOM4j都统一对SAX, DOM进行了封装, 它们都是为了在Java中提供比DOM和SAX更为方便的XML处理接口而开发的, 他们本身都不包含解析器, 在其之下, 可以任意切换基于SAX或DOM的解析器 (甚至其它解析器) 。
最后值得一提的是, DOM4J是一个非常非常优秀的Java XML API, 具有性能优异、功能强大和极端易用使用的特点, 同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML, 特别是连Sun的JAXM也在用DOM4J, 另外目前许多开源项目中大量采用DOM4J, 例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。
最新的情况是:JSR-173提出了一种面向流的新方法:Streaming API for XML (StAX) , 并成为了JAXP 1.4 (包含在Java 6中) 的一部分。如其名称所暗示的那样, StAX把重点放在流上。实际上, StAX与其他方法的区别就在于应用程序能够把XML作为一个事件流来处理。将XML作为一组事件来处理的想法并不新颖 (事实上SAX已经提出来了) , 但不同之处在于StAX允许应用程序代码把这些事件逐个拉出来, 而不用提供在解析器方便时从解析器中接收事件的处理程序。StAX仍然保留了SAX相对于DOM的优点。通过把重心从结果对象模型转移到解析流本身, 从理论上说应用程序能够处理无限的XML流, 因为事件固有的临时性, 不会在内存中累积起来。
2.3.4 XPath, Xquery
尽管上面的技术可以对XML数据进行处理, 但XML还有一个主要问题就是缺乏良好的搜索支持, XPath和XQuery就是为解决搜索问题的出现的。这些规范/技术允许以XML的方式对XML文档进行搜索。换句话说, 可以使用XML语义进行搜索, 并且不但能够搜索XML文档中的数据, 还能够搜索这些文档的结构。借助XPath和XQuery, 不再需要将数据由XML转换为一种编程语言, 就可以对XML进行搜索。
XPath和XQuery都能实现一些相同的功能, 但是XPath比较简洁而XQuery更加强大和灵活。对于很多查询来说XPath非常合适。比如, 从XML文档中的部分记录建立电话号码的无序列表, 使用XPath实现最简单。但是如果需要表达更复杂的记录选择条件的表达式、转换结果集或者进行递归?查询, 则需要使用XQuery各种运算方法的相互转换。
XSLT是把XML文档转化为另一文档的转换语言, 即将源文档的所有数据或者部分数据, 利用XPath进行选择, 生成另外的XML文档或者其他可直接显示或打印的文件格式 (例如HTML文件、RTF文件或者TeX文件) 。
3 各种文件数据之间的转换
3.1 XML数据与关系数据的转换
XML数据转换成关系数据中的数据经历了两个阶段:首先是基于关系的XML数据管理, 将XML树形结构拆散, 重组转换成关系数据库;目前更新的处理方式是:直接存储XML数据的树形结构 (不需要拆分) , 例如IBM DB2 V9开始直接可以存储XML数据, 还有其它一些纯XML数据库也实现了类似的功能, 这些系统在直接存储XML数据的同时, 都提供了对XML进行搜索的强大功能。
反过来, 将传统关系数据转换成XML数据, 通过编程语言很容易实现。
3.2 文本文件和关系数据的转换
将文本数据转换成关系数据, 大多情况下, 可以实现不同数据库间数据的交换, 但文件的记录要满足一定的规则, 比如需用逗号 (或其它分隔符) 分割不同的数据项,
再通过数据库提供的工具将这些数据导入到关系数据库中, 不同的数据库都提供了类似的导入工具。
4 结束语
这篇文章主要总结了在程序设计过程中, 如何对几种主要的数据文件进行操作, 其中对关系文件中的数据的操作主要是通过SQL语言实现的;对基于文本的数据文件的操作主要是通过关系表达式实现的;对XML数据文件的操作主要有传统的程序处理 (比如通过SAX, DOM, DOM4J, JAXP, 关系数据库等技术相结合) , 新的处理方式是:允许您将格式良好的XML文档以分层结构的形式直接存储在具有XML数据类型的表列 (DB2PureXML) 或纯XML数据库 (国内的OrientX) 。通过直接将XML数据存储在XML列中或纯XML数据库中, 数据可保持其本机分层结构形式, 而不是将其作为文本存储或映射为其他数据模型, 将XML数据以其本机分层结构形式来存储可以使XML的搜索、检索和更新效率更高。XQuery、SQL或上述二者的组合可用于查询和更新XML数据。返回XML数据或采用XML自变量的SQL函数 (称为SQL/XML函数) 还能根据从数据库中检索的值来构造或发布XML数据。
摘要:用数字计算机解决任何问题都离不开程序设计。程序的实质是对数据的加工和处理, 加工处理的数据可能来自于内存, 也可能来自于外部存储器。通常将存放在外存中的数据称为文件, 也叫数据文件, 对文件的操作, 通常称之为运算, 文件的基本运算有两类:检索和修改。文件的检索有又三中方式:顺序存取, 直接存取, 按关键字存取。文件的修改包括:插入数据, 删除数据, 更新数据, 该文主要讨论了程序设计中对文件运算的常用方法。
关键词:结构化查询语言,正则表达式语言,XML查询语言
参考文献
[1]正则表达式参考文档[EB/OL].http://www.regexlab.com.
[2]正则表达式之道[EB/OL].http://baike.baidu.com/view/1427403.htm.
文件处理程序 篇8
C语言是一门通用的、模块化、程序化的编程语言, 被广泛应用于操作系统和应用软件的开发。C语言是以函数作为程序设计的基本单位的, C语言对于输入和输出的处理也是通过函数调用来实现的。各种C语言编译器都会提供一个函数库, 其中包含有许多标准函数, 如各种数学函数、标准输入输出函数等。此外C语言还具有自定义函数的功能, 用户可以根据自己的需要编制满足某种特殊需要的自定义函数。实际上一个C语言源程序可以由一个或多个源文件组成, 每个源文件可由一个或多个函数组成。在开发大型复杂的程序时, 可以根据实际的需要, 把一个大的问题分解成若干个小问题, 每个小问题采用一个功能模块来实现。
2 运行一个多文件的程序
一个有实用价值的C语言应用程序往往较大, 需要划分成不同的文件, 那么如何把这些文件编译连接成一个统一的可执行文件并运行呢?介绍了以下两种方法。
2.1 用Turbo C集成环境的“Project”菜单
首先将一个大的源程序根据其功能合理地划分成若干个小的源程序, 每个小源程序均以程序文件 (.c) 的形式保存在磁盘上。并建立一个包括各个源程序模块的文件名的工程文件 (.prj) 。
然后用编译器进行编译, 将工程文件中指定的多个源程序文件进行编译, 生成多个目标文件和一个可执行文件。注意, 在分模块单独编译处理的各个程序模块中, 必须有且只有一个主函数main () 。
例如:假定从键盘上任意输入10个整数, 按从大到小的次序排列并输出。
程序如下:
在编译状态下, 建立一个“项目文件”, 它不包括任何程序语句, 而只包括组成程序的所有的文件名。即
扩展名.c可以省写, 3个文件顺序任意, 可以连续写在同一行上, 如:
将以上内容存盘, 文件名自定, 但扩展名必须为.prj (表示为project文件) 。现设文件名为f.prj。在Turbo C主菜单中选择Project菜单中的Project name, 输入项目文件名f.prj;按功能键F9, 进行编译连接, 系统先后将3个文件翻译成目标文件, 并把它们连接成一个可执行文件f.exe;按Ctrl+F9键, 即可运行可执行文件f.exe。
2.2 利用编译预处理的文件包含命令
在C语言的编译系统中存在预处理程序模块, 其功能是:在对一个源程序进行编译时, 预处理程序首先对源程序进行扫描, 对C语言中的几种预处理语句进行分析和处理。经过预处理之后, 才进行正式编译以形成目标代码。
书写源程序时, 一般将预处理语句置于开关部分, 每一条预处理语句以“#”开始。C语言提供了编译预处理#include命令来实现“文件包含”的操作, 它的特点是一个源文件可以将另外一个源文件的全部内容包含进来。预处理程序将#include语句所指的文件<源程序>代码完全嵌于被编译程序中#include所在的位置, 以参加正式编译形成目标代码。
其一般形式为:
#include"文件名"
或
#include<文件名>
对文件包含命令的说明如下:
(1) 包含命令中的文件名可以用双撇号括起来, 也可以用尖括号括起来。例如, 以下定法都是允许的:
但是这两种形式是有区别的:使用双撇号 (即〝stdio.h〞形式) 时, 系统首先在用户当前目录中寻找要包含的文件, 若未找到才到包含目录中去查找;使用尖括号 (即
(2) 一个include命令只能指定一个被包含文件, 若有多个文件要包含则需用多个include命令。
(3) 如果文件1包含文件2, 而文件2中要用到文件3的内容, 则可在文件1中用两个include命令分别包含文件2和文件3, 而且文件3应出现在文件2之前, 即在file1.c中定义:
这样, file1和file2都可以用file3的内容。在file2中不必再用#include
(4) 文件包含允许嵌套, 即在一个被包含的文件中又可以包含另一个文件。
(5) 被包含文件与所在的文件 (即用#include命令的源文件) , 在预编译后成为同一个文件。
例如将上例程序 (假定从键盘上任意输入10个整数, 按从大到小的次序排列并输出。) 用文件包含命令运行的方法:
把file2.c文件和file3.c文件包括到file1.c文件中, 可在file1.c中的开头加2行:
这时, 在编译时, 系统自动将这2个文件放到main函数的前头, 作为一个整体编译, 而不是分3个文件编译。这些函数被认为是在同一文件中, 最后形成一个文件名为file1.exe的可执行文件。
3 结语
利用Turbo C集成环境, 在编译时, 系统会分别对项目文件中的每个文件进行编译, 然后再将所得到的目标文件合成为一个整体, 再与系统的有关资源连接, 生成一个可执行文件, 最后执行这个文件, 可以方便多个文件的单个调试和发现问题。从结构化程序设计的方法上看, 可以按功能划分模块, 使结构清晰。当然, 在程序设计中, 文件包含也是很有用的。比如, 一个大的程序可以分为多个模块, 由多个程序员分别编程;有些公用的符号常量或宏定义等可单独组成一个文件, 在其他文件的开头用包含命令包含该文件即可使用, 这样, 可避免在每个文件开头都去书写那些公用量, 从而节省时间, 并减少出错。在实际应用中, 可根据具体情况采用不同的方法。
摘要:介绍了C语言在处理多个文件时采用的两种方法:利用Turbo C提供的“Project”菜单和编译预处理的文件包含命令把多文件的处理转化为单文件处理的方法。通过实例介绍了它们在程序设计中的应用。
关键词:C语言,文件,编译,文件包含
参考文献
[1]谭浩强.C程序设计.北京:清华大学出版社, 1999.
[2]李文杰.C语言程序设计.北京:清华大学出版社, 2010.
[3]王继贤.C语言程序设计实用指南[M].北京:清华大学出版社, 1994.
[4]胡元义, 吕林涛.C语言与程序设计.西安:西安交通大学出版, 2010.