资源简介

把通达信day文件转换为csv文件,包含上证、深证、港股。对于股票、基金、及港股的不同格式进行了处理。 用法:把stock.exe 复制到 vipdoc\sh\lday 或 vipdoc\sz\lday 或 vipdoc\ds\lday 下面,运行即可在当前目录下把day文件转换为csv格式文件。 采用c语言编写(含源代码),主要是不需要环境即可简单运行。如果需要其他格式或python对应文件,请私信联系。 各种格式说明可见本人文章:通达信日线day文件格式详解(含港股)

资源截图

代码片段和文件信息

// 如果认准一个目标那么就遇事要忍出手要狠善后要稳
//希冀一旦产生,除了实现它,别无他法
#include 
#include 
#include 
#include 
#include 

const char *to_search=“*.day“; //欲查找的文件,支持通配符 

union data{
    int n;
    char ch;
    float m;
};

int convertday(char *fname)
{
    FILE *fp*fpw;
    char str[400];
    char fw[40];
    int nLen;
    int cType =0 ; // 0 上海或深圳股票,1 上海或深圳基金,2 港股或期货等
    union data dNum[8];

    // char c[4];
    nLen = strlen(fname);
    strncpy(fwfnamenLen-4);
    fw[nLen-4]=‘\0‘;

    // 用strstr函数判断股票基金等类型 
    // 函数名: strstr 
    // 功 能: 在串中查找指定字符串的第一次出现 
    // 用 法: char *strstr(char *str1 char *str2); 
    // 说明:返回指向第一次出现str2位置的指针,如果没找到则返回NULL。 

    if(strstr(fw“sz1“))  // 深圳基金
        cType = 1 ;
    if(strstr(fw“sh9“))  // 上证B股
        cType = 1 ;
    if(strstr(fw“sh20“))  // 上证债券 ,逆回购 GCxxx
        cType = 1 ;
    if(strstr(fw“sh5“))  // 上证基金 
        cType = 1 ;
    if(strstr(fw“#“))  // 期货或港股等
        cType = 2 ;
    
    // printf(“fname = %s\n“fname);
    if( (fp=fopen(fname“rb“)) == NULL )
    {  //以二进制方式打开
        printf(“Fail to open file %s!“fname);
        exit(0);
    }

    strcat(fw“.csv\0“);
    // printf(“fw = %s\n“fw);

    // fpw = fopen(fw“wb+“);
    if( (fpw=fopen(fw“wb+“)) == NULL )
    {  //以二进制方式打开
        printf(“Fail to open file %s!“fw);
        exit(0);
    }

    while(!feof(fp))
    {
        nLen = fread(dNum sizeof(union data) 8 fp);
        if(nLen<8) break;
        // printf(“len=%d\n“nLen);
        // dnum[0] //日期整数类型       
        // dnum[1] //开盘价,对于sh 或sz 是整数型/100,基金、债券/1000 对于ds 是浮点数       
        // dnum[2] //最高价,对于sh 或sz 是整数型/100,基金、债券/1000 对于ds 是浮点数       
        // dnum[3] //最低价,对于sh 或sz 是整数型/100,基金、债券/1000 对于ds 是浮点数       
        // dnum[4] //收盘价,对于sh 或sz 是整数型/100,基金、债券/1000 对于ds 是浮点数       
        // dnum[5] //成交金额,浮点数       
        // dnum[6] //成交量,整数型*100       
        // dnum[7] //保留       
        
        switch (cType)
        {
        case 0: /* constant-expression */
            sprintf(str“%d%.2f%.2f%.2f%.2f%.2f%d\r\n\0“dNum[0].ndNum[1].n/100.0dNum[2].n/100.0dNum[3].n/100.0dNum[4].n/100.0dNum[5].mdNum[6].n) ;
            break;
        case 1:
            sprintf(str“%d%.3f%.3f%.3f%.3f%.2f%d\r\n\0“dNum[0].ndNum[1].n/1000.0dNum[2].n/1000.0dNum[3].n/1000.0dNum[4].n/1000.0dNum[5].mdNum[6].n) ;
            break;
        case 2:
            sprintf(str“%d%.3f%.3f%.3f%.3f%.2f%d\r\n\0“dNum[0].ndNum[1].mdNum[2].mdNum[3].mdNum[4].mdNum[5].mdNum[6].n*100) ;
            break;
        default:
            break;
        }
        // printf(“%s len=%d\n“strstrlen(str));
        fwrite(strsizeof(char)strlen(str)fpw);

    }

    fclose(fp);
    fclose(fpw);
    
    return 0;

}


int main() 

    long handle; //用于查找的句柄

    //struct _finddata_t 
    // {
    //     unsigned attrib; 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        5531  2019-06-11 07:16  stock.c
     文件       19828  2019-06-11 07:16  stock.exe

评论

共有 条评论