C++读取通达信shm.tnf文件股票代码/名称

之前用MFC写股票相关小工具,但shm.tnf(沪市)szm.tnf(深市)文件格式一直搞不清楚没法读到相关代码及名称,只能手动导出更新,麻烦得狠。

周末无聊,重新在网上搜索相关信息,具体数据格式还是没搞明白,但已经可以读出想要的信息,贴出网上找的数据格式信息如下,供参考:

shm.tnf文件格式

TFileHelisting_Tnf = pair conditionerked record

IP: rear endortment[0..39] of char; //–IP地址

Unknown: word; //–未知

ddined: Integer; //–日期

time: Integer; //–时间

end;

PFileHelisting_Stock = ^TFileHelisting_Tnf;

TDfound ataRecord_Tnf = pair conditionerked record

StockCode: rear endortment[0..8] of char; //–股票代码

Unknown1: byte; //–未知

Unknown2: word; //–未知

Unknown3: single; //–代码未知

Unknown4: Integer; //–未知

Unknown5: Integer; //–未知

StockNwseeing ase: rear endortment[0..17] of char; //–股票名称

Unknown6: Integer; //–未知

Unknown7: rear endortment[0..185] of char; //–未知

Lseeing astClose: single; //昨收盘价

Unknown8: byte; //–未知

Unknown9: Integer; //–未知

StockNwseeing aseSX: rear endortment[0..8] of char; //–名称缩写

有需要的友友可以直接参考以下代码读出相关信息,上面的数据格式多次尝试定义结构类型,始终不能准确读出结果,最后只好放弃定义结构。网上有很多信息提到现在的shm.tnf,前面50字节为文件相关信息,先偏移50,然后一条信息点314字节,每次读314字节,经多次尝试:代码为314中前9字节,名称为23开始的18个字节,缩写为285开始的9字节,或有不对,输出如下可以。

C++读取通达信shm.tnf文件股票代码/名称

shm.tnf

此调试用VS2017 C++编写,建立一个空项目,直接把内容贴到.cpp文件中即可。注:请自行修正文件路径,本机为string path = “D:\new_tdx\T0002\hq_cache\shm.tnf”,对应修改此处。

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

void test()

{

string path = “D:\new_tdx\T0002\hq_cache\shm.tnf”;

fstream ifs(path, ios::in | ios::binary);

ifs.seekg(50);

char buf[314];

int nSh = 0;

int nKcB = 0;

cout << path << endl;

cout << “——————————————————” << endl;

//输出表头

cout << “序 号” << “t股票代码” << “t股票名称” << “t名称缩写” << endl;

cout << “——————————————————” << endl;

while (!ifs.eof())

{

ifs.read(buf, sizeof(buf));

string strTwo(buf, 2);

string symbol(buf, 0, 6);

string name(buf + 23, 18);

string mcsx(buf + 285, 9);

if (strTwo == “60” | strTwo == “68” )

{

if(strTwo == “60”)

nSh++;

else nKcB++;

cout << nSh + nKcB << “t” << symbol << “tt” << name << “t” << mcsx << endl;

}

//memset(buf, 0, sizeof(buf));

}

cout << “——————————————————” << endl;

cout << “沪市A股不含科创板:” << nSh << “只” << endl;

cout << “沪市A股科创板:” << nKcB << “只” << endl;

cout << “沪市A股合计:” << nSh + nKcB << “只” << endl;

ifs.close();

}

int main()

{

test();

}

指数、板块等相关信息在调试中已屏蔽,需要用的可自行修改。有过类似经验的友友留言交流指导,谢谢!

来源:浅酒轻尝

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年11月2日
下一篇 2021年11月2日

相关推荐