在 C++ 中将某种结构化的文本文件读入数组

Posted

技术标签:

【中文标题】在 C++ 中将某种结构化的文本文件读入数组【英文标题】:read somewhat structured text file into array in C++ 【发布时间】:2012-07-02 23:18:42 【问题描述】:

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

def read_file(f):
    srchp = re.compile(r'^\d4,\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 和一个 float,所以使用该信息声明 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);

【讨论】:

以上是关于在 C++ 中将某种结构化的文本文件读入数组的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中将文件读入字符数组

如何在 C++ 中将整个文件读入 std::string?

如何从文件中将文本读入ruby中的数组

VB6.0中如何实现逐行读入文本文件?

将文本文件逐行读入并行数组C++

c++ 将文本文件中的 3 列读入 2D 数组或 3 个单独的数组