c#提取dat文件中的double类型的数据

想飞的兔子呀 2014-01-08 06:02:56
我想把dat文件中的double类型的数据提取出来,大概有600万个数据,但现在只知道file类只能提取string类型的,我该用什么类来提取呢?
...全文
342 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
想飞的兔子呀 2014-01-13
  • 打赏
  • 举报
回复
继续等待高手们的答复
hanhualangzi 2014-01-10
  • 打赏
  • 举报
回复
600w听着怎么像csdn的密码包...
本拉灯 2014-01-10
  • 打赏
  • 举报
回复
引用 9 楼 u012613604 的回复:
[quote=引用 6 楼 wyd1520 的回复:] [quote=引用 5 楼 u012613604 的回复:] [quote=引用 2 楼 wyd1520 的回复:] 用FileStream呀。然后一小块一小块的读。
为什么要一小块一小块的读呢? 能不能贴出代码呢?万分感谢!!![/quote] 600万你说全部一下子读入。。会内存溢出的。读dat要看里面的格式协义是什么,没有标准的代码。[/quote] 哦,谢谢您~dat文件是采集卡传回来的数,我们自己存成了dat文件格式,具体里面什么协议我就不知道了~~但是matlab里面的读取语句是这样的:

fidin=fopen('E:\我的资料\FIR滤波器设计\230.dat','r','s');
Data=fread(fidin,'double');
x1=Data(2:3000001)';
x2=Data(3000002:6000001)';
[/quote] 这个DATA 转成C#应是 byte吧 就是说他取的数组是从第二字节到第 3000001字段 然后再读3000002到600001这样,不知我对不对,你查一下百度
想飞的兔子呀 2014-01-10
  • 打赏
  • 举报
回复
引用 7 楼 qldsrx 的回复:
你是如何将那么多double数据存到文件中的?总该有个存储规则吧。 按照保存时的规则读取,这是最常规的做法,如果是自己写代码存储,最便捷的做法就是xml或json序列化后存储到文件,那样只要来个反序列化就得到原来的内容了。
那些数据是通过采集卡的数据,Labview编程存回来的!
想飞的兔子呀 2014-01-10
  • 打赏
  • 举报
回复
引用 6 楼 wyd1520 的回复:
[quote=引用 5 楼 u012613604 的回复:] [quote=引用 2 楼 wyd1520 的回复:] 用FileStream呀。然后一小块一小块的读。
为什么要一小块一小块的读呢? 能不能贴出代码呢?万分感谢!!![/quote] 600万你说全部一下子读入。。会内存溢出的。读dat要看里面的格式协义是什么,没有标准的代码。[/quote] 哦,谢谢您~dat文件是采集卡传回来的数,我们自己存成了dat文件格式,具体里面什么协议我就不知道了~~但是matlab里面的读取语句是这样的:

fidin=fopen('E:\我的资料\FIR滤波器设计\230.dat','r','s');
Data=fread(fidin,'double');
x1=Data(2:3000001)';
x2=Data(3000002:6000001)';
想飞的兔子呀 2014-01-10
  • 打赏
  • 举报
回复
引用 11 楼 wyd1520 的回复:
[quote=引用 9 楼 u012613604 的回复:] [quote=引用 6 楼 wyd1520 的回复:] [quote=引用 5 楼 u012613604 的回复:] [quote=引用 2 楼 wyd1520 的回复:] 用FileStream呀。然后一小块一小块的读。
为什么要一小块一小块的读呢? 能不能贴出代码呢?万分感谢!!![/quote] 600万你说全部一下子读入。。会内存溢出的。读dat要看里面的格式协义是什么,没有标准的代码。[/quote] 哦,谢谢您~dat文件是采集卡传回来的数,我们自己存成了dat文件格式,具体里面什么协议我就不知道了~~但是matlab里面的读取语句是这样的:

fidin=fopen('E:\我的资料\FIR滤波器设计\230.dat','r','s');
Data=fread(fidin,'double');
x1=Data(2:3000001)';
x2=Data(3000002:6000001)';
[/quote] 这个DATA 转成C#应是 byte吧 就是说他取的数组是从第二字节到第 3000001字段 然后再读3000002到600001这样,不知我对不对,你查一下百度[/quote] matlab很智能的提取的,在c#里面要考虑到数据的类型,即使是double的,貌似也要判断它的位数,然后不同的类实现的又不一样,用几种方法得到的数据都因为匹配不上而得不到应有的数据,好麻烦的样子!! 我无能为力了。。。还望大神给出解决意见和方法。。
想飞的兔子呀 2014-01-10
  • 打赏
  • 举报
回复
引用 3 楼 gomoku 的回复:
可以用BinaryReader:

using (BinaryReader br = new BinaryReader(File.OpenRead("yourfile.dat")))
{
    for (int i = 0; i < 10; i++)
    {
        double d = br.ReadDouble();
    }
}
得到的果然是double数据,但是数据不对额,可能数据类型不匹配。。。
gomoku 2014-01-09
  • 打赏
  • 举报
回复
可以用BinaryReader:

using (BinaryReader br = new BinaryReader(File.OpenRead("yourfile.dat")))
{
    for (int i = 0; i < 10; i++)
    {
        double d = br.ReadDouble();
    }
}
qldsrx 2014-01-09
  • 打赏
  • 举报
回复
你是如何将那么多double数据存到文件中的?总该有个存储规则吧。 按照保存时的规则读取,这是最常规的做法,如果是自己写代码存储,最便捷的做法就是xml或json序列化后存储到文件,那样只要来个反序列化就得到原来的内容了。
本拉灯 2014-01-09
  • 打赏
  • 举报
回复
引用 5 楼 u012613604 的回复:
[quote=引用 2 楼 wyd1520 的回复:] 用FileStream呀。然后一小块一小块的读。
为什么要一小块一小块的读呢? 能不能贴出代码呢?万分感谢!!![/quote] 600万你说全部一下子读入。。会内存溢出的。读dat要看里面的格式协义是什么,没有标准的代码。
想飞的兔子呀 2014-01-09
  • 打赏
  • 举报
回复
引用 2 楼 wyd1520 的回复:
用FileStream呀。然后一小块一小块的读。
为什么要一小块一小块的读呢? 能不能贴出代码呢?万分感谢!!!
想飞的兔子呀 2014-01-09
  • 打赏
  • 举报
回复
引用 1 楼 BenBenBears 的回复:
提取出来转换不可以吗
我用system.convert.Todouble转换过,但也有错误出现,所以就换方法了~ 您有什么更好的方法吗?
本拉灯 2014-01-08
  • 打赏
  • 举报
回复
用FileStream呀。然后一小块一小块的读。
BenBenBears 2014-01-08
  • 打赏
  • 举报
回复
提取出来转换不可以吗

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧