如何解决此问题,我需要从文本文件中导出一行

How can I solve this problem, i need to export a line from a text file?

本文关键字:文件 文本 一行 解决 何解决 问题      更新时间:2023-10-16

我有一个类似的输入文件:

   Virtual   (A) (A) (A) (A) (A) (A) (A) (A) (A) (A) (A) (A)
The electronic state is 1-A.
Alpha  occ. eigenvalues --   -0.26426  -0.26166  -0.25915  -0.25885  
Alpha  occ. eigenvalues --   -0.25284  -0.25172  -0.24273  -0.23559  
Alpha  occ. eigenvalues --   -0.20078  -0.19615  -0.17676  -0.10810  
Alpha virt. eigenvalues --   -0.07062  -0.06520  -0.05969  -0.01767  
Alpha virt. eigenvalues --   -0.01604  -0.00951  -0.00428   0.00041  

我想导出第一行获得前11个字符" Alpha Virt"。我应该怎么做?我通过C 语言代码如下代码,但是在循环功能时它无法完成。我不知道为什么,我是一个新鲜的。请帮我。太感谢了。我的C 代码:

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#define FILENAME "filelog.txt"
using namespace std;
int main(void) {
    char* line_buf = NULL;
    size_t line_buf_size = 0;
    int line_count = 0;
    string s;
    std::string dongsosanh = " Alpha virt.";
    FILE* fp = fopen(FILENAME, "r");
    getline(&line_buf, &line_buf_size, fp);
    std::string STRR(line_buf, 11);
    do {
        line_count++;
        getline(&line_buf, &line_buf_size, fp);
    } while(STRR.compare(dongsosanh) != 0);
    std::cout << STRR << endl;
    return 0;
}

非常感谢。

您程序的许多问题:

line_buf-没有分配的内存,undef行为

line_count-是0,什么都不会红

您没有在最后关闭文件。

" alpha virt。" - 永远不会找到这条线,它在开始时有空间。

strr在线变红后永远不会更新,无尽的循环

工作解决方案:

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#define FILENAME "filelog.txt"
using namespace std;
int main(void) {
    const std::string dongsosanh = "Alpha virt.";
    char* line_buf = new char[100];
    size_t line_buf_size = 100;
    int line_count = 0;
    string s;
    FILE* fp = fopen(FILENAME, "r");
    do {
        line_count++;
        getline(&line_buf, &line_buf_size, fp);
        std::cout << line_buf;
    } while(dongsosanh.compare(0, 11, line_buf, 11));
    free(line_buf);
    fclose(fp);
    return 0;
}

这是在您的情况下显示它的工作原理,但是您应该使用向量而不是char* line_buf。

您可以做到这一点:

std::ifstream input(FILENAME);
std::string line;
while(std::getline(input, line)) {
    if(line.substr(0, 11) == "Alpha virt.") {
        std::cout << line << endl;
        return 0;
    }
}

编辑:添加了返回语句,以确保仅以" alpha virt"开头的第一行。被打印。