Я пытаюсь найти общее количество времени, потраченного на выполнение определенных действий с C ++ и Mac Automator (вам не нужно знать,
Автоматор мне в помощь). Я использую Mac Automator для вывода текстового файла с помощью действий «Сводка по событию» и «Новый текстовый файл». Это выводит текстовый файл как это:
Видимый текстовый файл
В настоящее время я борюсь за что-то очень тривиальное; Я не могу точно найти слова «Время» и «Дата» в текстовом файле. Если я не могу найти слова «Время» и «Дата», я не могу начать обработку общего количества времени, потраченного на выполнение этого упражнения, или того, заняло ли это действие более полуночи (иногда я работаю в 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);
Если вам нужен рабочий процесс автоматизатора, я могу дать его вам.
Есть несколько предположений, которые вы должны проверить:
strcmp("Time",buff)
Предполагается, что вся ваша строка «buff» содержит только одно слово «Time».
Это не то, что вы хотите. Если предположение 1 верно, вы можете просто сделать
if strncmp(buff, "Time", 4) == 0 {
// do something, as you found time
}
В противном случае, для общей позиции, вы можете использовать strstr(buff, "Time")
, для совпадения подстроки, где «Время» может быть где угодно в строке. Как только вы получите позицию, пропустите точное количество символов, чтобы получить значение времени. Извлеките это и выполните ваши вычисления.
Как правило, при разборе файлов вам нужно будет учитывать некоторые пробелы / табуляции и т. Д. В противном случае код становится слишком хрупким и может давать сбой тест-кейсам, которые слегка отклоняются.