求大神C#编程:打开并读取格式为“.day”的文件!!!求助!!!

.day 是股票数据的存储文件

这是个二进制文件,用低级函数读写。
建议先用ultraedit打开,把里面的结构搞清楚,例如那一段是股票代号,哪一段是名称,哪一段价格。
第二步:读写流。读写二进制文件用System.IO.BinaryReader和System.IO.BinaryWriter类;
你同样要分析数据格式。特别day文件里的日期,我是老早搞过,现在都忘了。里面的日期好像还要换算。day文件里存储的是一段时期的每天价格。这个好像很好分析的。原来用delphi编过,刚才找没找到,可能被老婆给删除了。

这个给你参考:
一、数据文件和数据结构:
大智慧数据文件和数据结构:(假设大智慧股票行情软件安装在D:dzh目录下)
上海日线存储路径为:D:dzhDATASHaseDay,文件扩展名为:.day
上海周线存储路径为:D:dzhDATASHaseweek,文件扩展名为: .wek
上海月线存储路径为:D:dzhDATASHasemonth,文件扩展名为: .mnt
深圳日线存储路径为:D:dzhDATASZnseDay
深圳周线存储路径为:D:dzhDATASZnseweek
深圳月线存储路径为:D:dzhDATASZnsemonth
周线,月线格式与日线格式一致.
以深发展日线为例:
1A76:0100 D6 CD 2F 01 52 07 01 00-52 07 01 00 52 07 01 00
1A76:0110 52 07 01 00 86 0F 00 00-4D 02 00 00 00 00 00 00
1A76:0120 00 00 00 00 00 00 00 00-D7 CD 2F 01 60 03 01 00
1A76:0130 60 03 01 00 60 03 01 00-60 03 01 00 82 05 00 00
1A76:0140 D4 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
每一条记录的长度为40字节:
1-4字节为日期,D6 CD 2F 01转换为十进制是:19910102
5-8字节=开盘价(元)*1000
9-12字节=最高价(元)*1000
13-16字节=最低价(元)*1000
17-20字节=收盘价(元)*1000
21-24字节=成交金额(元)/1000
25-28字节=成交量(手)
其余12字节未使用
实现步骤:
1、先定义日线数据结构数组
2、再以实际记录数分配动态数组空间
3、然后把数据读入相应数组中
日线数据放在:%app_dir%\DATA\SHase\Day(上证A股) 以及 %app_dir%\DATA\SZnse\Day(深圳A股)
#pragma once
struct DZH5Day
{
unsigned long date;//date的格式:20070423
unsigned long open;//开盘价
unsigned long high;//最高价
unsigned long low;//最低价
unsigned long close;//收盘价
unsigned long moneysum;//成交金额
unsigned long turnover;//成交数量
char unused[12];//保留
};
整个结构共40个字节,读者可以查看所有的日线文件,大小肯定是40的倍数
这样很容易读出相应的数据:
如:
FILE* pFile = fopen("600001.day", "rb");
if (NULL != pFile)
{
while(!feof(pFile))
{
DZH5Day dayK;
fread(&dayK, sizeof(DZH5Day), 1, pFile);
......
}
}
-------------------------------------------------------------------------------------------------------
温馨提示:内容为网友见解,仅供参考
无其他回答

求大神C#编程:打开并读取格式为“.day”的文件!!!求助!!!
上海日线存储路径为:D:dzhDATASHaseDay,文件扩展名为:.day 上海周线存储路径为:D:dzhDATASHaseweek,文件扩展名为: .wek 上海月线存储路径为:D:dzhDATASHasemonth,文件扩展名为: .mnt 深圳日线存储路径为:D:dzhDATASZnseDay 深圳周线存储路径为:D:dzhDATASZnseweek 深圳月线存储路径为:D:dzhDATASZnse...

求大神改错 c#问题输入一个日期,计算这一天是本年的第几天。
month = Convert.ToInt32(yue);day = Convert.ToInt32(ri);DateTime dt1 = new DateTime(year, 1, 1);DateTime dt2 = new DateTime(year, month, day);TimeSpan ts = dt2 - dt1;int days = ts.Days + 1;Console.WriteLine(days );Console.ReadLine();} 祝你顺利!

C# 读取 数据库 datetime 日期数据问题
把那个字段的数据类型换成字符型 也就是Varchar 或者Nvarchar这种.是不会变的.或都变成SmallDateTime这种类型 再有..取值的时候也要用DateTime类型来取.原来的应该是DateTime类型的.自动长度就是那样.就算只赋值年月.也会自动把时.分.秒赋上值

c#编程题求解
Console.ForegroundColor = ConsoleColor.Green; \/\/字体颜色改为绿色Console.WriteLine("请输入年");var year = Console.ReadLine();Console.WriteLine("请输入月");var month = Console.ReadLine();Console.WriteLine("请输入日");var day = Console.ReadLine();try{ DateTime usertime= Convert....

c# 时间格式如何不带上午,很急!
方法1:利用日期的属性Year、Month、Day、Minute、Second取出自己拼接 方法2:将日期转换为字符串,然后查找上午,把他去除即可

.net c# 验证输入时间格式的有效性
DateTime.trypares(要验证的东西,out bool参数)如果BOOL为TRUE 则验证通过.FLASE 验证不通过. 手码.应该写错了- -..这个函数就是用来验证各种尝试转型的撒

c#中查询access表中的日期,access数据库中日期格式为“日期\/时间”,我 ...
12、CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1,否则记录可能显示不完整 13、备注类型要通过cast(column as varchar)来使用 14、true\/false类型不能使用,要变为1\/0 15、对此两种数据库进行操作的sql语句不全相同,例如:在对ACCESS数据库进行删除纪录时用:"delete * from ...

请问怎么用c#编程方法使时间转变为一串数字
用一个时间格式,要转成字符串,,这要求很怪啊。如果想把一个Datetime转成这样的,string temp = DateTime.Now.ToString(string.Format("{0}{1}{2}{3}{4}{5}",DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day,DateTime.Now.Hour,DateTime.Now.Minute,DateTime.Now.Second));如果只是一...

新手求大神解决c# 从字符串转换日期和\/或时间时,转换失败。
SqlParameter parameter2 = new SqlParameter("@dts", dts);SqlParameter parameter3 = new SqlParameter("@dte", dte);这里直接用 字符串作为参数试试。就是别用DateTime类型

用C#编写一个输入某一年的年份和月份,计算该月的天数的编程.
int c, mouth=0, day=0,year;int sum=0;do { Console.WriteLine("请输入年:");year=int.Parse(Console.ReadLine());Console.WriteLine("请输入月份:");mouth = int.Parse(Console.ReadLine());Console.WriteLine("请输入日数:");day = int.Parse(Console.ReadLine());if ((mouth < 1...

相似回答