Дата истечения срока действия текстового файла в Qt

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