如何用VC读取.txt文件中的数据???

cpboy 2004-11-11 08:49:31
比如说,txt文件内容为:
1 20.006 123.0 124 125.0
2 21.006 .2420 125 225.1
3 22.006 125.0 126 325.2
4 23.006 .2690 127 425.3

不知道文件的行数(序列数),进行读取数据。

1、如何获得数据呢?
2、如何结束读取?当记录结束的时候
...全文
1852 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zpingy 2004-11-11
  • 打赏
  • 举报
回复
我已经知道了,
关键一行有五个数据,需要一个个字符去判断'\0','\n'然后分成单个CString么?
如何把它们分开,可以帮我写几行么?我对相关的函数不熟,谢谢!
---------------------------------
以前写的函数:
void DispatchStr(CString strin,CArray<CString,CString> &m_arr)
{
int n = strin.Find(' ',0);
while(n != -1)
{
m_arr.Add(strin.Left(n));
strin.Delete(0,n+1);
n = strin.Find(' ',0);
}
m_arr.Add(strin);
}
zjz800800 2004-11-11
  • 打赏
  • 举报
回复
char* pFileName = "aaa.txt";
CStdioFile file;
CString filename;
filename = "aaa.txt";
char buff[254];
file.Open(filename,CFile::modeReadWrite);

while(file.ReadString(buff,254))
{
}
cpboy 2004-11-11
  • 打赏
  • 举报
回复
我已经知道了,
关键一行有五个数据,需要一个个字符去判断'\0','\n'然后分成单个CString么?
如何把它们分开,可以帮我写几行么?我对相关的函数不熟,谢谢!
yintongshun 2004-11-11
  • 打赏
  • 举报
回复
如何使用CStdioFile::ReadString来读文件?
[ 文章来源:网络 发表日期:2003/11/15 提交:TomyDan网络工作室 ]

[问题提出]
 一数据文件一行一条记录,我用file.readstring()一次读一行,并对读取的数据做一些处理;
 请问:while(文件还没到结尾)
 {
 file.readstring();
 ...
 }
 ??文件还没到结尾如何判断?
 如果,到了指定位置不读了,过一会儿再读又如何做?
 [解决方法]
 while()中不用另加判断条件了,因为CStdioFile::ReadString()本身就是判断标志,若没有了(文件到头)返回NULL,因此:while(file.ReadString(s)){}就可.
 [程序实现]
 假设你已有了名为ts.txt的文件在你的工程目录下:
 {
  CStdioFile file; 
  CString sss;
  char ccc[100];
  DWORD o=0;
  int ol=0;
  file.Open("ts.txt",CFile::modeRead);
  while(file.ReadString(sss))
  {
   ol++;
   if(ol>1)//读两次就不读了.
     break;   
   
  }
  o=file.GetPosition();//记录上次的结果(读到哪了)
  .................
  file.Seek(o,0);//接着上回读
  while(file.ReadString(sss))
  {
   strcpy(ccc,sss);
   AfxMessageBox(ccc);
  }
 }

Kudeet 2004-11-11
  • 打赏
  • 举报
回复
to mixtrue
ReadString 是放在一个while循环里面的,他会一直读下去直到文件末
cpboy 2004-11-11
  • 打赏
  • 举报
回复
恩?CString中是一行的数据,如何把它分成几个double数据呢?
laiyiling(%20--->%100) ,
atof()好像只能转变一个单独的CStringToDouble.
有好办法么?

我看一看 mixtrue(忽报人间曾伏虎,泪飞顿作倾盆雨。) 的程序
mixtrue 2004-11-11
  • 打赏
  • 举报
回复
To: laiyiling(%20——>%100)

CStdioFile::ReadString
Remark:
Reading is stopped by the first newline character.(读出的是第一行的string,也就是总是读一行数据,怎么在读下一行的数据怎么移动文件pointer 呢? )

mixtrue 2004-11-11
  • 打赏
  • 举报
回复
Read file line by line:

#include "stdio.h"

main()
{
FILE* src_fd;
FILE* dec_fd;
char fileBuffer[1024];
char outString[1024];
int i;

if( ( src_fd = fopen( "betann.h", "r" ) ) == NULL )
{
printf("can't open file: betann.h\n");
exit(0);
}

if( ( dec_fd = fopen( "output.1", "w" ) ) == NULL )
{
printf("can't open file: output.1\n");
exit;
}

while(1)
{
memset(fileBuffer,0,1024);

if(feof(src_fd))
{
break;
}

fgets(fileBuffer,1024,src_fd);
if(fileBuffer[0]=='\n'||fileBuffer[0]==' '||fileBuffer[0]=='\t')
{
continue;
}

for(i=0;fileBuffer[i]!='\n'&&fileBuffer[i]!=0&&fileBuffer[i]!='\"';i++)
{
}

if(fileBuffer[i]=='\n')
{
continue;
}

strcpy(outString,&fileBuffer[i+1]);
for(i=0;outString[i]!='\n'&&outString[i]!=0&&outString[i]!='\"';i++)
{
}
outString[i]=0;
sprintf(outString,"%s.au",outString);

fprintf(dec_fd,"%s\n",outString);
}

fclose(src_fd);
fclose(dec_fd);
}
mixtrue 2004-11-11
  • 打赏
  • 举报
回复
double atof( const char *string );
int atoi( const char *string );
_int64 _atoi64( const char *string );
long atol( const char *string );

#include <stdlib.h>
#include <stdio.h>

void main( void )
{
char *s; double x; int i; long l;

s = " -2309.12E-15"; /* Test of atof */
x = atof( s );
printf( "atof test: ASCII string: %s\tfloat: %e\n", s, x );

s = "7.8912654773d210"; /* Test of atof */
x = atof( s );
printf( "atof test: ASCII string: %s\tfloat: %e\n", s, x );

s = " -9885 pigs"; /* Test of atoi */
i = atoi( s );
printf( "atoi test: ASCII string: %s\t\tinteger: %d\n", s, i );

s = "98854 dollars"; /* Test of atol */
l = atol( s );
printf( "atol test: ASCII string: %s\t\tlong: %ld\n", s, l );
}
Kudeet 2004-11-11
  • 打赏
  • 举报
回复
文件超过CString 的大小怎么办呢?
-----------
是一行一行的读
cpboy 2004-11-11
  • 打赏
  • 举报
回复
单个数据的长度应该不会超过CString的大小
Kudeet 2004-11-11
  • 打赏
  • 举报
回复
CString改变到Double用 atof()
cpboy 2004-11-11
  • 打赏
  • 举报
回复
to: mixtrue(忽报人间曾伏虎,泪飞顿作倾盆雨。)

如何读一行呢?然后取出数据?
我感觉 laiyiling(%20--->%100)的代码可能方便点。
mixtrue 2004-11-11
  • 打赏
  • 举报
回复
楼上的如果 文件超过CString 的大小怎么办呢?
cpboy 2004-11-11
  • 打赏
  • 举报
回复
哦,我试试。
问一个问题呵呵,那么CString改变到Double使用哪个函数?
mixtrue 2004-11-11
  • 打赏
  • 举报
回复
用 fopen fclose ,fseek .来操作文件即可,其实不用判断文件的行数,只要判断文件是否结束就可以了。也可以使用CFile 来完成。每读一行然后然后对这一行进行操作即可。
Kudeet 2004-11-11
  • 打赏
  • 举报
回复
CStdioFile f("your file name");
CString str;
while(f.ReadString(str))
{
//str里面保存的就是一行值如:1 20.006 123.0 124 125.0
//你的格式是固定的,用CString类的成员函数操作
}

16,472

社区成员

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

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

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