全角文字にstrtok使っちゃダメでしょぉ!
strtokは全角文字を想定して作られていません。
使ったあんたが悪い。
すいません。上記では、全角になっているのですが
テキストの中はちゃんと半角になっていました。
すいません。記載ミスです。
...しょーじきわからん。ありえねぇ。
# てか再現できねぇ
ん・・・?
> 全角文字にstrtok使っちゃダメでしょぉ!
> strtokは全角文字を想定して作られていません。
という事は、
全角の文字列を読み込まそうとするのに、strtokを使っては
ダメという事ですね?
> という事は、
> 全角の文字列を読み込まそうとするのに、strtokを使っては
> ダメという事ですね?
通常 ランタイムライブラリーは半角はだめです。
全角用の関数が用意されている場合がありますが、
使ったことないですね。
> 通常 ランタイムライブラリーは半角はだめです。
C言語の標準なライブラリの事を示す。←ついさっき知りました。
> 通常 ランタイムライブラリーは半角はだめです。
すいません。
上記でちょっと混乱しているのですが、strtok関数はCRT(ランタイムライブラリ)
から外れるって事ですか?
> 全角文字にstrtok使っちゃダメでしょぉ!
↑これをみる限りstrtok関数は半角しか使ってはいけないって事ですよね?
> 通常 ランタイムライブラリーは半角はだめです。
↑全角しかダメって事ですよね?
「このふたつから、strtokはCRTではなく半角読込に使って
CRTで用意されている全角読込関数を使う」
という解釈でいいんですか?
ここまできたらいいかげんマニュアルを読め。
http://msdn.microsoft.com/ja-jp/library/2c8d19sb(VS.80).aspx
>> 通常 ランタイムライブラリーは半角はだめです。
> ↑全角しかダメって事ですよね?
そうですね全角がだめです。
混乱させちゃったようですみません。
>「このふたつから、strtokはCRTではなく半角読込に使って
> CRTで用意されている全角読込関数を使う」
> という解釈でいいんですか?
いいと思います。
区切り文字は、出来る限り半角にしたほうがいいですね。
> 区切り文字は、出来る限り半角にしたほうがいいですね。
区切り文字は半角必須。そうじゃないと二つの区切り文字とみなされます。
分割対象の文字列も半角必須。全角1文字を半角2文字として扱うため、
場合によっては全角文字の一部が区切り文字と誤認識され、ぶった切られます。
> ここまできたらいいかげんマニュアルを読め。
一番上に「ランタイム ライブラリ リファレンス」と書いてありました。
επιστημηさん、怒らしたならすいませんでした。
すいません。
また怒らすかもしれませんが
例えば、テキストの中が
---------------------------------
1000-01-01|<<aaaaa>>::あああああ
---------------------------------
という風になっていたなら、
1000-01-01|<<aaaaa>>::まではstrtok等の半角関数で読んで
あああああは別の全角関数で読み込むという風に
処理を分けた方がいいという事ですか?
...やっぱり読んでない。
そのマニュアル・ページにマルチバイト文字列対応版も載ってたはずだが?
中氏の代わりに突っ込みいれていいっすか?全角ってなにっすか?
MBCS なんぞ捨てて wcstok なら問題ないぢゃんとか
マルチスレッドで strtok 正しく動くんだっけとか
そんな不安要素を抱えたもの使うくらいなら boost::tokenizer に汁とか
正規表現クラスのほうがもっと使いやすいんぢゃないかとか
CString のままでも SpanExcluding とかでなんとかなりそうとか
# 中さんがなんと言おうが全角は全角っしょ♪ 通じるからね。
CString::Tokenizeならもっと簡単とか。
そーゆーことも含めてマニュアル読め、と。
調べ方が足りませんね。すいませんでした。
調べてまた出直してきます。
> 1000-01-01|<<aaaaa>>::まではstrtok等の半角関数で読んで
> あああああは別の全角関数で読み込むという風に
> 処理を分けた方がいいという事ですか?
全角が混じる可能性があるならば、全角に対応している関数を使おう、
ということです。処理を分ける必要はありません。
CString::Tokenize()かCString::Find()を使って、
自分で切り分けてはいかがでしょう。