求助:c++从txt文件中逐行读取数据,并且分别保存

时间:2021-11-15 03:58:25
txt文档中每一行有两个数据,需要逐行分别存储
txt文件如下
8.5 8.9
3.4 5.8 
.......
9.5 5.6 
每一行两个数据,用空格分开,我现在需要把每一行中的两个数据存到两个变量中,并且逐行读取。这个要如何实现呢?

14 个解决方案

#1


关注 mark

#2


引用 1 楼 zhouxicai 的回复:
关注 mark

什么意思呢?不明白

#3


IO 读写相关的东西, 
IOSTREAM
谭浩强的 C++面向对象程序设计 中 详细介绍了 各种访问方法。

#4


fstream
getline(str, size, '\n');这样读取了一行
你再根据你文件内容去判断是字符串还是数字还是什么
中间用什么隔开之类的

#5


#include <stdio.h>
void getData(float data[100][2])
{
    FILE *fp;
    int i = 0, j = 0;
    fp = fopen("db.txt", "r");
    if(fp == NULL)
    {
        printf("cannot open file!\n");
        return;
    }
    while(!feof(fp))
    {
        if(j != 1)
            fscanf(fp, "%f ", &data[i][j++]);//注意此处有个空格
        else
        {
            fscanf(fp, "%f", &data[i][j]);
            j = 0;
            ++i;
        }
    }
    fclose(fp);
}
int main()
{
    float data[100][2];
    int i, j;
    getData(data);
    for(i = 0; i < 100; ++i)
    {
        for(j = 0; j <2; ++j)
        {
            printf("%f  ", data[i][j]);
        }
        printf("\n");
    }
    return 0;
}

//仅供参考  楼主

#6


学习,学习!

#8



#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
string buffer;
double str1;
string str2;
stringstream ss;
ifstream inputFile("d:\\data.txt");
while(getline(inputFile,buffer))
{
ss.clear();
ss.str(buffer);
ss>>str1>>str2;
cout<<str1<<" "<<str2<<endl;
}

}

#9


若是BCB,可以用StringList逐行读取txt文件,再截取数据就可以了

#10


如果知道是浮点数,用空格或者tab分割。直接用ifstream读入就可以了。非常简单

#11


非常感谢各位的回帖
如果我有10个文件,要连续读入
文件名是left1.txt
       left2.txt
       left3.txt
       .....
       left10.txt
要求还是文件中的一行有两个数据,存储到两个数组中。这样要怎么实现?

#12



#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
template<typename T>
string ToString(T var)
{
stringstream ss;
ss<< var;
return ss.str();
}
int main()
{
string buffer;
double str1;
string str2;
stringstream ss;
for (int i=0;i<10;i++)
{
string fileName="left"+ToString(i)+".txt";
ifstream inputFile(fileName.c_str());
while(getline(inputFile,buffer))
{
ss.clear();
ss.str(buffer);
ss>>str1>>str2;
cout<<str1<<" "<<str2<<endl;
}
}
}


#13


fgets搞定

#14


引用 13 楼 namelij 的回复:
fgets搞定

To:
namelij
//楼上的问一下fgets怎样能够读取非第一行的数据,谢谢……

#1


关注 mark

#2


引用 1 楼 zhouxicai 的回复:
关注 mark

什么意思呢?不明白

#3


IO 读写相关的东西, 
IOSTREAM
谭浩强的 C++面向对象程序设计 中 详细介绍了 各种访问方法。

#4


fstream
getline(str, size, '\n');这样读取了一行
你再根据你文件内容去判断是字符串还是数字还是什么
中间用什么隔开之类的

#5


#include <stdio.h>
void getData(float data[100][2])
{
    FILE *fp;
    int i = 0, j = 0;
    fp = fopen("db.txt", "r");
    if(fp == NULL)
    {
        printf("cannot open file!\n");
        return;
    }
    while(!feof(fp))
    {
        if(j != 1)
            fscanf(fp, "%f ", &data[i][j++]);//注意此处有个空格
        else
        {
            fscanf(fp, "%f", &data[i][j]);
            j = 0;
            ++i;
        }
    }
    fclose(fp);
}
int main()
{
    float data[100][2];
    int i, j;
    getData(data);
    for(i = 0; i < 100; ++i)
    {
        for(j = 0; j <2; ++j)
        {
            printf("%f  ", data[i][j]);
        }
        printf("\n");
    }
    return 0;
}

//仅供参考  楼主

#6


学习,学习!

#7


#8



#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
string buffer;
double str1;
string str2;
stringstream ss;
ifstream inputFile("d:\\data.txt");
while(getline(inputFile,buffer))
{
ss.clear();
ss.str(buffer);
ss>>str1>>str2;
cout<<str1<<" "<<str2<<endl;
}

}

#9


若是BCB,可以用StringList逐行读取txt文件,再截取数据就可以了

#10


如果知道是浮点数,用空格或者tab分割。直接用ifstream读入就可以了。非常简单

#11


非常感谢各位的回帖
如果我有10个文件,要连续读入
文件名是left1.txt
       left2.txt
       left3.txt
       .....
       left10.txt
要求还是文件中的一行有两个数据,存储到两个数组中。这样要怎么实现?

#12



#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
template<typename T>
string ToString(T var)
{
stringstream ss;
ss<< var;
return ss.str();
}
int main()
{
string buffer;
double str1;
string str2;
stringstream ss;
for (int i=0;i<10;i++)
{
string fileName="left"+ToString(i)+".txt";
ifstream inputFile(fileName.c_str());
while(getline(inputFile,buffer))
{
ss.clear();
ss.str(buffer);
ss>>str1>>str2;
cout<<str1<<" "<<str2<<endl;
}
}
}


#13


fgets搞定

#14


引用 13 楼 namelij 的回复:
fgets搞定

To:
namelij
//楼上的问一下fgets怎样能够读取非第一行的数据,谢谢……