在文本文件中查找单词以使用C ++提取数据

时间:2014-12-21 13:49:34

标签: c++ text-files automator

我试图找到使用C ++和Mac Automator完成某项活动所花费的总时间(您不需要知道 Automator帮助我)。我正在使用Mac Automator使用“事件摘要”和“新文本文件”操作输出文本文件。它输出如下文本文件: Viewable text file

我目前正在为一些非常微不足道的事情而苦苦挣扎;我无法在文本文件中准确找到“时间”和“日期”字样。如果我找不到单词“时间”和“日期”,我就无法开始处理完成该活动所花费的总时间,或者该活动是否超过了午夜(我有时会进入ams)。到目前为止,我认为我花了四个小时的结果好坏参半。任何反馈都将不胜感激。

以下代码是我目前使用的代码。我可以在文件的最开头找到“时间”和“日期”这个词,或者如果“:”在“时间”或“日期”之前,但是当它在不同的行上时,程序失败:

cout << "Reading from the file...." << endl;
infile.open("calendar workflow text.txt");
while(infile.getline(buff, BUFFSIZE, ':')){ //reads everything
    cout << buff << endl; // prints everything
    if(strcmp("Time",buff)==0){
        cout<<"Time found in text\n"<<endl;
    }
    else if (strcmp("Date",buff)==0){
        cout<<"Date found in text\n"<<endl;
    }
}
infile.close();
cout<<"Total Time in all events: "<<sumtime<<" hrs"<<endl;
return (0);

如果你想要自动贩卖工作流程,我可以给你。

1 个答案:

答案 0 :(得分:1)

您需要检查一些假设:

  1. 是&#34;时间&#34;总是从第一个角色位置开始?在看到单词&#34; Time&#34;?
  2. 之前没有空格或制表符
  3. 可以有多个&#34;时间&#34;同一行中的单词?
  4. 可以在&#34; Time&#34;?
  5. 之前出现另一个单词

    strcmp("Time",buff)假设你的整个字符串&#34; buff&#34;只有一个字在其中&#34;时间&#34;。 那不是你想要的。如果假设1为真,你可以简单地做

    if strncmp(buff, "Time", 4) == 0 {
          // do something, as you found time
    }
    

    否则,对于通用位置,您可以使用strstr(buff, "Time")进行子串匹配,其中&#34;时间&#34;可以在字符串中的任何位置。获得该职位后,跳过确切的字符数以获得时间值。提取并执行计算。

    通常,在解析文件时,您必须对空格/制表符等进行一些限制。否则,代码会变得太脆弱,并且可能会使测试用例失败,这些测试用例会稍微偏离。