winceVC++读取txt文件保存到数组

hexiaoyun128 2012-04-10 01:34:13
如题,data.txt文件如下:(每行一个数据,有换行)
0.602634
0.603015
0.602634
0.602634
0.603015
如何将他读取并保存到一个数组float m[]中呢?
...全文
353 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
mce2006 2012-04-11
  • 打赏
  • 举报
回复
怎么会不行呢?LZ那要什么要求的

你试试下面的代码

#include "stdafx.h"

static void ReadFloatData(float *m)
{
FILE *fp;
int i = 0;
fp = fopen("\\StorageCard\\data.txt", "r");
if(fp)
{
while(!feof(fp))
{
fscanf(fp, "%f", &m[i++]);

TCHAR szBuf[128];
_stprintf(szBuf, L"%f\n", m[i-1]);
OutputDebugString(szBuf);
}
fclose(fp);
}
}

int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
float m[5] = {0};
ReadFloatData(m);
return 0;
}


\StorageCard\data.txt文件(ANSI)
0.602634
0.603015
0.602634
0.602634
0.603015
hexiaoyun128 2012-04-11
  • 打赏
  • 举报
回复
谢谢mce2006,OK了,
yhp1888 2012-04-11
  • 打赏
  • 举报
回复
我看错了!上面的回复取消!

[Quote=引用 18 楼 的回复:]
引用 17 楼 的回复:

LZ你写代码能力很弱. 如果下面的代码可能的话,可以结帖了!

C/C++ code

static void WriteFloatData(const float *m, size_t s)
{
FILE *fp;
int i =……


LS的绝对不可以!
WinCE VC是Unocode,你的“fprintf(fp, "%f\n", m[……
[/Quote]
yhp1888 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

LZ你写代码能力很弱. 如果下面的代码可能的话,可以结帖了!

C/C++ code

static void WriteFloatData(const float *m, size_t s)
{
FILE *fp;
int i =……
[/Quote]

LS的绝对不可以!
WinCE VC是Unocode,你的“fprintf(fp, "%f\n", m[i]);”通不过,要改成
"fprintf(fp, _T("%f\n"), m[i]);"
……
mce2006 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
试了,我再把数组中的数据保存到另一个文本中时,里面是乱码。不过还是谢谢你,专门为我上传个工程代码。
[/Quote]

LZ你写代码能力很弱. 如果下面的代码可能的话,可以结帖了!

static void WriteFloatData(const float *m, size_t s)
{
FILE *fp;
int i = 0;
fp = fopen("\\StorageCard\\out.txt", "w");
if(fp)
{
for (size_t i = 0; i < s; ++i)
{
fprintf(fp, "%f\n", m[i]);
}
fclose(fp);
}
}


WriteFloatData(m, 5);
yhp1888 2012-04-11
  • 打赏
  • 举报
回复
下面是我实际的eVC代码:

void GetOneLineStr(FILE *pf, LPTSTR pszBuf, int nCodeType)
{
if(nCodeType==0) // 编码类型: 0=ANSI, 1=UNICODE
{
while( !feof(pf) )
{
*pszBuf = fgetc(pf); // _fgettc() // 从流读取一个字符
if(*pszBuf == _T('\n')) break;
pszBuf++;
}
*(pszBuf-1) = _T('\0');
}
else if(nCodeType==1)
{
while( !feof(pf) )
{
*pszBuf = (char)fgetwc(pf); // _fgettc() // 从流读取一个字符
if(*pszBuf == _T('\n')) break;
pszBuf++;
}
*(pszBuf-1) = _T('\0');
}
}

BOOL LoadFile()
{
// CString strFileName = _T("\\Disk\\data.txt");
CString strFileName = _T("C:\\data.txt");
int nCodeType = 0; // 编码类型: 0=ANSI, 1=UNICODE

FILE * pfile;
TCHAR uzLine[1024];
float m[1024];
int i = 0;

pfile = _tfopen(strFileName, _T("rb"));
if( pfile )
{
int ch1 = 0, ch2 = 0;
ch1 = fgetc(pfile);
ch2 = fgetc(pfile);
if(ch1==0xFF && ch2==0xFE)
{
nCodeType = 1; // 编码类型: 0=ANSI, 1=UNICODE
}
else
{
fseek(pfile, 0L, SEEK_SET);
}

fseek(pfile, 0L, SEEK_SET);
while( !feof( pfile ))
{
if( feof(pfile) ) goto exit;
GetOneLineStr(pfile, uzLine, nCodeType);
m[i] = (float)atof(uzLine);
// CString str;
// str.Format("%f", m[i]);
// AfxMessageBox(str); // 测试,是你要的结果
i ++;
}
fclose(pfile);
}
exit:

return TRUE;
}

hexiaoyun128 2012-04-11
  • 打赏
  • 举报
回复
试了,我再把数组中的数据保存到另一个文本中时,里面是乱码。不过还是谢谢你,专门为我上传个工程代码。
mce2006 2012-04-11
  • 打赏
  • 举报
回复
不会吧
我把代码和exe文件上传了,你试试
http://download.csdn.net/detail/mce2006/4217054
hexiaoyun128 2012-04-11
  • 打赏
  • 举报
回复
试过了,wince下不行
西山小月 2012-04-10
  • 打赏
  • 举报
回复
如果位数固定的话,先读到字符串里,然后以小数点为标志,找小数点后几位,作为一个完整的数,转换为float
hexiaoyun128 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 2 楼 的回复:
C/C++ code


void ReadFloatData(float *m)
{
FILE *fp;
int i = 0;
fp = fopen("\\StorageCard\\data.txt", "r");
if(fp)
{
while(!feof(fp))
{
fscanf(fp, "%f", &……


这里代码都贴……
[/Quote]
要是这个能解决就好了
wince下不行
贝隆 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 1 楼 的回复:

在PC上能够这样实现,但是在wince上不行
CString str, filename;
float m[10];
filename = "data.txt";
CStdioFile openfile(filename, CFile::modeRead);
for(int i=0; i<10;i++)//读取10个
{
openfile.ReadStr……
[/Quote]+++
woshi_ziyu 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

在PC上能够这样实现,但是在wince上不行
CString str, filename;
float m[10];
filename = "data.txt";
CStdioFile openfile(filename, CFile::modeRead);
for(int i=0; i<10;i++)//读取10个
{
openfile.ReadString(str);
m[……
[/Quote]
++。
mce2006 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
C/C++ code


void ReadFloatData(float *m)
{
FILE *fp;
int i = 0;
fp = fopen("\\StorageCard\\data.txt", "r");
if(fp)
{
while(!feof(fp))
{
fscanf(fp, "%f", &……
[/Quote]

这里代码都贴上来了,这样不行吗?
hexiaoyun128 2012-04-10
  • 打赏
  • 举报
回复
谢谢91program,可是小弟还是不知道怎么实现,纠结呀
91program 2012-04-10
  • 打赏
  • 举报
回复
最好不要使用 CString 和 LPTSTR,中间带 T 的在 CE 下会被认为是 Unicode 类型的字符串,而不是 char 的
91program 2012-04-10
  • 打赏
  • 举报
回复
好像是没有什么难度,直接读到 char 型数组中

注意不要使用 Unicode 类型的函数
一介布衣萧萧 2012-04-10
  • 打赏
  • 举报
回复
使用文件逐行读取,把每一行的数据放到数据中就OK
mce2006 2012-04-10
  • 打赏
  • 举报
回复


void ReadFloatData(float *m)
{
FILE *fp;
int i = 0;
fp = fopen("data.txt", "r");
if(fp)
{
while(!feof(fp))
{
fscanf(fp, "%f", &m[i++]);
}
fclose(fp);
}
}
hexiaoyun128 2012-04-10
  • 打赏
  • 举报
回复
在PC上能够这样实现,但是在wince上不行
CString str, filename;
float m[10];
filename = "data.txt";
CStdioFile openfile(filename, CFile::modeRead);
for(int i=0; i<10;i++)//读取10个
{
openfile.ReadString(str);
m[i]=(float)atof((char *)(LPTSTR)(LPCTSTR)str);
//CString 转 float
// swscanf((wchar_t*)(LPTSTR)(LPCTSTR)str, _T("%f"), &m[i]);
}

19,503

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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