报文解析之数据更新.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
报文解析之数据更新

课程设计报告 课程名称: Unix下C 设计题目: 报文解析之数据更新 姓 名: 专 业: 网络工程 班 级: 学 号: 计算机科学与技术学院 网络系 2013 年 12月 25 日 设计项目: 报文解析之数据更新 选题背景 报文解析之数据更新:通过命令参数指定更新内容和更新条件,可模仿update语句。 文件中定义每个学生的相关信息,包括学号、学生姓名、年龄、性别、系别。针对当前题目可以将每一个学生的信息定义成固定长度格式,方便检索和更新。 例如指定程序名称为update 使用方法可指定为 update a.txt set dept=cs where s#=010101 设计思路 完成文件update.c实现更新功能,更新格式如下: update datafilename set fieldname1=value1 where fieldname2=value2 严格按照格式输入命令行参数,等号两边不能存在空格。每次只能改变一个字段的值Fuction部分用来专门设置具体实现函数功能过程,来完成更新功能。再更新过程中利用了三个函数来实现整个过程。 函数get_content是对fieldname=value的filename和value进行提取信息。 函数check是对每行信息检查是否符合where fieldname2=value2条件。 函数change是对每行符合where fieldname2=value2条件的信息,实现所需要的更新操作。 在这过程中为了数据的方便,编写了makedata.c来生成数据;由于对datafile进行了多次修改,内容的变化不利于多次测试,为了多次测试,编写了retest.c文件生成retest可执行程序来还原datafile的内容。 主要问题的解决方法和关键技术 报文解析是UNIX应用的重要内容。报文解析利用到了对于文件的操作,打开文件,关闭文件,从文件流读取以及输出到文件流中,从文件流中读取一个字符串之后,对其信息进行提取,提取出所需要的信息。函数fopen打开或创建文件;fclose关闭文件;函数freopen重新打开文件;函数remove删除磁盘文件;函数rename更改文件名称?如果遇到换行符,该换行符将被读入字符串,再在换行符后加一’\0’”;而在本次实验中所有的判断字符串结束时利用str[i]!=’\0’忽略了’\n’的存在导致每次查找最后一项时查找不到,更改最后一项时又出现输出格式的错误。 图3-4 更改信息缺少换行 这个问题是本次实验最大的收获,多出单步执行才检查到错误,以下是单步执行的过程: 图3-5 单步执行的代码 单步执行时候,对于同样的Math开始的时候,利用strcmp的结果并不是0,所以又将两个字符串分别用strlen函数测量出长度并输出,发现从报文中解析出来的Math的长度为5,而且与以上输出结果缺少换行问题,都是问题出现在了最后一个字母的部分,并且将fgets和fputs换掉之后,运行结果一切正常,所以可以知道是fgets和fputs的问题。 图3-6单步执行的结果 修改正确后输出单步执行的结果,发现现在结果已经正确,更改代码如下,将’\0’改为’\n’: 图3-7错误代码 图3-8正确代码 四、程序流程图 五、原程序清单 #include stdio.h #include string.h #include stdlib.h /*该函数实现的是对dept=Math提取dept信息和Math信息,将类别以数字形式存在*type中,将内容存在content中,类型0、1、2、3、4分别表示s#、name、age、*sex、dept即类型所对应的数字正好符合每一项所在的几个冒号的后面,方便更改信息*的处理,由于对于set和where两处都需要用到此查找方法,故写成函数形式,可以多次调用实现同一功能*/ int get_content(char str[],char content[]){ int type=-1; if(strncmp(str,s#,2)==0){ type=0; strcpy(content,str+3); }else if(strncmp(str,name,4)==0){ type=1; strcpy(content,str+5); }else if(strncmp(str,age,3)==0){ type=2; strcpy(cont

文档评论(0)

haocen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档