仅读取特定行中的文件中的数字

时间:2017-10-05 18:43:42

标签: c++ arrays ifstream

我试图从包含4行标题的数据文件中读取,并且还有一个我将存储到2d int数组中的数字列表

例如

int

INT

INT

INT

...

我需要以某种方式跳过这些包含文本的标题行,并且只使用int行并将它们存储到上述的2d数组中。当我打开文件并搜索它时,由于一开始的文本,它根本不存储任何值。我已经尝试了多个if语句和其他东西来解决这个问题,但到目前为止已经有效了。

int main()
{

    ifstream imageFile;
    imageFile.open("myfile");

    if (!imageFile.is_open())
    {
        exit (EXIT_FAILURE);
    }

    int test2[16][16];
    int word;
    imageFile >> word;

    while (imageFile.good())
        for (int i = 0; i < 16; i++)
        {

            for (int j = 0; j < 16; j++)
            {

                test2[i][j] = word;
                imageFile >> word;

            }
        }

}

2 个答案:

答案 0 :(得分:1)

如评论中所述,您需要先阅读标题 - 这里我只是将标题存储在trash变量中,该变量是每次存储新标题时都被覆盖的字符串:< / p>

std::string trash;
for (int i =0; i < 4; i++)
    std::getline(imageFile, trash);

在您检查文件是否正确打开并且将直接跟随您声明2D数组并读取整数的原始代码之后,此部分将进行此操作。

正如评论中所说,你需要std::getline作为一个整体读取每个标题行而不是一次一个单词,这是我的答案的第一个版本(imageFile >> trash;)。 / p>

答案 1 :(得分:0)

你可以通过正则表达式和模式来实现这一点(修改2d数组的代码,这只是如何从文件或字符串中提取数字的示例):

std::string ss;

ifstream myReadFile;
myReadFile.open("foo.txt");
char output[100];
if (myReadFile.is_open()) {
    while (!myReadFile.eof()) {

        myReadFile >> output;
        ss.append(output);
        ss.append("\n");

    }
}
myReadFile.close();

std::regex rx(R"((?:^|\s)([+-]?[[:digit:]]+(?:\.[[:digit:]]+)?)(?=$|\s))"); // Declare the regex with a raw string literal
std::smatch m;
std::string str = ss;
while (regex_search(str, m, rx)) {
    std::cout << "Number found: " << m[1] << std::endl; // Get Captured Group 1 text
    str = m.suffix().str(); // Proceed to the next match
}

输出:

Number found: 612
Number found: 551
Number found: 14124