#qt #date #text #find
#qt #Дата #текст #Найти
Вопрос:
У меня есть текстовый файл с номерами статей с указанием даты истечения срока их действия.
Пример:
123456789 21-9-2014
987654321 7-12-2014
112233445 3-2-2015
Но я хочу получить список всех статей, срок действия которых истекает через 6 недель (42 дня), в виджете QTextEdit. Итак, я протестировал это только с помощью виджета QDate, чтобы проверить, почти истек срок действия чего-либо или нет.
QDate ExpireDate = ui->date->date();
if (ExpireDate.toJulianDay() - today.toJulianDay() <= 42)
{
qDebug() << "Expired";
}
Это сработало. Но я хочу, чтобы все статьи, срок действия которых истекает (за 6 недель до этого) и которые хранятся в текстовом файле, отображались в виджете TextEdit. Но я не знаю, как «найти» эти статьи в текстовом файле и отобразить их.
Ответ №1:
Для предоставленного вами примера файла я бы сделал следующее:
QFile file1("test.txt");
if (!file1.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QDate today = QDate::currentDate();
while (!file1.atEnd()) {
QByteArray line = file1.readLine();
QList<QByteArray> tokens = line.split(' '); // Depends on the file format.
Q_ASSERT(tokens.size() == 2);
QString dateString = tokens.at(1).trimmed();
QDate date = QDate::fromString(dateString, "d-M-yyyy");
Q_ASSERT(date.isValid());
if (date.toJulianDay() - today.toJulianDay() <= 42) {
fprintf(stdout, "Expiredn");
}
}
Комментарии:
1. Я пробовал это, но получаю ошибку времени выполнения
Invalid parameter passed to C runtime function.
иThis application has requiested the Runtime to terminate it in a unusual way.
2. Я исправил это, используя не табуляции между номером статьи и датой, а просто пробел.
3. @sWeer вот почему я написал комментарий о зависимости от формата файла. Вместо этого вы могли бы разделить строку символом табуляции: line.split(‘t’);