如何使用CStdioFile类获得文件的特定的行列内容

洗洗睡去 2009-06-06 03:51:14
各位大大,小弟在读个文件 做分析 文件的内容格式差不多这样
a b c d e f
1 2.4 5.3 5.2……
2 1.7……
3……
4……
5
6
从第1行第1列开始是有意义的数字 我想问下
1 怎么样用CStdioFile类来读取特定列 比如第2 3列的内容
2 怎么样转换格式?readstring读出的是CString型 的 要转换为double?
谢谢
...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
洗洗睡去 2009-06-09
  • 打赏
  • 举报
回复
谢谢各位的回答 我就是一行一行取 然后再用left 之类的获得
长老QY 2009-06-07
  • 打赏
  • 举报
回复

将指定行读出,获得是一个整行字符串,然后调用AfxExtractSubString函数提取出每个子字符串,再调用atof将字符串转换成double.


CString str = _T("");
m_File.ReadString(str);//str = "2.4 5.3 5.2";

for (int i=0; i<3; i++)
{
CString substr =_T("");
AfxExtractSubString(substr, str, i, ' ');
double a = atof(substr);
}

bobohack 2009-06-07
  • 打赏
  • 举报
回复
好像不可以
晨星 2009-06-07
  • 打赏
  • 举报
回复
数据库系统在从磁盘提取数据时,常常有这种“按列读”的能力,但那是因为它们对数据的存储格式进行了大量的设计和优化。
而我们自己程序中存储少量数据的小文件,通常没必要在数据格式上面花那么多精力,逐行读、依次取,性能差不多符合要求就可以了。
如果读取的性能对某个程序来说真的很重要,那倒应该改用二进制格式而不是文本格式来存储数据。
在数据量不多的情况下,还有一种方法是一次性把整个文件解析为一个大的数据对象存储在内存中,然后在内存里爱怎么使用就怎么使用。
洗洗睡去 2009-06-07
  • 打赏
  • 举报
回复
谢谢楼上 我也是一下读取整行 然后 left right这样取的
greatws 2009-06-06
  • 打赏
  • 举报
回复
不能直接读取指定列,必须把全部行读完,把需要的列的数据取出来。

可用_stscanf函数,解析每行的字符串,同时可将一个字符串转换成double变量
菜牛 2009-06-06
  • 打赏
  • 举报
回复
逐行读取,可以计数到你需要的行数,或者根据特征判断是否需要的数据;读取后可以用_tcsscanf等函数来解析字符串,或者根据空格等先拆分再转换(_tstof等)。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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