2014-12-21 49 views
1

我想找到的时间花在做一定的活动与C总金额来提取数据++和Mac的Automator(你不需要知道 的Automator帮助我)。我正在使用Mac Automator使用“事件摘要”和“新文本文件”操作输出文本文件。它输出一个这样的文本文件: Viewable text file在文本文件中查找单词使用C++

我目前正在努力寻找一些非常微不足道的东西;我无法在文本文件中准确找到“时间”和“日期”两个字。如果我找不到“时间”和“日期”这两个字,我就无法开始处理完成该活动所花费的时间总量或该活动是否在午夜结束(我有时会参加这些活动)。到目前为止,我认为我花了四个小时,结果不一。对于任何反馈,我们都表示感谢。

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

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); 

如果你想要automator工作流程,我可以给你。

+0

使用'strstr'而不是'strcmp'。后者仅用于精确匹配。 – usr2564301

+1

['std :: string :: find()'](http://en.cppreference.com/w/cpp/string/basic_string/find)是否适合您? –

+0

@Jongware谢谢!我会尝试的。 –

回答

1

还有,你需要检查一些假设:

  1. 是“时间”总是会在第一个字符位置开始?在看到“时间”这个词之前没有空格或标签?
  2. 在同一行中可以有多个“时间”字吗?
  3. 在“时间”之前是否会出现另一个词?

strcmp("Time",buff)假设你的整个字符串“buff”在它的“Time”中只有一个单词。 这不是你想要的。如果假设1是真实的,你可以简单地做

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

否则,一个通用的位置,你可以使用strstr(buff, "Time"),对于字符串匹配,其中“时间”可能是在字符串中的任何地方。一旦你获得了职位,跳过完全的字符数来达到时间价值。提取并执行您的计算。

通常,在解析文件,你必须有一些津贴空格/制表符等。否则,代码变得太脆,不能认为偏离非常轻微的测试用例。

相关问题