各位,我想要从txt文本文档中读取三万行数据,每行两列,一列为小数,一列为整数,现用getline()逐行读取,并将每一行分割成两个数据,保存到struct中,这个struct有double型和int型两个变量,具体应该这么做,希望有人给出具体的代码,感激不尽。
乍看起来c++的cin、cout、ifstream、ofstream、istringstream、ostringstream在输入、输出上比c的scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf简单,不用格式控制符!
但是不用格式控制符,输入输出恰好是你期望的格式的时候好说;等到输入输出不是你期望的格式的时候,你就会觉得还是用格式控制符更方便、更靠谱。
摒弃cin、cout、ifstream、ofstream、istringstream、ostringstream!
使用scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf。
1.将整行作为一个String读出来
String str = getline();
2.用区分两列的符号(" ",";\t"等)将这个String分割成String数组
String[] strs = str.split(" ");
3.Integer.parseInt(),Double.parseDouble()转换对应的值
int a = Integer.parseInt(strs[0]);
double b = Double.parseDouble(strs[1]);
4.转换过的值放入对应位置
struct.setInt(a);
struct.setDouble(b);
使用什么语言写?
java中:
try {
Scanner in = new Scanner(new File("txt 文件名"));
while (in.hasNextLine()) {
String str = in.nextLine();
//获取到每行数据, 然后根据文本中数据的分割字符来取出两个数据来
//例如你是用单个空格分割那么
// String[] sp = str.split(" "); 获取两个数, string[0] 为小数, string[1]为整数
//然后转成小数类型, 整数类型存到struct中即可
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
c++:
ifstream in("main.txt");
string s;
while(getline(in,s)) { //逐行读取数据并存于s中,直至数据全部读取
//然后与上面操作一样
}
你的struct 是什么?是你声明的结构的类?那你是实例化三万多个这样的数组吗 ?这个你考虑清楚。假如你实例化了一个st
struct st =new struct[();
string str=getline();
st.double=double.parse(str.split(' ')[0]);//假如你的数据是一个空格隔开的
st.int=int.parse(str.split(' ')[1]);
这样你读取的一行数据已经放到了st里面。其他行的数据你可以试试声明 struct st[40000]然后使用while循环进行上面的操作
const char* str = "abc.txt";
ifstream curveFile;
curveFile.open(str);
struct Point
{
double x;
int y;
};
std::vector pointall;
while (!curveFile.eof())
{
char tempdata[30];
Point temppoint;
curveFile.getline(tempdata,'\n');
sscanf_s(tempdata,"%lf %d",&temppoint.x,&temppoint.y);
pointall.push_back(temppoint);
}
std::vector<Point>::iterator it = pointall.begin();
for (;it != pointall.end();++it)
{
cout<<it->x<<" "<<it->y<<endl;
}
curveFile.close();
#include
#include
#include
#include
struct Num
{
double d;
int i;
Num(double dd, int ii) :d(dd), i(ii) {}
};
std::ostream &println(std::ostream &os,std::vector &obj)
{
for (std::vector::const_iterator it = obj.cbegin(); it != obj.cend(); ++it)
os << it->d << " " << it->i << std::endl;
return os;
}
int main()
{
std::ifstream in("m.txt");
std::istringstream istr;
std::string str;
double d;
int i;
std::vector vobj;
while (getline(in, str))
{
istr.str(str);
istr >> d >> i;
istr.clear();
vobj.push_back(Num(d,i));
}
println(std::cout, vobj);
return 0;
}
1、vector应改为vector
2、头文件是这几个:
iostream
fstream
sstream
vector