从文件C ++中提取数字

时间:2015-08-14 08:06:17

标签: c++ file extract

我是新来的,请原谅我的英语和其他任何错误。 :)

在我的程序中,我想从一行中提取一个数字(以秒表示停止时间),我从下一行中提取另一个数字(以秒表示开始时间),之后将结果写入结果文件。

我有以下代码:

# include <iostream>
# include <fstream>
# include <string>
# include <streambuf>

using namespace std;

int main ()
{

    ifstream f;
    ofstream g;
    f.open("Processes.txt");
    g.open("Results.txt");

    long last_el,top_nr=0,stop_nr=0,start_nr=0,stop_time_count=1,start_time_count=1,inter_count=0,global_count,final_result_count=1;
    long pow_start_nr=7,pow_stop_nr=7,stop_time[1000],start_time[1000],final_result[1000];
    string text_el;

    stringstream strStream;
    strStream << f.rdbuf();
    string str = strStream.str();

    last_el=text_el.size();

   // while(text.el)
   // {
       for(global_count=0;global_count<last_el;global_count++)
       {
          if(text_el[global_count]=='*')
          {
             inter_count=global_count+1;
             for(global_count=inter_count;global_count<=inter_count+7;global_count++)
             {
                start_nr=start_nr+(10^pow_start_nr)*text_el[global_count];
                pow_start_nr--;
             }
             start_time[start_time_count]=start_nr;
             start_time_count++;
             global_count=inter_count+8;
          }
       }

       for(global_count=0;global_count<last_el;global_count++)
       {
          if(text_el[global_count]=='#')
          {
             inter_count=global_count+1;
             for(global_count=inter_count;global_count<=inter_count+7;global_count++)
             {
                stop_nr=stop_nr+(10^pow_stop_nr)*text_el[global_count];
                pow_stop_nr--;
             }
                stop_time[stop_time_count]=stop_nr;
                stop_time_count++;
                global_count=inter_count+8;
             }
          }
  //  }

    for(final_result_count=1;final_result_count<2;final_result_count++)
    {
       final_result[final_result_count]=stop_time[stop_time_count]-start_time[start_time_count];
       stop_time_count++;
       start_time_count++;
       g<<"The time for process number"<<" "<< final_result_count <<" "<<"is"<<" "<< final_result[final_result_count] <<endl<<endl;
    }

    f.close();
    g.close();
}

在我的退出文件中,它只写为0.

我不知道为什么会这样,如果你能帮助我,我会非常感激。 我认为从文件中读取文本有问题。 在那里,用&#34; a&#34;向量。我是C ++的菜鸟,所以请:帮助我! :d

谢谢!

LE

# include <iostream>
# include <fstream>
# include <string>
# include <sstream>
# include <streambuf>

using namespace std;

int main ()
{

    ifstream f;
    ofstream g;
    f.open("Processes.txt");
    g.open("Results.txt");

    long startTime[1000],endTime[1000];

    string nextLine;
    int lineNum = 1;

    while (getline(f, nextLine)) 
    {

    getline(f, nextLine);

    startTime[lineNum] = stoi(nextLine.substr(14,8));
    g<<startTime[lineNum]<<"xxxx";

    endTime[lineNum+1] = stoi(nextLine.substr(27,8));
    g<<endTime[lineNum]<<"xxxx";

    getline(f, nextLine);
    getline(f, nextLine);
    getline(f, nextLine);

    lineNum=lineNum+3;
    }

    f.close();
    g.close();
}

INPUT FILE:

起始于:* 00000005号码:1

在以下地址完成:#00000065号码:1

起始于:* 00000000号码:2

在:#00000100编号:2

完成

起始于:* 09999999号码:3 完成于:#10000000号码:3

1 个答案:

答案 0 :(得分:0)

我相信您最近的评论指出,您已经找到了解决此问题的最佳方法。您想要读取每一行并解析字符串。如下所示:

std::string nextLine;
int lineNum = 0;

while (std::getline(f, nextLine)) {
    startTime[lineNum] = std::stol(nextLine.substr(14,8));
    endTime[lineNum] = std::stol(nextLine.substr(50,8));
    lineNum++;
}

公平警告:我实际上没有仔细计算这些补偿,所以我可能会被一些人拒之门外。此外,您还必须考虑那些&#34;空白&#34;只有破折号的线条。但是我会把你留给家务。

希望这能让你走上正确的道路!