C++怎么从TXT文件中一行一行的读取数据并且保存到数组中

Yo1988 2014-04-09 04:00:55
Data.txt 内包含的数据格式为:
(12.03,515.04,117.9,52.79,13.58)
(18.03,415.04,217.9,42.79,23.58)
(11.03,315.04,317.9,32.79,33.58)
(1.03,215.04,417.9,22.79,43.58)
(32.03,115.04,517.9,12.79,53.58)
.
.
.
.

数据格式是固定的就是括号里面5个float,具体有多少行不固定

怎么从这个txt文件中一行一行的读取,并将数据保存到数组中 比如: char cStr[5];
cStr[0] =(12.03,515.04,117.9,52.79,13.58);
cStr[1] =(18.03,415.04,217.9,42.79,23.58);
cStr[2] = (11.03,315.04,317.9,32.79,33.58);
cStr[3] =(1.03,215.04,417.9,22.79,43.58);
cStr[4] =(32.03,115.04,517.9,12.79,53.58);

求大神帮忙指导下,求详细点的C++代码,小弟万分感谢!!!!
...全文
18181 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈令刚 2016-11-24
  • 打赏
  • 举报
回复
这么多的代码怎么样才能写出来呢
赵4老师 2014-04-14
  • 打赏
  • 举报
回复
5楼代码的功能比3楼代码的功能少很多。
Yo1988 2014-04-14
  • 打赏
  • 举报
回复
@zhao4zhong1 ,我用fgets函数,是将f文件夹里面的每一行都付给了数组In,可是:后面一行都会覆盖之前一行,付给了In. 结果为:读第一行In=“(12.03,515.04,117.9,52.79,13.58)”;第二行的时候 In=“(18.03,415.04,217.9,42.79,23.58)” 我想实现的是:比如一共4行 In[0]=(12.03,515.04,117.9,52.79,13.58); In[1]=(18.03,415.04,217.9,42.79,23.58); In[2]=(11.03,315.04,317.9,32.79,33.58); In[3]=(1.03,215.04,417.9,22.79,43.58);
Yo1988 2014-04-14
  • 打赏
  • 举报
回复
谢谢,学习了
yoyowinwin 2014-04-14
  • 打赏
  • 举报
回复
扫了一眼, 你的代码毫无新意. 你的代码预设了太多经验性的参数, 楼主的数据只需稍作改动, 你的代码 改动起来便苦不堪言.
yoyowinwin 2014-04-14
  • 打赏
  • 举报
回复
@zhao4zhong1 , 我贴出那段代码不是回复给你看的.
Morrisss_ 2014-04-09
  • 打赏
  • 举报
回复
fstream,getline。
yoyowinwin 2014-04-09
  • 打赏
  • 举报
回复
#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <vector>
using namespace std;

vector<vector<double> > buffer;
vector<vector<double> >::iterator i;
vector<double>::iterator j;

int main()
{
	ifstream file("Data.txt");
	double tmp_d;
	char tmp_c;
	
	string tmp;
	stringstream ss;

    while (file >> tmp ) {
		ss<<tmp;
		vector<double> v;
		for(int i=0;i<5;++i)
		{
			ss>>tmp_c>>tmp_d;
			v.push_back(tmp_d);
		}
		ss.get();
		buffer.push_back(v);
    }
	
	for(i=buffer.begin();i!=buffer.end();++i)
	{
		for(j=i->begin();j!=i->end();++j)
		{
			cout<<setfill('0')<<setw(5)<<*j<<"\t";
		}
	cout<<endl;
	}

	return 0;
}
赵4老师 2014-04-09
  • 打赏
  • 举报
回复
有哪位C++er不赞同“干这种活,C更擅长。”的,欢迎站出来实现一个和3楼代码功能一样的纯C++代码PK一下!
赵4老师 2014-04-09
  • 打赏
  • 举报
回复
干这种活,C更擅长。 没实际编译链接调试,不保证对,仅供参考:
#include <stdio.h>
#define MAXDATA 1000
double D[MAXDATA][5];
char ln[80];
FILE *f;
int i,n;
int main() {
    f=fopen("Data.txt","r");
    if (NULL==f) {
        printf("Can not open file Data.txt!\n");
        return 1;
    }
    i=0;
    while (1) {
        if (NULL==fgets(ln,80,f)) break;
        if (5==sscanf(ln,"(%lf,%lf,%lf,%lf,%lf",&D[i][0],&D[i][1],&D[i][2],&D[i][3],&D[i][4])
         || 5==sscanf(ln,"(%lf,%lf,%lf,%lf,%lf",&D[i][0],&D[i][1],&D[i][2],&D[i][3],&D[i][4])) {
        } else {
            printf("Ignore format error at line %d:%s",i+1,ln);
        }
        i++;
        if (i>=MAXDATA) {
            printf("Too many data(>%d lines), ignore it.\n",MAXDATA);
            break;
        }
    }
    fclose(f);
    n=i;
    for (i=0;i<n;i++) {
        printf("%04d (%5.2lf,%6.2lf,%5.1lf,%5.2lf,%5.2lf)\n",i+1,D[i][0],D[i][1],D[i][2],D[i][3],D[i][4]);
    }
    return 0;
}
Yo1988 2014-04-09
  • 打赏
  • 举报
回复
求大神能指导的详细点的
赵4老师 2014-04-09
  • 打赏
  • 举报
回复
fin.getline();

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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