如何用VC读取文件中的坐标点???

priest2010 2009-09-05 03:09:32
我需要在文件中读取四组数据,如:文件名为“Data.txt”,内容为
0x158 0x147 0x456 0x555 0x158 …
0x123 0x145 0x145 0x159 0x236 …
0x564 0x546 0x254 0x245 0x143 …
0x693 0x358 0x584 0x156 0x147 …
我想以这些数字为纵坐标,以时间轴为横坐标画曲线:
y
|
|
|-------------------------------t1
|0
|
|
|-------------------------------t2
|0
|
|
|-------------------------------t3
|0
|
|-------------------------------t4
0
我用的是MoveTo() LineTo()
请问怎么才能从文件中读取这些数组并用他们画出相应的曲线??
...全文
375 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
pady_pady 2009-09-09
  • 打赏
  • 举报
回复
int i;vector<int> vec;
while(fscanf(fp,"0x%x",&i) == 1)
vec.pushback(i);
MoXiaoRab 2009-09-09
  • 打赏
  • 举报
回复
LS的几位说的已经非常详细了,楼主自己动手好好实践下
jerryyu810 2009-09-09
  • 打赏
  • 举报
回复
readline
然后在分割读出来的一行
schlafenhamster 2009-09-09
  • 打赏
  • 举报
回复
//给一个例子:
// CMyEdit message handlers
#define GridHeight 20
#define GridStartX 40
#define GridStartY 10
// this edit has been disabled !
void CMyEdit::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Erase back ground
CRect rect;
GetClientRect(&rect);
dc.FillSolidRect(&rect,RGB(255,255,128));//a bit yellow
//
int i;
int GridWidth;
// for unit
CString xUnit("0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0") ;
CString yUnit;
CFont *pFont=new CFont;
pFont->CreatePointFont(100,"Small System");// 80=8 point
CFont *oldFont=dc.SelectObject(pFont);
CSize size=dc.GetTextExtent("0.0 ",4);
GridWidth=size.cx;
// Vert |
for (i=0;i<=10;i++)
{
dc.MoveTo(GridStartX+GridWidth*i,GridStartY);
dc.LineTo(GridStartX+GridWidth*i,GridStartY+GridHeight*10);
}
// Hori -
for (i=0;i<=10;i++)
{
dc.MoveTo(GridStartX,GridStartY+GridHeight*i);
dc.LineTo(GridStartX+GridWidth*10,GridStartY+GridHeight*i);
yUnit.Format("%2.1f",1.0-i/10.0);
dc.TextOut(5,GridStartY-size.cy/2+GridHeight*i,yUnit);
}
dc.TextOut(GridStartX-GridWidth/3,GridStartY+size.cy/2+GridHeight*10,xUnit);
//
double zheta;
double pi=3.1415926535897932384626433832795;
double sigma;
for(zheta=0;zheta<=1.0;zheta+=0.001)
{
sigma=exp(-pi*zheta/sqrt(1-zheta*zheta))*GridHeight*10.0;
dc.SetPixel((int)(GridStartX+zheta*10*GridWidth),
(int)((GridStartY+10*GridHeight)-sigma),
RGB(255,0,0));//red
}
//
dc.SelectObject(oldFont);
DeleteObject(pFont);
delete pFont;
}
priest2010 2009-09-08
  • 打赏
  • 举报
回复
坐标点呢,把数据读出来我现在会一种方法了,
但是把数据读出来后怎么转化为坐标点,
是这样的格式:
MoveTo(0,0);
LineTo(x,y);
其中x是时间,y是数据,
怎么实现呢

请高手指教吧~~~~
l181870134 2009-09-08
  • 打赏
  • 举报
回复
一般将C语言的书上都有文件操作的部分 其实可以copy 就行了
至于读取数据 如果知道文档中数据的存储方式 就是挨个数字符估计也能下一个数字
dirdirdir3 2009-09-08
  • 打赏
  • 举报
回复
while(Fscanf(hfile,"%X",&char)!=-1)
.........
seabob 2009-09-08
  • 打赏
  • 举报
回复
请阁下在百度或者谷歌搜索“文件流”或者“文件读写”,耐心看看,会有帮助。
bragi523 2009-09-08
  • 打赏
  • 举报
回复
恩 读文件很简单
用空格区分就好了

改成用配置文件ini应该更容易读一些
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 priest2010 的回复:]
请问怎么读文件中的数据,另外不用txt存数据的话用什么类型的存更好一些

呵呵,菜鸟提问
[/Quote]
不用txt文件,可以用ini文件保存数据:
int t1peizhi[4];
int t2peizhi[4];
int t3peizhi[4];
int t4peizhi[4];
::WritePrivateProfileStruct("t1","t1peizhi",t1peizhi,4,".\\数据点.ini");
::WritePrivateProfileStruct("t2","t2peizhi",t2peizhi,4,".\\数据点.ini");
::WritePrivateProfileStruct("t3","t3peizhi",t3peizhi,4,".\\数据点.ini");
::WritePrivateProfileStruct("t4","t4peizhi",t4peizhi,4,".\\数据点.ini");
这样就把数据读到“.\\数据点.ini”文件下了。用时再读取文件用
::GetPrivateProfileStruct("t1","t1peizhi",t1peizhi,4,".\\数据点.ini");
::GetPrivateProfileStruct("t2","t2peizhi",t2peizhi,4,".\\数据点.ini");
::GetPrivateProfileStruct("t3","t3peizhi",t3peizhi,4,".\\数据点.ini");
::GetPrivateProfileStruct("t4","t4peizhi",t4peizhi,4,".\\数据点.ini");

这样就把文件中的内容又读回到 int数组中了,再根据要求画线就行了
priest2010 2009-09-08
  • 打赏
  • 举报
回复
楼上的高手给的程序看不太明白,有没有详细的

菜鸟求救……
priest2010 2009-09-08
  • 打赏
  • 举报
回复
自己顶一下
等待高手指点
  • 打赏
  • 举报
回复
读到数组,再画
  • 打赏
  • 举报
回复
晕,写错了fscanf 点了一个f -_-!
Randyqiu 2009-09-05
  • 打赏
  • 举报
回复
帮顶吧,,从文本里面读取数据比较麻烦,一般你的这些数据时程序自己获取的吧,那样就直接在内存里面获取就可以了,不用转换
晒月光的青蛙 2009-09-05
  • 打赏
  • 举报
回复
一行一行的读成字符串,然后根据空格分离出数字
楼主耐心的看看书,很快就能搞定的
schlafenhamster 2009-09-05
  • 打赏
  • 举报
回复
用int fscanf( FILE *stream, const char *format [, argument ]... );
如:
do{
...
} while (fscanf(f_list_handle,"%s %s",dos_filename,ffs_name)==2);
vipmmmm 2009-09-05
  • 打赏
  • 举报
回复
在c语言树上介绍读入的很多,可以去找
副组长 2009-09-05
  • 打赏
  • 举报
回复
如果不用文本文件保存数据,可以直接用整型二进制保存数据,优点是不用转换了,读来就是数据直接可以使用。缺点是不直接可见也不可编辑。我的建议是可以用TXT保存,但是最好不用16进制。

我假设你的4组数据每组一行:

CFile f;
f.Open("Data.txt",CFile::modeRead);
int n = f.GetLength();
BYTE * pBuf = new BYTE[n+1];
f.Read(pBuf,n);
pBuf[n] = 0;
//到这里数据都读进来了,在里面//////////////////

//现在将读来的数据分成4组
CString cs1,cs2,cs3,cs4;
cs1 = pBuf; //.....从全部文本中找出第一组
n = cs1.Find[13]; //找到第一个换行的位置,(这里假设每组数据是用换行结束的)
cs2 = cs1.Right(cs1.GetLength()-n);
cs1 = cs1.Left(n)

cs2 = cs2.Right(cs2.GetLength()-cs2.Find('0')); //假设每组都以0开头
.....从全部文本中找出第2组,下同。

...从4组里面再一个一个拆出数据的文本,然后将文本转换成整型数。。。

//如果你保存的是二进制整形数据,上述工作就都可以省略掉了

然后将得到的数据转换成屏幕坐标系。
比如第一组数据要转换到0~200,将你第一组数据的最大值转换成200,最小值转换成0,再把Y轴上下颠倒过来。

这时你就可以LineTo(坐标)了。

priest2010 2009-09-05
  • 打赏
  • 举报
回复
还是不懂,囧

加载更多回复(8)

16,551

社区成员

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

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

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