求助:关于文件信息的读入

russilong 2006-04-02 03:26:04
Element Connectivity:
ID Pos 1 Pos 2 Pos 3 Pos 4
1 245 575 244 578
2 245 1062 243 584
3 245 244 1060 578
4 245 1060 244 1063
5 242 243 586 583
6 242 1068 243 1071
7 242 586 243 1068
......
Node Attributes (Coordinates are in Reference CF)
ID Coord 1 Coord 2 Coord 3 RCID ACID
1 334.691284 334.260132 15.021685 0 0
2 -334.926483 334.722534 14.898036 0 0
3 333.031097 -339.473846 15.109752 0 0
4 -334.511963 -338.168701 14.344629 0 0
5 90.010849 16.778612 14.988669 0 0
6 -60.011009 -28.311783 15.011329 0 0
7 0.056646 -208.424118 15.011329 0 0
8 0.056646 -238.763840 14.988669 0 0
9 -60.011009 -58.334282 15.011329 0 0
10 -150.055847 -73.334198 15.011329 0 0
.........
///////////
在一个文件中,包括如上信息,现想把Element Connectivity的信息读入到mm[ID_num][4]中,把Node Attributes 的信息读入到nn[ID_num][3]中,其中,nn中不含有RCID,ACID的信息,也就是说,RCID,ACID中的信息无需读入。
多谢各位不吝赐教!
...全文
155 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mhisky 2006-05-11
  • 打赏
  • 举报
回复
mark
popy007 2006-04-03
  • 打赏
  • 举报
回复
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
#include <sstream>
using namespace std;

const int ID_num = 7;

class FindString {
string s;
public:
FindString() {}
FindString(string ss): s(ss) {}
bool operator()(string ss) {
if(string::npos!=ss.find(s))
return true;
return false;
}
};

int main() {
ifstream in("a.txt");
if(!in.good())
exit(1);
vector<string> lines;
string l;
while(getline(in, l)) {
lines.push_back(l);
}

vector<string>::iterator it =
find_if(lines.begin(), lines.end(),
FindString("Element Connectivity"));

int mm[ID_num][4];

if(it != lines.end()) {
it+=2;
for(int i=0; i<ID_num; ++i) {
stringstream ss(*it);
int t;
ss >> t >> mm[i][0]
>> mm[i][1] >> mm[i][2]
>> mm[i][3];
it++;
}
}

it = find_if(lines.begin(), lines.end(),
FindString("Node Attributes"));
float nn[ID_num][3];
if(it != lines.end()) {
it+=2;

for(int i=0; i<ID_num; ++i) {
stringstream ss(*it);
int t;
ss >> t >> nn[i][0]
>> nn[i][1] >> nn[i][2];
it++;
}
}


for(int i=0; i<ID_num; ++i) {
copy(mm[i], mm[i]+ID_num,
ostream_iterator<int>(cout, "\n"));
}
return 0;
}
russilong 2006-04-03
  • 打赏
  • 举报
回复
顶一下
怎么没人继续呀?
russilong 2006-04-02
  • 打赏
  • 举报
回复
多谢你的思路。

对于字段地址的确定也许很繁琐,不知道有什么好建议?可以给出具体些的代码么
goodluckyxl 2006-04-02
  • 打赏
  • 举报
回复
我的想法是使用fscanf函数处理
Element Connectivity
的结构
typedef struct
{
int ID;
int Pos1;
...
int Pos4;
}
Element_Connectivity;

typedef struct
{
int ID;
float Coord1;
...
int RCID;
int ACID;
}
Node_Attributes;

fscanf(fp, "%d%d%d%d%d",依次第一结构中5个字段地址);
fscanf(fp, "%d%f%f%f%d%d",依次第2结构中6个字段地址);

64,648

社区成员

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

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