Поиск слов в текстовом файле для извлечения данных с помощью переполнения стека

Я пытаюсь найти общее количество времени, потраченного на выполнение определенных действий с 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);

Если вам нужен рабочий процесс автоматизатора, я могу дать его вам.

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"), для совпадения подстроки, где «Время» может быть где угодно в строке. Как только вы получите позицию, пропустите точное количество символов, чтобы получить значение времени. Извлеките это и выполните ваши вычисления.

Как правило, при разборе файлов вам нужно будет учитывать некоторые пробелы / табуляции и т. Д. В противном случае код становится слишком хрупким и может давать сбой тест-кейсам, которые слегка отклоняются.

1

Другие решения