資源簡介
把通達信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
評論
共有 條評論