どなたかご教示をお願いします。
下記の文字列を展開したいのですが、istringstreamを使って上手くできませんか?
20080530164130001 TEST
0 - 13Byte YYYYMMDDHHMMSS(日時)をSYSTEMTIME構造体に格納
14 - 23Byte int型に格納
23 - 33Byte char型に格納
※データは前詰めで、残りはスペースで埋まってます。
上記の場合
SYSTEMTIME sysTime;
sysTime.wYear = 2008;
sysTime.wDayOfWeek = 5;
sysTime.wMonth = 5;
sysTime.wDay = 30;
(...省略)
int iId;
iId = 1;
text[] = TEXT
自力でするしかないでしょうなw
istringstreamをつかわなくても、
string系のクラスで、十分だとおもいますが。
string系のクラスで「CString.Format」のような関数みあたらなかったですね。
詳しくは存知の方よろしくお願いします。
ぼくは、「spintf」や「CString.Format」で0080530164130001
のようなものを一次の配列で作りますね。
必要に応じて2次配列や「CList」等にコピーすればいいと思いますが.....
修正
20080530164130001
ですね
ん?展開?
「sscanf」,「atoi」かな?
テンプレートのString系クラスについては存知の方よろしくお願いします。
> string系のクラスで「CString.Format」のような関数みあたらなかったですね。
stringクラスにCString::Formatのような関数はありません。
printfが型安全でないことをC++の設計者が嫌った結果ですから、意図的なものであり、
標準ライブラリの設計としてはostringstreamを使うことを推奨してると思います。
利便性?とのトレードオフでMSとは方針が違うということでしょうか。
必要ならC++でも旧来のsprintfが使えますし、
stringstreamなら、vsprintf等でoperator<<を作ったり、
昨今ならより型安全なBoost.format等を使うなど。
> 自力でするしかないでしょうなw
御意。
直接iomanipでがんばるよりは、こんな感じの演算子とか定義するとちょっと綺麗かと。
istream& operator >>(istream& is, SYSTEMTIME& time);
# 関連データの保持クラスに意味があるなら、その保持用クラスを作って、
# そのクラスに対してoperator >>を定義する方がより好ましいと思いますが。
みなさんありがとうございます。
返信送れて申し訳ありません。
やはり素直に自力で実装します。
くだらない事でお時間取らせました。。。