有一个产品,需要根据上交所的数据,每15s钟计算一次它的数值,然后发给上交所。
这里就是实时净值计算程序的修改。
【存在问题一:】
上交所给来的文件是DBF文件,里面有各个股票证券的开盘价啊、收盘价啊等,使用javadbf来读取时,会报错,主要是0.000数据,会报--.---读取异常的错误。
解决方法:
更改javadbf的源程序,识别到--.---这个格式后,跳过parse的步骤,直接给它赋值0.0。
在javadbf远程的DBFReader.java文件nextRecord函数里(),对“-.---”的格式进行判断,将其置值为0.0。
代码改动部分:
public Object[] nextRecord() throws DBFException {
……
// 修改Begin:支持-.---情况
String strtemp = new String( t_numeric);
if(strtemp.equals("-.---") || strtemp.equals("-")){
recordObjects[i]=0.0;
continue;
}
//修改End
……
【存在问题二:】小数的0没有显示出来,如0.12会显示成.12。
在javadbf源程序的Utils.java文件doubleFormatting函数里,对DecimalFormat进行处理,设置为“###0.0000”格式,即可完成小数点前0的显示。
#的意思是可选,没有就不填,0的意思是要填写这一位。开始是####.0000格式。
代码改动部分:
public static byte[] doubleFormating(…) {
……
// 修改Begin:小数点前的0可以显示出来
for( int i=0; i<sizeWholePart - 1; i++) {
format.append( "#");
}
format.append("0");
// 修改end
……
【存在问题三:】
生成的dbf是使用全部覆盖重新填写的方式,这样子不好,因为有时候去读取,会读取到空。所以改为更新update的方式,而不是覆盖写方式。
使用javaNIO提供的方式,提供文件开始偏移量,字节就可以了。
怎么去计算偏移量呢,就需要看javadbf文件的定义了,去计算就好。