以下のような行で埋められた.txtファイルがあります。
- 2011-03-03 03.33.13.22242000情報ビジネス...etcblabla
- 2011-03-03 03.33.13.33342000情報ビジネス...etcblabla
- 2011-03-03 03.33.13.44442000情報ビジネス...etcblabla
コードのある時点で、計算とシークを行い、各行の先頭から日付のみを抽出します。これで、ファイルの先頭が正しい位置にあるときに、日付と時刻(ミリ秒を含む)のみを抽出し、「例:2011-03-03 03.33.13.444」を取得して、QDateTimeオブジェクトに変換します。
ファイルポインタが特定の行の先頭に正しく配置されていると仮定すると、readLineを使用して、日時のテキスト行を読み取り、QDateTimeオブジェクトに変換します。
QDateTime dt;
char lineBuff[1024];
qint64 lineLength;
lineLength=file.readLine(lineBuff, 24);
dt = QDateTime::fromString(QString(lineBuff),"yyyy-MM-dd HH.mm.ss.zzz");
これは絶対に正しいです。
しかし、ここに問題があります:
私がこのように同じことをするとき:
QDateTime dt;
QByteArray baLine;
char lineBuff[1024];
file.seek(nGotoPos); //QFile, nGotoPos = a position in my file
QString strPrev(baLine); // convert bytearry to qstring -> so i can use mid()
// calculate where the last two newline characters are in that string
int nEndLine = strPrev.lastIndexOf("\n");
int nStartLine = strPrev.lastIndexOf("\n", -2);
QString strMyWholeLineOfTextAtSomePoint = strPrev.mid(nStartLine,nEndLine);
QString strMyDateTime = strMyWholeLineOfTextAtSomePoint.left(24);
// strMyDateTime in debug mode shows me that it is filled with my string
// "ex: 2011-03-03 03.33.13.444"
// THE PROBLEM
// But when i try to covert that string to my QDateTime object it is empty
dt = QDateTime::fromString(strMyDateTime ,"yyyy-MM-dd HH.mm.ss.zzz");
dt.isValid() //false
dt.toString () // "" -> empty ????
しかし、私がそうするなら:
dt = QDateTime :: fromString( "2011-03-03 03.33.13.444"、 "yyyy-MM-dd HH.mm.ss.zzz"); その後、すべてが大丈夫です。
QStringの問題は何でしょうか?strMyDateTimeに「\0」を追加する必要がありますか、それとも他の変換が必要ですか?