VC++6 の MFC4.2 の CString には Tokenize がないんだよねー
だから SpanExcluding を例に挙げといたんだが
SpanExclude で抽出→Mid で既読部分を削除→TrimLeft で先頭セパレータを削除→
の繰り返しで Tokenize 相当のことは出来そうな気がする
っていうかやってみた(やっつけ:参考にしないでね)
struct cstring_tokenizer {
CString str;
const TCHAR* separators;
cstring_tokenizer(const CString& str0, const TCHAR* sep0) : str(str0),
separators(sep0) {}
CString read_tokenized_string() { // destructive read
CString tmp(str.SpanExcluding(separators));
str=str.Mid(tmp.GetLength());
str.TrimLeft(separators);
return tmp;
}
};
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) {
AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0);
CString s(_T(1000-01-01|<<aaaaa>>::表示能力));
cstring_tokenizer tk(s, _T(|<>:\\));
CString t;
for (t=tk.read_tokenized_string(); t.GetLength()>0;
t=tk.read_tokenized_string()) {
std::cout << static_cast<const TCHAR*>(t) << std::endl;
}
return 0;
}
> VC++6 の MFC4.2 の CString には Tokenize がないんだよねー
そか、VC6かー... orz
もうね、いいかげんいつまでそんな古いの使ってんだと。
うーん、
すべて半角のデータで実行させたらstrtokでうまくいったのですか?
半角どころか全角もうまく行ってました。
一部では、
> 全角1文字を半角2文字として扱うため、
> 場合によっては全角文字の一部が区切り文字と誤認識され、ぶった切られます。
これになりました。
ちなみにこの漢字は「掛」ぶった切られました。
ワープレスですみません。
> 基本的な事なら、すいません。
> C++の参考書でも、VC++の勉強になるのですか?
VC++の本はC++言語の文法は理解していること前提で書いてある事が
殆どですので、その前提が崩れるとVC++の本を読んでも理解できない部分が
多々出てきます。
C++言語を知らないとMFCは使いこなせないです。
特にクラスの派生やら仮想関数周りは知っておく必要があると思います。
なので、MFCを使ったプログラミングをする前にC++の勉強をしておく方が
良いのでは無いかと言う提案です。
MFCとC++言語の勉強を同時にやるよりも先にC++言語の知識をきちんと
付けた方がMFCもすんなり理解できますし、お得だと思います。
> ふと今思ったのですが、[cout <<]←ってC++,VC++で使えるのですか?
使えるはずですよ。
但し、名前空間の話があるのでその辺まで理解した上で無いと
使えないとかなりそうですけれど。
VC++も結局はC++言語の上で成り立っている開発環境なので
その辺の標準的な部分は同じです。
但し、VC++6.0のコンパイラは最新のC++言語の標準からすると
準拠率が低く、お勧めできる物では有りません。
VC++6.0でないと駄目な理由が無い限りは最新の環境で勉強された方が
よろしいかと思います。
コンパイラもライブラリも最新の物の方が準拠率は高いです。
VC++:開発用のソフトの名前
C++:プログラム言語の名前
本来は、同列にあつかうものではないと思う。
#C++/CLIはVC#みたいに別にしてほしいなぁと思う
> VC++の本はC++言語の文法は理解していること前提
そうなんですか~。だからC++の勉強必要なんですね。
> VC++6.0でないと駄目な理由が無い限りは最新の環境で勉強された方が
> よろしいかと思います。
> コンパイラもライブラリも最新の物の方が準拠率は高いです
なるほど、できるだけ最新の物でやった方がいいんですか~。
今やっている内容が終わったら検討してみます。
ありがとうございます。
> 本来は、同列にあつかうものではないと思う。
別物なんですか~。一緒みたいに扱った発言あったらすいませんでした。
ところで、今、未解決の問題があるのですか?
ないなら解決してこのスレを閉じてはいかがでしょうか。
未解決の問題についても、当初の質問との直接的な関連が小さいようなら、
別スレで質問するのが良いと思います。
たいちうさん、ありがとうございます。
そうですねタイトルから、質問がずれてますね。
CStdioFileの使い方についての質問は解決したので、
今残っている、質問は新規スレで質問します。
後、解決したのはBlueさん、επιστημηさん
書いて頂いたサンプルで解決しました。
if ( !fin.Open(aaa.txt, CFile::modeRead, NULL ) )
CStdioFile fInStream(strFileName, CFile::modeRead | CFile::typeText);
みなさん、ありがとうございました。
移動
http://www.play21.jp/board/formz.cgi?
action=res&resno=20101&page=&id=dixq&rln=20112