24小时热门版块排行榜    

查看: 2003  |  回复: 20

zeppe

金虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
可以试试我这个看看。
CODE:
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <cassert>

int main(void)
{
        // path of the input file
        std::string filename = "D:\\Skydrive\\MyCode\\cpp\\TreatString\\TreatString\\src\\test.txt"; // Please edit this line according to you real path of the test.txt file
        std::ifstream infile(filename);

        // check if file exists
        if(!infile) {
                std::cerr << "file "<< filename << " not found." << std::endl;
        }

        std::string line;  // string that stores each line read in
        std::vector<double> vals; // vector that stores values should be read

        // read file line by line
        while(std::getline(infile, line))
        {
                if(line == "Frame"){
                        continue;// if line is "Frame", go to next line
                }
                if(line == ""){
                        continue;// if line is blank, go to next line
                }
                double val1, val2, val3;
                std::istringstream iss(line);
                iss >> val1 >> val2 >> val3;
                vals.push_back(val1);
                vals.push_back(val2);
                vals.push_back(val3);
        }

        // check and make sure 27 values are stored in vector vals.
        assert(vals.size() == 27);

        double a1[3][3], a2[3][3], a3[3][3];

        // pass value from vals to a1, a2, a3
        for(size_t k = 0; k < 3; ++k)
        {
                for(size_t n = 0; n < 3; ++n)
                {
                        a1[k][n] = vals[3*k+n];
                        a2[k][n] = vals[9 + 3*k+n];
                        a3[k][n] = vals[18 + 3*k+n];
                }
        }

        // output a1, a2, a3
        std::cout << "a1:"<<std::endl;
        for(size_t k = 0; k < 3; ++k)
        {
                for(size_t n = 0; n < 3; ++n)
                        std::cout<< a1[k][n] << "\t";
                std::cout << std::endl;
        }

        std::cout << "a2:"<<std::endl;
        for(size_t k = 0; k < 3; ++k)
        {
                for(size_t n = 0; n < 3; ++n)
                        std::cout<< a2[k][n] << "\t";
                std::cout << std::endl;
        }

        std::cout << "a3:"<<std::endl;
        for(size_t k = 0; k < 3; ++k)
        {
                for(size_t n = 0; n < 3; ++n)
                        std::cout<< a3[k][n] << "\t";
                std::cout << std::endl;
        }

        return 0;
}

11楼2013-06-03 11:58:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhanglinfeng

新虫 (小有名气)

【答案】应助回帖

我机子上测试了是对的,只要filename是你文件所在的绝对路径,那就OK。
12楼2013-06-03 12:16:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mljphy

铁虫 (正式写手)

引用回帖:
11楼: Originally posted by zeppe at 2013-06-03 11:58:21
可以试试我这个看看。


#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <cassert>

int main(void)
{
        // path of the input ...

谢谢你的回复。你的代码我仔细检验了。对于我原来的输入文件,在修改了路径那行:
std::string filename = "D:\\Skydrive\\MyCode\\cpp\\TreatString\\TreatString\\src\\test.txt"; //
改为
const char *filename = "D:\\Skydrive\\MyCode\\cpp\\TreatString\\TreatString\\src\\test.txt"; //
并修改重复定义的k之后能够得到正确的结果。

我试着朝我最终的输入文件修改了一下输入文件数据(test.txt),现在的数据格式如下(数字都是变量,包括16000.0):

ITEM: TIMESTEP
16000.0
Frame
5.0  2.0  4.0   5.0
1.0  4.0  11.0  11.0
3.0  6.0  15.0  77.0
1.0  6.0  15.0  28.0
ITEM: TIMESTEP
16000.0
Frame
6.0  2.0  41.0  23.0
1.0  6.0  15.0  28.0
7.0  9.0  17.0  33.0
1.0  6.0  15.0  62.0
ITEM: TIMESTEP
16000.0
Frame
9.0  4.0  11.0  41.0
3.0  6.0  12.0  62.0
8.0  9.0  17.0  89.0
7.0  6.0  13.0  28.0
ITEM: TIMESTEP
16000.0
Frame
3.0  4.0  13.0  41.0
5.0  2.0  15.0  61.0
8.0  9.0  17.0  59.0
6.0  6.0  15.0  23.0

然后我按我的理解修改了一下代码,修改后如下(在VC 6.0中 原来代码中k有重定义现象,不知何故,我该成了k1,k2,k3,k4):
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <cassert>

int main(void)
{
        // path of the input file
        const char *filename = "G:\\cpp\\2\\test.txt"; // Please edit this line according to you real path of the test.txt file
        std::ifstream infile(filename);

        // check if file exists
        if(!infile) { std::cerr << "file "<< filename << " not found." << std::endl;    }

        std::string line;  // string that stores each line read in
        std::vector<double> vals; // vector that stores values should be read
        std::vector<double> vt;

        // read file line by line
        while(std::getline(infile, line))

        {
       if(line == "ITEM: TIMESTEP" { continue;  }
       
       double vab;
        std::istringstream iss1(line);
        iss1 >> vab;
        vt.push_back(vab);

       if(line == "Frame" {  continue; }                        

        if(line == "" {  continue; }  
               
        double val1, val2, val3, val4;
        std::istringstream iss(line);
        iss >> val1 >> val2 >> val3>> val4;
        vals.push_back(val1);
        vals.push_back(val2);
        vals.push_back(val3);
        vals.push_back(val4);
        }

        // check and make sure 27 values are stored in vector vals.
        assert(vals.size() == 64);
        
      double a1[10][10], a2[10][10], a3[10][10], a4[10][10];
        int nn=4;
        // pass value from vals to a1, a2, a3
        for(size_t k = 0; k < nn; ++k)
        {
             for(size_t n = 0; n < nn; ++n)
             {
                  a1[k][n] = vals[4*k+n];
                  a2[k][n] = vals[16 + 4*k+n];
                  a3[k][n] = vals[32 + 4*k+n];
                  a4[k][n] = vals[48 + 4*k+n];
             }
        }

        // output a1, a2, a3,a4
        std::cout << "a1:"<<std::endl;
        for(size_t k1 = 0; k1 < nn; ++k1)
        {
             for(size_t n = 0; n < nn; ++n)
             std::cout<< a1[k1][n] << "\t";
             std::cout << std::endl;
        }

        std::cout << "a2:"<<std::endl;
        for(size_t k2 = 0; k2 < nn; ++k2)
        {
              for(size_t n = 0; n < nn; ++n)
              std::cout<< a2[k2][n] << "\t";
              std::cout << std::endl;
        }

        std::cout << "a3:"<<std::endl;
        for(size_t k3 = 0; k3 < nn; ++k3)
        {
              for(size_t n = 0; n < nn; ++n)
              std::cout<< a3[k3][n] << "\t";
              std::cout << std::endl;
        }

                std::cout << "a4:"<<std::endl;
        for(size_t k4 = 0; k4 < nn; ++k4)
        {
             for(size_t n = 0; n < nn; ++n)
             std::cout<< a4[k4][n] << "\t";
             std::cout << std::endl;
        }
        return 0;
}


1.我发现在加入如果输入文件(test.txt)中只加入第1,8,15,22行,并在代码中加入下列代码行:      
if(line == "ITEM: TIMESTEP" { continue;  }
程序能够正常运行,并输出正确结果。
2.如果再加入第2,9,16,23行(对应16000.0),并加入相应代码
       double vab;
        std::istringstream iss1(line);
        iss1 >> vab;
        vt.push_back(vab);
程序却不能正确运行,输出的错误为:
        assert(vals.size() == 64);
此行有问题,如果我注视掉将出现错误结果。
不知道为什么?

我最终的数据格式如下(实例):

ITEM: TIMESTEP
16000.0
Atoms
171
Coordinates
0.0  100.0
0.0  100.0
0.0  100.0
Frame
5.0  2.0  4.0   5.0    6.0
1.0  4.0  11.0  11.0   7.0
3.0  6.0  15.0  77.0   8.0
1.0  6.0  15.0  28.0   11.0
......共171行......
ITEM: TIMESTEP
16000.0
Atoms
171
Coordinates
0.0  100.0
0.0  100.0
0.0  100.0
Frame
6.0  2.0  41.0  23.0   9.9
1.0  6.0  15.0  28.0   11.7
7.0  9.0  17.0  33.0   20.8
1.0  6.0  15.0  62.0   0.9
......共171行......
ITEM: TIMESTEP
16000.0
Atoms
171
Coordinates
0.0  100.0
0.0  100.0
0.0  100.0
Frame
9.0  4.0  11.0  41.0   8.0
3.0  6.0  12.0  62.0   20.0
8.0  9.0  17.0  89.0   80.0
7.0  6.0  13.0  28.0   20.0
......共171行......
ITEM: TIMESTEP
16000.0
Atoms
171
Coordinates
0.0  100.0
0.0  100.0
0.0  100.0
Frame
3.0  4.0  13.0  41.0   12.0
5.0  2.0  15.0  61.0   15.0
8.0  9.0  17.0  59.0   22.0
6.0  6.0  15.0  23.0   88.0
......共171行......


再次感谢。
一切都会慢慢好起来。
13楼2013-06-03 17:54:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mljphy

铁虫 (正式写手)

引用回帖:
13楼: Originally posted by mljphy at 2013-06-03 17:54:42
谢谢你的回复。你的代码我仔细检验了。对于我原来的输入文件,在修改了路径那行:
std::string filename = "D:\\Skydrive\\MyCode\\cpp\\TreatString\\TreatString\\src\\test.txt"; //
改为
const c ...

可以试试我这个看看。


#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <cassert>

int main(void)
{
        // path of the input ...
谢谢你的回复。你的代码我仔细检验了。对于我原来的输入文件,在修改了路径那行:
std::string filename = "D:\\Skydrive\\MyCode\\cpp\\TreatString\\TreatString\\src\\test.txt"; //
改为
const char *filename = "D:\\Skydrive\\MyCode\\cpp\\TreatString\\TreatString\\src\\test.txt"; //
并修改重复定义的k之后能够得到正确的结果。

我试着朝我最终的输入文件修改了一下输入文件数据(test.txt),现在的数据格式如下(数字都是变量,包括16000.0):

ITEM: TIMESTEP
16000.0
Frame
5.0  2.0  4.0   5.0
1.0  4.0  11.0  11.0
3.0  6.0  15.0  77.0
1.0  6.0  15.0  28.0
ITEM: TIMESTEP
16000.0
Frame
6.0  2.0  41.0  23.0
1.0  6.0  15.0  28.0
7.0  9.0  17.0  33.0
1.0  6.0  15.0  62.0
ITEM: TIMESTEP
16000.0
Frame
9.0  4.0  11.0  41.0
3.0  6.0  12.0  62.0
8.0  9.0  17.0  89.0
7.0  6.0  13.0  28.0
ITEM: TIMESTEP
16000.0
Frame
3.0  4.0  13.0  41.0
5.0  2.0  15.0  61.0
8.0  9.0  17.0  59.0
6.0  6.0  15.0  23.0

然后我按我的理解修改了一下代码,修改后如下(在VC 6.0中 原来代码中k有重定义现象,不知何故,我该成了k1,k2,k3,k4):
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <cassert>

int main(void)
{
        // path of the input file
        const char *filename = "G:\\cpp\\2\\test.txt"; // Please edit this line according to you real path of the test.txt file
        std::ifstream infile(filename);

        // check if file exists
        if(!infile) { std::cerr << "file "<< filename << " not found." << std::endl;    }

        std::string line;  // string that stores each line read in
        std::vector<double> vals; // vector that stores values should be read
        std::vector<double> vt;

        // read file line by line
        while(std::getline(infile, line))

        {
       if(line == "ITEM: TIMESTEP" { continue;  }
        
       double vab;
        std::istringstream iss1(line);
        iss1 >> vab;
        vt.push_back(vab);

       if(line == "Frame" {  continue; }                        

        if(line == "" {  continue; }  
               
        double val1, val2, val3, val4;
        std::istringstream iss(line);
        iss >> val1 >> val2 >> val3>> val4;
        vals.push_back(val1);
        vals.push_back(val2);
        vals.push_back(val3);
        vals.push_back(val4);
        }

        // check and make sure 27 values are stored in vector vals.
        assert(vals.size() == 64);
        
      double a1[10][10], a2[10][10], a3[10][10], a4[10][10];
        int nn=4;
        // pass value from vals to a1, a2, a3
        for(size_t k = 0; k < nn; ++k)
        {
             for(size_t n = 0; n < nn; ++n)
             {
                  a1[k][n] = vals[4*k+n];
                  a2[k][n] = vals[16 + 4*k+n];
                  a3[k][n] = vals[32 + 4*k+n];
                  a4[k][n] = vals[48 + 4*k+n];
             }
        }

        // output a1, a2, a3,a4
        std::cout << "a1:"<<std::endl;
        for(size_t k1 = 0; k1 < nn; ++k1)
        {
             for(size_t n = 0; n < nn; ++n)
             std::cout<< a1[k1][n] << "\t";
             std::cout << std::endl;
        }

        std::cout << "a2:"<<std::endl;
        for(size_t k2 = 0; k2 < nn; ++k2)
        {
              for(size_t n = 0; n < nn; ++n)
              std::cout<< a2[k2][n] << "\t";
              std::cout << std::endl;
        }

        std::cout << "a3:"<<std::endl;
        for(size_t k3 = 0; k3 < nn; ++k3)
        {
              for(size_t n = 0; n < nn; ++n)
              std::cout<< a3[k3][n] << "\t";
              std::cout << std::endl;
        }

                std::cout << "a4:"<<std::endl;
        for(size_t k4 = 0; k4 < nn; ++k4)
        {
             for(size_t n = 0; n < nn; ++n)
             std::cout<< a4[k4][n] << "\t";
             std::cout << std::endl;
        }
        return 0;
}


1.我发现如果输入文件(test.txt)中只加入第1,8,15,22行(对应ITEM: TIMESTEP),并在代码中加入下列代码行:      
if(line == "ITEM: TIMESTEP" { continue;  }
程序能够正常运行,并输出正确结果。
2.如果再加入第2,9,16,23行(对应16000.0),并加入相应代码
       double vab;
        std::istringstream iss1(line);
        iss1 >> vab;
        vt.push_back(vab);
程序却不能正确运行,输出的错误为:
        assert(vals.size() == 64);
此行有问题,如果我注视掉将出现错误结果。
不知道为什么?

我最终的数据格式如下(实例):

ITEM: TIMESTEP
16000.0
Atoms
171
Coordinates
0.0  100.0
0.0  100.0
0.0  100.0
Frame
5.0  2.0  4.0   5.0    6.0
1.0  4.0  11.0  11.0   7.0
3.0  6.0  15.0  77.0   8.0
1.0  6.0  15.0  28.0   11.0
......共171行......
ITEM: TIMESTEP
16000.0
Atoms
171
Coordinates
0.0  100.0
0.0  100.0
0.0  100.0
Frame
6.0  2.0  41.0  23.0   9.9
1.0  6.0  15.0  28.0   11.7
7.0  9.0  17.0  33.0   20.8
1.0  6.0  15.0  62.0   0.9
......共171行......
ITEM: TIMESTEP
16000.0
Atoms
171
Coordinates
0.0  100.0
0.0  100.0
0.0  100.0
Frame
9.0  4.0  11.0  41.0   8.0
3.0  6.0  12.0  62.0   20.0
8.0  9.0  17.0  89.0   80.0
7.0  6.0  13.0  28.0   20.0
......共171行......
ITEM: TIMESTEP
16000.0
Atoms
171
Coordinates
0.0  100.0
0.0  100.0
0.0  100.0
Frame
3.0  4.0  13.0  41.0   12.0
5.0  2.0  15.0  61.0   15.0
8.0  9.0  17.0  59.0   22.0
6.0  6.0  15.0  23.0   88.0
......共171行......


再次感谢。
一切都会慢慢好起来。
14楼2013-06-03 17:58:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mljphy

铁虫 (正式写手)

引用回帖:
12楼: Originally posted by zhanglinfeng at 2013-06-03 12:16:29
我机子上测试了是对的,只要filename是你文件所在的绝对路径,那就OK。

我的机子上确实没有得到正确的结果。不知道是什么原因。
不过还是多谢你的帮助。
一切都会慢慢好起来。
15楼2013-06-03 18:01:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zeppe

金虫 (小有名气)

【答案】应助回帖

1.我发现如果输入文件(test.txt)中只加入第1,8,15,22行(对应ITEM: TIMESTEP),并在代码中加入下列代码行:      
if(line == "ITEM: TIMESTEP" { continue;  }
程序能够正常运行,并输出正确结果。
2.如果再加入第2,9,16,23行(对应16000.0),并加入相应代码
       double vab;
        std::istringstream iss1(line);
        iss1 >> vab;
        vt.push_back(vab);
程序却不能正确运行,输出的错误为:
        assert(vals.size() == 64);
此行有问题,如果我注视掉将出现错误结果。
不知道为什么?
===
楼主你好,程序是要根据文本的格式作变化的,你改了格式之后应该尽量让程序不会出现误判的情况。
原来只有Frame一行是字符,其他都是要用的数字,要考虑的条件很少,所以可以那样写。
现在改了格式了,就要加限定条件,让计算机认准地方。
注意到 16000.0是夹在ITEM: TIMESTEP 和 Atoms 这两行之间的,出现了好几次,那么这个值在这个文本文件中如果一直不变,就可以用一个数值变量存储,不然就要用数组/vector存储。
假设这个16000.0是可能变化的,并且一直夹在ITEM: TIMESTEP 和 Atoms 这两行之间
那么可以这样读入:
CODE:
std::vector<double> vt;
bool bItem = false;
int nrow = 0;
while(std::getline(infile, line)
{
nrow += 1; //记录行号
// 其他代码
if (line == "ITEM: TIMESTEP")
{
     bItem = true; // turn on bItem
    nItem = nrow; //
}
if (bItem && nrow > nItem)
{
     if(line == "Atoms")
    {
          bItem = false;  // turn off bItem
    }
   else
   {
          std::istringstream iss1(line);
          double vab;
          iss1 >> vab;
         vt.push_back(vab);
   }
}
// 其他代码
}

以上没有测过,我下班了,如果有问题明天再说。

» 本帖已获得的红花(最新10朵)

16楼2013-06-03 18:22:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mljphy

铁虫 (正式写手)

送红花一朵
引用回帖:
16楼: Originally posted by zeppe at 2013-06-03 18:22:02
1.我发现如果输入文件(test.txt)中只加入第1,8,15,22行(对应ITEM: TIMESTEP),并在代码中加入下列代码行:      
if(line == "ITEM: TIMESTEP" { continue;  }
程序能够正常运行,并输出正确结果。 ...

非常感谢,zeppe的C++编程水平很好。羡慕啊。
这段代码加入原先的代码,没有编译通过。期待啊。
ITEM: TIMESTEP
16000.0
Atoms
171
Coordinates
0.0  100.0
0.0  100.0
0.0  100.0
Frame
5.0  2.0  4.0   5.0    6.0
1.0  4.0  11.0  11.0   7.0
3.0  6.0  15.0  77.0   8.0
1.0  6.0  15.0  28.0   11.0
......共171行......
ITEM: TIMESTEP
16000.0
Atoms
171
Coordinates
0.0  100.0
0.0  100.0
0.0  100.0
Frame
6.0  2.0  41.0  23.0   9.9
1.0  6.0  15.0  28.0   11.7
7.0  9.0  17.0  33.0   20.8
1.0  6.0  15.0  62.0   0.9
......共171行......
ITEM: TIMESTEP
16000.0
Atoms
171
Coordinates
0.0  100.0
0.0  100.0
0.0  100.0
Frame
9.0  4.0  11.0  41.0   8.0
3.0  6.0  12.0  62.0   20.0
8.0  9.0  17.0  89.0   80.0
7.0  6.0  13.0  28.0   20.0
......共171行......
ITEM: TIMESTEP
16000.0
Atoms
171
Coordinates
0.0  100.0
0.0  100.0
0.0  100.0
Frame
3.0  4.0  13.0  41.0   12.0
5.0  2.0  15.0  61.0   15.0
8.0  9.0  17.0  59.0   22.0
6.0  6.0  15.0  23.0   88.0
......共171行......
一切都会慢慢好起来。
17楼2013-06-04 09:36:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zeppe

金虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
mljphy: 回帖置顶 2013-06-04 15:40:50
mljphy: 金币+10, ★★★★★最佳答案, zeppe编程水平令人羡慕。以后多想你学习。 2013-06-04 15:42:17
楼主你好,请试用下面这些可以来实现读取17楼提供的文件,假设存为"test_new.txt"
在我电脑上是"D:\\Skydrive\\MyCode\\cpp\\TreatString\\TreatString\\src\\test_new.txt"
请根据你自己的情况修改文件路径和文件名。
另外,如果你方便公开文件的话,最好是直接在附件或网盘给出你的文件,这样不用老改。
CODE:
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <cassert>

int main(void)
{
        // path of the input file ###### please edit this line according to your real path
        std::string filename = "D:\\Skydrive\\MyCode\\cpp\\TreatString\\TreatString\\src\\test_new.txt";
        std::ifstream infile(filename);

        // check if file exists
        if(!infile) {
                std::cerr << "file "<< filename << " not found." << std::endl;
        }

        // variables for the timesteps
        std::vector<double> timesteps;
        bool bTimeStep = false;
        int nTimeStep = 0;

        // variables for the atoms
        std::vector<int> atoms;  
        bool bAtoms = false;
        int nAtoms = 0;

        // variables for the coordinates
        std::vector<double> coordinates;
        bool bCoordinates = false;
        int nCoordinates = 0;

        // variables for the frames
        std::vector<double> frames;   
        bool bFrame = false;
        int nFrame = 0;

        std::string line;  // string that stores each line read in
        int nLine = 0;

        // read file line by line
        while(std::getline(infile, line))
        {
                nLine += 1;
                // read in TimeStep
                if(line == "ITEM: TIMESTEP"){
                        bTimeStep = true;
                        nTimeStep = nLine;
                }
                if(nLine > nTimeStep && bTimeStep){
                        if(line == "Atoms"){
                                bTimeStep = false;
                        }
                        else {
                                double val = std::numeric_limits<double>::quiet_NaN();
                                std::istringstream iss(line);
                                iss >> val;
                                timesteps.push_back(val);
                        }
                }
                // read in Atoms
                if(line == "Atoms"){
                        bAtoms = true;
                        nAtoms = nLine;
                }
                if(nLine > nAtoms && bAtoms){
                        if(line == "Coordinates"){
                                bAtoms = false;
                        }
                        else {
                                int val = 0;
                                std::istringstream iss(line);
                                iss >> val;
                                atoms.push_back(val);
                        }
                }
                //read in coordinates
                if(line == "Coordinates"){
                        bCoordinates = true;
                        nCoordinates = nLine;
                }
                if(nLine > nCoordinates && bCoordinates){
                        if(line == "Frame"){
                                bCoordinates = false;
                        }
                        else {
                                double val1, val2;
                                std::istringstream iss(line);
                                iss >> val1 >> val2;
                                coordinates.push_back(val1);
                                coordinates.push_back(val2);
                        }
                }
                //read in frame
                if(line == "Frame"){
                        bFrame = true;
                        nFrame = nLine;
                }
                if(nLine > nFrame && bFrame){
                        // ############ should be modified when file changes
                        if(line == "......共171行......"){
                                bFrame = false;
                        }
                        else if(line == "ITEM: TIMESTEP") {
                                bFrame = false;
                        }
                        else {
                                double val1, val2, val3, val4, val5;
                                std::istringstream iss(line);
                                iss >> val1 >> val2 >> val3 >> val4 >> val5;
                                frames.push_back(val1);
                                frames.push_back(val2);
                                frames.push_back(val3);
                                frames.push_back(val4);
                                frames.push_back(val5);
                        }
                }
        }

        // check if successfully read
        if(timesteps.empty()){
                std::cerr << "ERROR: failed to read timesteps." << std::endl;
        }
        if(atoms.empty()){
                std::cerr << "ERROR: failed to read atoms." << std::endl;
        }
        if(coordinates.empty()){
                std::cerr << "ERROR: failed to read coordinates." << std::endl;
        }
        if(frames.empty()){
                std::cerr << "ERROR: failed to read frames." << std::endl;
        }
        // ############ should be modified when file changes
        assert(timesteps.size() == atoms.size());
        assert(timesteps.size()*6 == coordinates.size());
        assert(timesteps.size()*5*4 == frames.size());

        //output values
        for(size_t i = 0; i < timesteps.size(); ++i)
        {
                std::cout << "TimeSteps" << std::endl;
                std::cout << timesteps[i] << std::endl;

                std::cout << "Atoms" << std::endl;
                std::cout << atoms[i] << std::endl;

                std::cout << "Coordinates" << std::endl;
                for(size_t j = 0; j < 3; ++j)
                {
                        for(size_t k = 0; k < 2; ++k)
                        {
                                std::cout<<coordinates[6*i + j*2 + k] << "\t";
                        }
                        std::cout << std::endl;
                }

                std::cout << "Frames" << std::endl;
                // ############# should be modified when file changes
                for(size_t m = 0; m < 4; ++m)
                {
                        for(size_t n = 0; n < 5; ++n)
                        {
                                std::cout << frames[20*i + m*5 + n] << "\t";
                        }
                        std::cout<< std::endl;
                }
        }

        return 0;
}

» 本帖已获得的红花(最新10朵)

18楼2013-06-04 11:04:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mljphy

铁虫 (正式写手)

送红花一朵
引用回帖:
18楼: Originally posted by zeppe at 2013-06-04 11:04:19
楼主你好,请试用下面这些可以来实现读取17楼提供的文件,假设存为"test_new.txt"
在我电脑上是"D:\\Skydrive\\MyCode\\cpp\\TreatString\\TreatString\\src\\test_new.txt"
请根据你自己的情 ...

这个程序成功测试了。多谢zeppe提供的高水平的指导。
一切都会慢慢好起来。
19楼2013-06-04 15:40:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

axefmbs

金虫 (小有名气)

一定要用C实现吗,用脚本会简单很多
20楼2013-06-04 17:00:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 mljphy 的主题更新
信息提示
请填处理意见