-3

我想使用 Cfile 打印在 C++ 中打印的行数。我想根据日期写行数。例如在同一个文件中写了两天,

Nr 日期时间码值
1 2019 年 10 月 6 日 09:10 220 55
2 2019 年 10 月 6 日 10:16 33 23
3 2019 年 10 月 6 日 10:50 55 11
1 2019 年 11 月 6 日 03:55 11 15
2 2019 年 11 月 6 日 08:22 18 20

一切都正确,除了行号

CString strDate, strYearShort, strTime;

strYearShort = (CString)Datum.year;
strYearShort = strYearShort.Right(2);
strDate = (CString)Datum.day + '.' + (CString)Datum.month + '.' + strYearShort;
strTime = (CString)Zeit.hour + ':' + (CString)Zeit.minute;

buf.Format(_T("%s\t%s\t%s\t%s\t%s\t%d\r\n\r\n"), strDate, strTime, (CString)number, (CString)cardnumber, value);

enter code hereif (CTime::GetCurrentTime().GetDay() != lastWriteDay) {
        for (i = 1, i < 100, i++) {
            int Nu = i,
        }
    }
    else if (CTime::GetCurrentTime().GetDay() = lastWriteDay) {
        Nu == 0;
            or (i = 1, i < 100, i++) {
            Nu = i,
        }
    }
4

1 回答 1

0

保留最后写入日期的变量:

// Should be persistent for lifetime of app:
// eg: global, static, or class member
int lastWriteDay = 0;

写入新行时,将上次写入日期与当前日期进行比较。如果日期不同,请重置行号。

....
if (CTime::GetCurrentTime().GetDay() != lastWriteDay) {
    number = 1;
    lastWriteDay = CTime::GetCurrentTime().GetDay();
}
// Do write....
....

然后您可以在创建字符串时更新数字:

buf.Format(_T("%s\t%s\t%d\t%d\t%s\t%d\r\n\r\n"),
    strDate,
    strTime,
    number++,    // Increment for next time
    cardnumber,
    value);

此外,您问题中的示例没有足够的参数。似乎没有必要将整数转换为CString. 只需使用%d格式说明符。

TODO:您可能想要添加一些在启动时运行的代码,这些代码会打开文件,读取最后一行并解析该行以获得最后一个写入日期。然后初始化lastWriteDay到那个。当应用程序由于某种原因在同一天退出并重新启动时,这是必需的。

于 2019-06-18T12:56:52.177 回答