我希望嵌套的for循环按序列顺序工作,例如考虑以下代码:

int main ()
{       
string mainstr;
ifstream infile;
ifstream infile1;
infile.open ("27032015.log");
infile1.open("Exordernumber");
for (unsigned int curLine = 0; getline(infile1,exordernum); curLine++)
{
    cout << "curLine:" << curLine << endl;
{
    for (unsigned int curLine1 = 0; getline(infile,mainstr);curLine1++)
        cout << "curLine1:" << curLine1 << endl;    
        if (mainstr.find(exordernum) != std::string::npos) 
                {
                    cout << "exordernum:"<<exordernum << ":" << endl;
                }                               
}
}

我希望它首先打印curLine:1
然后curLine1:{所有值}
然后curLine:2
然后curLine1:{所有值}
然后curLine:3
然后curLine1:{所有值}

等等..

但它打印出的东西:
curLine:1
然后curLine1:{所有值}
curLine:2
curLine:3
curLine:4

等等..

错误在哪里?
即使我使用while循环,也会打印出相同的内容。
我不知道问题所在。

现在问题已解决,我想知道同一件事的python代码:这是我编写的内容,它给出了错误。

#!/usr/bin/env python

import sys
import re

hand = open('Exordernumber')
for line1 in hand:
    with open('27032015.log') as f:
        for line in f:
            if re.search(line,line1):
                print line
        f.close()

请提出正确的python代码。

#1楼 票数:0

第一次转到文件“ 27032015.log”的末尾。 第二次您将永远不会去循环:

 for (unsigned int curLine1 = 0; getline(infile,mainstr);curLine1++)
        cout << "curLine1:" << curLine1 << endl;    

您必须将光标置于文件的开头或在循环末尾重新打开它。

int main ()
{       
string mainstr;
ifstream infile;
ifstream infile1;
infile.open ("27032015.log");
infile1.open("Exordernumber");
for (unsigned int curLine = 0; getline(infile1,exordernum); curLine++)
{
    cout << "curLine:" << curLine << endl;
{
    for (unsigned int curLine1 = 0; getline(infile,mainstr);curLine1++)
        cout << "curLine1:" << curLine1 << endl;    
    if (mainstr.find(exordernum) != std::string::npos) 
    {
       cout << "exordernum:"<<exordernum << ":" << endl;
    }  
    infile.seekg (0, infile.beg);                    
}
}

http://www.cplusplus.com/reference/istream/istream/seekg/

#2楼 票数:0

您必须在每次外部迭代后将文件内流重置为流的开头。 我想你需要这样的东西

for (unsigned int curLine = 0; getline(infile1,exordernum); curLine++)
{
    cout << "curLine:" << curLine << endl;
    for (unsigned int curLine1 = 0; getline(infile,mainstr);curLine1++)
    {
        cout << "curLine1:" << curLine1 << endl;    
        if (mainstr.find(exordernum) != std::string::npos) 
                {
                    cout << "exordernum:"<<exordernum << ":" << endl;
                }                               
    }
    infile.seekg (0, infile.beg);
}

#3楼 票数:0

进入内部循环仅一次,因为第一次循环访问该文件后,该循环“ getline(infile,mainstr)”的条件就不再满足。 文件中的指针始终指向文件末尾。

您可以做的是在外部循环中打开文件:

for (unsigned int curLine = 0; getline(infile1,exordernum); curLine++)
{
    cout << "curLine:" << curLine << endl;
    infile.open ("27032015.log");
    {
        for (unsigned int curLine1 = 0; getline(infile,mainstr);curLine1++)
        cout << "curLine1:" << curLine1 << endl;    
        if (mainstr.find(exordernum) != std::string::npos) 
        {
            cout << "exordernum:"<<exordernum << ":" << endl;
        }                               
    }
    infile.close ();
}

因此,输入文件将在进入内部循环之前每次都重新初始化。

对于python代码,您可以尝试删除最后一行'f.close()'。 当您使用“ with open”时,python将为您处理文件关闭。 但是您需要手动关闭文件“ hand”。

#!/usr/bin/env python

import sys
import re

hand = open('Exordernumber')
for line1 in hand:
    with open('27032015.log') as f:
        for line in f:
            if re.search(line,line1):
                print line
hand.close()

您可以发布python代码的错误消息吗?

  ask by Heisenberg translate from so

未解决问题?本站智能推荐:

2回复

嵌套for循环中的分段错误

在我的应用程序中,我有包含程序配置的外部文本文件。 我正在逐行读取该外部文件并向数组添加值。 在某些时候,我必须基于数组嵌套循环来处理一些信息。 下面是我的代码 但是当我运行它时,我总是遇到段错误。 但是如果我注释掉一个循环,它就可以正常工作。 当我 COUT readconf 函数上的值时,我得到
2回复

如何比较文件中的单词和C++中另一个文件中的单词列表?

因此,我在从document1中抓取一个单词并将其与document2中的单词列表进行比较时遇到了麻烦。 因此,当我运行该程序时,document1的第一个单词正在与document2的单词列表进行比较,但是document1中的下一个单词没有与document2的列表进行比较。 我不确定是
1回复

从文本文件中读取在c++中

我正在编写一个程序,它接受一个由模式和文本文件名称组成的输入行。 然后程序将在给定的文本文件中搜索给定的模式。 我接受输入并将其转换为两个字符串:pattern和file_name我在以下行中收到错误: 当我将其更改为以下内容时,它编译得很好。 显然,这不是我想要的,因为文件名必须
1回复

如何使用C++从txt文件中读取n个值

我有以下 C++ 代码,我通过它从 .txt 文件中读取值你能帮我改进代码吗,这样我不仅可以从 .txt 中读取 14 个值,还可以读取 n 个值 .txt 文件看起来像
1回复

在C++中从文件读取,处理空格

我打算从C ++ 98的文本文件中读取。 它具有模式,但有时字段为空: 如何从文件中读取内容,以便忽略空白? (我希望我可以只使用正则表达式:\\ d *) 有没有简单的方法可以做到这一点?
5回复

从文件中读取数字

我有一个数字很多的文件。 文件基本上看起来像“ 192 158 100 0 20 200”。 如何一次加载文件编号值1并在C ++中将其显示在屏幕上?
3回复

如何从文本文件中读取文件名列表并在C++中打开它们?

我有一个存储在文本文件中的文件列表。 我逐行读取文件并将其存储在字符串数组中。 文件列表如下所示: 等等。 我们叫我的字符串数组 假设我正在尝试打开列表中的第一个文件: 该文件无法打开。 如果我将文件名放在引号中,则一切正常: 如果我打印filelist [i]的内容,那
4回复

C++逐字读取文件,没有任何符号

我想从文本文件中逐字阅读。 这是我在C ++中的代码: 文本文件包含以下句子: 这是我得到的结果: 您能告诉我如何获得如下格式的结果: 谢谢。