通信达股票数据格式读取程序

通信达股票数据格式读取程序
2008-11-21 19:39

例如读取600237 铜峰电子得日数据.

使用ultraedit 带开D:/common/stock/jcb_gx/Vipdoc/sh/lday/sh600237.day文件

显示如下:

49 7E 31 01 3F 07 00 00 56 07 00 00 3F 04 00 00

3F 07 00 00 97 B0 8D 49 C0 F3 00 00 44 07 00 00

这是是31字节,没四个字节一组数据

分别表示如下信息:

日期 开盘价 最高价 最低价 收盘价 成交量

日期信息: 49 7E 31 01   => 十六进制 01 31 7E 49 => 十进制 20020809 代表了2002年8月9日得数据

开盘价:    3F 07 00 00   => 十六进制 00 00 07 3F=> 十进制 1855      除以100就代表开盘价位18.55元

最高价      56 07 00 00   => 十六进制   00 00 07 56 => 十进制 1878       除以100就代表最高价是18.78元

余下类推。。。

下面是转载来修改改过得读取此文件的vc代码,修改include和Sleep(1000)变成sleep(1)可以在linux编译。

// stock.cpp
//

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include<string>  
#include<iostream>  
#include   "windows.h"

using   namespace   std;  

typedef struct
{
    int date;//4字节 int类型也是1
    int open;
    int high;
    int low;
    int close;
    int amount;
    int vol;
    int reservation;
} StockData;

StockData stockData;
int read_data(FILE *);

int main (int argc, char *argv[])
{
    FILE *fp;
if((fp=fopen("D://common//stock//jcb_gx//Vipdoc//sh//lday//sh999999.day","rb"))==NULL)
    {
   printf("Error: Can^t open file ! ");
   exit(0);
}
    read_data(fp);
    fclose(fp);
    if(getch()==0) getch();
    exit(0);
}

int read_data(FILE *fp)
{
    float fn;
    while(! feof(fp)){
        fread(&stockData,sizeof(StockData),1,fp);
   cout<<"单个记录长度 "<<sizeof(StockData)<<endl;
        printf("日期 %10lu ",stockData.date);
        fn=((float)(stockData.open))/100;
        printf("开牌价 %8.2f ",fn);
        fn=float(stockData.high)/100;
        printf("最高价 %8.2f ",fn);
        fn=float(stockData.low)/100;
   printf("最低价 %8.2f ",fn);
        fn=float(stockData.close)/100;
        printf("收盘价 %8.2f ",fn);
        printf("多多 %8lu ",stockData.amount);
   fn=float(stockData.vol)/100;
        printf("成交量 %8.1f ",fn);
   printf("reservation %8lu ",stockData.reservation);
   //Sleep(1000);
   cout<<endl;
    }

你可能感兴趣的:(linux,struct,File,include,float,FP)