2012-07-02 43 views
1

我想在C++中重现以下python代码,但遇到了一些麻烦。函数read_file读取一个文本文件,测试每行中的第一个单词以查看它是否为整数。如果第一个单词是一个整数(4位或更多位数),则将该行上的所有单词都添加到列表z中作为浮点数。在另一种情况下,该行仅作为字符串添加到列表中。列表(z)的列表被转换为二维numpy数组并返回休息。在C++中读取有点结构化的文本文件到数组中

def read_file(f): 
    srchp = re.compile(r'^\d{4,}\s') # beg. of line, digit min 4, white space 
    f = open(f) 
    rest = [] 
    z = [x.strip() for x in f.readlines()] # read file, strip whitespace at beg./end of line, 
    #store in z as list of strings. each line is at its own offset 
    for i in range(len(z)-1,-1,-1): 
     if not srchp.search(z[i]): #if regex does not match 
      rest.append(z.pop(i)) #append to list rest 
     else: 
      z[i] = map(float,z[i].split()) 
    f.close() 
    return numpy.array(z),rest 

什么数据类型应该用于C++中的容器(向量?数组?)?在这一天结束时,我想用数组做一些统计分析。我将非常感谢将此代码转换为C++的任何帮助。

以下是需要阅读的文件的摘录。

TEMP_INF       700.000000     SCALAR 

NAME        VALUE      TYPE DIMENSIONS 
TEMP_REF       25.0000000     SCALAR 

    ***** POST1 ELEMENT TABLE LISTING *****          

STAT  MIXED   MIXED   MIXED   MIXED 
ELEM  X    Y    Z    TEMP  
23261  0.56292E-03 -0.96401E-02  0.24093   755.91  
23262  -0.16635E-03 -0.97998E-02  0.24080   756.25  
23263  -0.17039E-03 -0.10374E-01  0.24025   757.65  
23264  0.12895E-02 -0.74483E-02  0.24242   751.64  
23265  0.67515E-03 -0.80538E-02  0.24209   752.62  
23266  0.10350E-02 -0.86614E-02  0.24164   753.92  
23267  0.56032E-03 -0.88420E-02  0.24105   756.49  
23268  0.13782E-02 -0.10792E-01  0.23978   758.74 

回答

1

因为每一行看起来它持有一个int和浮动,这将是一个不错的主意,宣布struct利用这些信息。

struct row { 
    int elem; 
    float x, y, z, temp; 
}; 

现在您可以创建一个vector<row>来保存您的信息。

vector<row> rows; 

对于每一行,您可以插入元素,像这样:

row r; 
cin >> r.elem >> r.x >> r.y >> r.z >> r.temp; 
rows.push_back(r);