时间: 2021-07-31 作者:daque
笔者前不久曾遇到一个题目,处置之后的体味愿与大师瓜分。题目是如许的,有一批数据文献,数据方法如次:日子,开盘,最高,最低,收盘,拍板量,拍板金额1996年5月13日,636.96,636.96,636.96,636.96,0,0,1996年5月14日,641.61,641.61,641.61,641.61,0,0,1996年5月15日,637.83,637.83,637.83,637.83,0,0,............. 诉求将数据填写到四张表中,再不作相映的领会。笔者发端用cfile和cstdiofile类的本领读取件。cfile类供给了鉴于二进制流的文献操纵,功效一致于c谈话中的fread()和fwrite()因变量。cstdiofile供给了鉴于字符串流的文献操纵,功效一致于c谈话中fgets()和fputs()因变量。然而笔者创造,运用这两个类举行文献操纵时,对于一次文献读写的数据量的巨细必需控制在65535字节以内。究其因为是在vc中考察大于65535字节的缓冲区须要huge型南针,而在cfile和cstdiofile类中,运用的是far型的南针。因为far型南针不具备跨段寻址的本领,所以控制了一次文献读写的长度小于65535字节。即使传播给cfile和cstdiofile两个类的分子因变量的数据缓冲区的巨细大于65535字节的功夫,vc就会爆发assert缺点。 对准文献方法特性,笔者改用carchive类举行读取如次:cfile sourcefile;//数据文献cstring sourcedata;//设置一偶尔变量生存一条记载sourcefile.open(.......);carchive ar(&sourcefile,carchive::load);while(null!=ar.readstring(sourcedata))//轮回读取文献,直到文献中断{if(sourcedata=="日子,开盘,最高,最低,收盘,拍板量,拍板金额"||sourcedata=="")continue;//跳过文献头部的提醒消息 //领会并弥补//} 在举行领会时,笔者采用了渐渐领会并窜改的方法,进程如次:int nyear;cstring year= sourcedata.left(sourcedata.find("年"));//截取年前方的字符串nyear=atoi(year);//典型变换sourcedata=sourcedata.righ(sourcedata.getlength()-sourcedata.find("年")-2);//将年以及前方的字符简略。 反复上头领会进程,直到记载结束。 经过上述本领,笔者胜利地将文献读取并领会弥补。