文本文件中数字类型数据的读取问题--在线等
目的:读取文本文件中的数据绘图。
文本文件内容如下(部分):
6.53E-02
7.14E-02
8.48E-02
9.64E-02
9.95E-02
1.04E-01
1.13E-01
1.06E-01
9.70E-02
我在C++中的程序如下:
#include"iostream.h"
#include <afxdlgs.h>
#include<stdio.h>
void main()
{
CString path="C:\\ECG.txt";
CFileException e;
char aa[1000];
char* FilePath;
CFile File;
File.Open((LPCTSTR)path,CFile::modeRead,&e);
memset(aa,0,sizeof(aa));
UINT readesize=File.Read(aa,sizeof(aa)-sizeof(TCHAR));
cout<<aa;
while(readesize>0)
{
memset(aa,0,sizeof(aa));
readesize=File.Read (aa,sizeof(aa)-sizeof(TCHAR));
cout<<aa;
}
}
这个程序可以读出数据并在dos下显示
但是我把它放到vc中就不是很好用,程序如下:
char Point[1000];
CString path;
CFileDialog CDiaDlg(TRUE,NULL);
if(CDiaDlg.DoModal () == IDOK)
{
path=CDiaDlg.GetPathName();
}
CFileException e;
CFile File;
if(File.Open((LPCTSTR)path,CFile::modeRead,&e))
{
MessageBox("File is opened");
}
memset(Point,0,sizeof(Point));
UINT readesize=File.Read(Point,sizeof(Point)-sizeof(TCHAR));
while(readesize>0)
{
memset(Point,0,sizeof(Point));
readesize=File.Read (Point,sizeof(Point)-sizeof(TCHAR));
}
if ((float)Point[1]==0)
{
MessageBox("Wrong");
}
m_Path= path;
UpdateData(FALSE);
File.Close();
希望朋友们可以帮我指出错误,解决这个问题。或者提供一些其它方法。万分感谢。
问题点数:100、回复次数:12Top
1 楼happyparrot(快乐鹦鹉)回复于 2006-03-21 10:22:01 得分 0
晕。你所谓的问题到底是什么阿???
Top
2 楼ydfivy(我就是一送外卖的)回复于 2006-03-21 10:25:53 得分 0
怎么不对?
Top
3 楼lixiaosan(小三)回复于 2006-03-21 10:29:07 得分 0
虾么意思Top
4 楼huguyue6670(美丽海洋)回复于 2006-03-21 10:29:18 得分 0
你看一下你的数组里得到的是不是你的*.txt的数据,要是不就ok吗Top
5 楼hawkhover(炎岩)回复于 2006-03-21 11:08:49 得分 0
得到的不是我的数据,都是0,就是初始值。
我的问题就是用vc读文本文件中的数据,然后在vc的面板上绘图。谢谢各位Top
6 楼happyparrot(快乐鹦鹉)回复于 2006-03-21 11:19:33 得分 0
memset(Point,0,sizeof(Point));
UINT readesize=File.Read(Point,sizeof(Point)-sizeof(TCHAR));
while(readesize>0)
{
memset(Point,0,sizeof(Point));
readesize=File.Read (Point,sizeof(Point)-sizeof(TCHAR));
}
你这段代码垃圾阿。每次都memset(Point,0,sizeof(Point));自然最后Point中都是空了阿。Top
7 楼happyparrot(快乐鹦鹉)回复于 2006-03-21 11:20:41 得分 0
while(readesize>0)
{
memset(aa,0,sizeof(aa));
readesize=File.Read (aa,sizeof(aa)-sizeof(TCHAR));
cout<<aa;
}
这段代码的cout可以输出aa,没有问题,但下次循环时,aa的内容又被你干掉了。Top
8 楼bluewindyy(班班)回复于 2006-03-21 11:27:28 得分 20
UINT readesize=File.Read(Point,sizeof(Point)-sizeof(TCHAR));
while(readesize>0)
{
memset(Point,0,sizeof(Point));
readesize=File.Read (Point,sizeof(Point)-sizeof(TCHAR));
}
不懂这些在干什么 你文件读出来后又memset为0了 不是等于白读Top
9 楼hawkhover(炎岩)回复于 2006-03-21 12:11:41 得分 0
把循环内部的这段代码memset(Point,0,sizeof(Point));
去掉了,但是数据还是不对Top
10 楼hawkhover(炎岩)回复于 2006-03-21 12:13:49 得分 0
关于那个cout<<aa只是在用C++的时候在DOS下显示输出的。我的目的主要还是在VC下读出数据,谢谢Top
11 楼bluewindyy(班班)回复于 2006-03-21 13:26:14 得分 30
你是不是想每次读取一行啊
CStdioFile的ReadString可以做到 你要读出数据在while里面那个
while(readesize>0)
{
memset(Point,0,sizeof(Point));
readesize=File.Read (Point,sizeof(Point)-sizeof(TCHAR));
// 在这儿也应该有你要把数据显示出去的代码 怎么也没有呢
}
你的程序里aa,sizeof(aa)-sizeof(TCHAR)这种 我也不知道你是什么意思 sizeof(aa);是求aa所占的内存大小
char aa[1000]是1000个字节 减去一个 tchar的大小 和你的要读的数据有什么关系
Top
12 楼happyparrot(快乐鹦鹉)回复于 2006-03-21 13:26:39 得分 50
memset(Point,0,sizeof(Point));
UINT readesize=File.Read(Point,sizeof(Point)-sizeof(TCHAR));
while(readesize>0)
{
memset(Point,0,sizeof(Point));
readesize=File.Read (Point,sizeof(Point)-sizeof(TCHAR));
}
晕阿。光去掉memset(Point,0,sizeof(Point));就行了么?你循环中每次都往Point中写,每次都会被覆盖阿,上次读的内容,下次就会被冲掉阿。这个问题不是VC的问题,是你连逻辑都搞不清楚。再定义一个数据块,来存储每次读出的Point中的内容。Top




