トップページ⇒tech
84コメント25KB

【C++】最強のSplitクラスを作ろう!【無いから】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/11/09(水) 00:22:13
Split関数って知ってるよね?
俺はVBやってちょっと使ってみただけなんだけど便利なんだよ。これ。
で、業務で使えるぐらい便利にならんかと色々と考えたわけよ。
んでも、俺って文字列処理あんまよく知らないし苦手なんだよね。

なんで、プログラム晒すと話が中々進まないから、
超便利なSplitクラスの仕様をみんなで考えようというわけよ。
はじめに何もないとアレだからとりあえず俺が考えたとk
0002デフォルトの名無しさん2005/11/09(水) 00:26:23
boost使えや
0003デフォルトの名無しさん2005/11/09(水) 00:26:37
boostので十分なんだけど。
0004デフォルトの名無しさん2005/11/09(水) 00:27:37
boostなくてもstringstreamあれば十分


=======終了========
0005デフォルトの名無しさんNGNG
ワロタ
0006デフォルトの名無しさん2005/11/09(水) 00:32:27
"【C++】最強のSplitクラスを作ろう!【無いから】"のログを削除します。よろしいですか?

   →【はい】  [いいえ]
0007デフォルトの名無しさん2005/11/09(水) 00:32:48
>>2
実はVBのもよく知らないんだけど、
boostのsplitの仕様ってどうなってんの?
0008デフォルトの名無しさん2005/11/09(水) 00:40:12
boostみてきた。
なんかあんまよさそうじゃないなぁ・・・。

とりあえずね。

1.デリミタ文字を指定できるようにしたい。
2.トークン3つ目の読み込みで処理を中断する等、指定したトークン数で途中で処理を止められるようにしたい。
3.指定した文字と文字の間にある文字列はデリミタの適用をぬけて取得できるようにしたい。
4.指定した文字列を発見したら、処理を中断するようにしたい。
5.中断したところから再開したい。

ぐらいは入れたいと思ってるんだけどどうだろうか?
1と3が実現すればCSVファイルぐらいは一発で読めると思う。
0009デフォルトの名無しさん2005/11/09(水) 00:44:45
別に>>8ぐらいは難しくはないだろ?
どこでもやってるし。
0010デフォルトの名無しさん2005/11/09(水) 00:48:15
>>9
>どこでもやってるし
じゃあ、ソース頂戴。
俺、文字列処理得意じゃねぇんだ。
0011デフォルトの名無しさん2005/11/09(水) 00:51:30
どっかにあるとは思うんだよね。
コンパイラとか作ってる奴等の集まりなら
定石みたいのがたくさん転がってそうだけど。
英語読むのも、本読むのも、正直好きじゃねぇし。
しかも、そういう奴等と波長があわないらしく、人生において会ったことが無い。
0012デフォルトの名無しさん2005/11/09(水) 00:55:04
しかも、これって字句解析の初歩みたいなとこだろ。
そこだけくださいってのもねぇ・・・
0013デフォルトの名無しさん2005/11/09(水) 03:07:25
その程度の処理ならboost::regexで充分だろ。
boost::spiritすらいらない。
0014デフォルトの名無しさん2005/11/09(水) 07:03:18
>>13
見つけてきた。
http://www.kmonos.net/alang/boost/classes/regex.html
でも、これ>>8を実装するに当たっては役に立つかもしれないけど、
単体だとそれほど恩恵ないでしょ。
>>8の内容は全部同時にやってこそ意味があるんだよ。
0015デフォルトの名無しさん2005/11/09(水) 07:38:14
だからstringstreamを使えと。
streamのメソッドとstringのメソッド両方使えば全部出来るだろうが。
0016デフォルトの名無しさん2005/11/09(水) 07:51:25
boost::tokenizerも使えないか?
http://www.kmonos.net/alang/boost/classes/tokenizer.html
0017デフォルトの名無しさん2005/11/09(水) 19:31:46
>>15-16
適当に答えてねぇ?
>>8の内容を全部同時に満たせなきゃ駄目なんだよ。
わかってる?

CSVファイルなんかで、改行が入ってるとダブルコーテーションに囲まれてる文字列は
改行にデリミタ適用したくないでしょ?

それと一度に読むことしかできないと、文字列の途中でデリミタを変更したりとかできないでしょ?

そういうことよ。
0018デフォルトの名無しさん2005/11/09(水) 19:36:33
>>17
std::stringstreamやboost::tokenizerを内部的に使って、
>>8を満たすものを作るのは駄目か?
0019デフォルトの名無しさん2005/11/09(水) 19:38:20
一から自分で作ったほうが早い(苦笑)
0020デフォルトの名無しさん2005/11/09(水) 19:49:58
ていうかその程度なら、標準とboostだけで既に作ってる奴が
数千人はいるだろ、国内だけでも。

俺が作ったオナニー言語にすら備わってるぞw
0021デフォルトの名無しさん2005/11/09(水) 20:37:51
C++の思想は便利なネジ・クギを用意して、後は自由になんでも
作ってくださいってことなのに、
特定の用途にしか使えないクソ仕様ライブラリが欲しいって奴は、
そもそもC++使うなと。
アホな特定用途に特化したスクリプト言語や環境使ってシコシコ
してろ馬鹿。
0022デフォルトの名無しさん2005/11/09(水) 21:51:14
>>21
言語障害?
0023デフォルトの名無しさん2005/11/10(木) 16:01:36
CSV読み込みたいのなら、CSV読み込みクラス作るべきだな。
どうせCSV以外に使わないんだから。
0024デフォルトの名無しさん2005/11/10(木) 20:20:55
あれもこれもと欲張るといいこと無いからな。特に、>>1みたいな奴にとっては。
0025デフォルトの名無しさん2005/11/10(木) 22:18:56
>>8の内容を実装してみるとわかるけど、boostなんて役に立たない。
できるとかレスつけてた奴って>>1よりレベル低いね。
0026デフォルトの名無しさん2005/11/10(木) 22:46:07
>>25
最低レベルの人間乙
0027デフォルトの名無しさん2005/11/10(木) 22:50:07
>>26
やらないで言ってるでしょ。
boostは>>8の内容の実装には糞の役にも立たない。
0028デフォルトの名無しさん2005/11/10(木) 22:55:14
>>8 の内容だけなら tokenizer で普通に実装できる。

>>17 で行ってる途中でデリミタを変えるのは難しいかもしれないけど。
0029デフォルトの名無しさん2005/11/10(木) 22:57:21
>>28
カッコ内でかこまれた部分のデリミタの回避はどうやるの?
0030デフォルトの名無しさん2005/11/10(木) 22:59:05
>>29
escaped_list_separator のコンストラクタの第3引数
0031デフォルトの名無しさん2005/11/10(木) 23:00:41
>>30
tokenizerでできるんじゃないの?
0032デフォルトの名無しさん2005/11/10(木) 23:02:36
>>30
escaped_list_separator は tokenizer ライブラリの一部。
tokenizer の第1テンプレート引数に使う。
0033デフォルトの名無しさん2005/11/10(木) 23:03:40
>>30
ああ、突っ込むのね。
変なクラスの使い方してんなぁw
0034デフォルトの名無しさん2005/11/10(木) 23:14:24
http://boost.cppll.jp/HEAD/libs/tokenizer/escaped_list_separator.htm
これって中断と再開できんの?
0035デフォルトの名無しさん2005/11/10(木) 23:25:32
>>28
>>8の内容が全部できるなら、中断したときにデリミタを変更して再開すればできるんじゃないの?
なんでできないの?
0036マイク ◆yrBrqfF1Ew 2005/11/10(木) 23:57:30
それじゃあこのスレッドはここらへんから
地球シュミレータで動かしている地球をシュミレーションするソフトを
なんとなく真似して開発してみるスレッドに変わったわけか。
0037デフォルトの名無しさん2005/11/11(金) 01:19:40
>>36
シュミレータって何?
0038デフォルトの名無しさん2005/11/11(金) 08:05:31
シュミレータ(笑)
0039デフォルトの名無しさん2005/11/11(金) 18:56:40
そこらのおっさんなら間違えてもしょうがないが、
プログラマーには間違って欲しくないな。
0040デフォルトの名無しさん2005/11/11(金) 19:21:20
実際の発音はシュのほうが近いよ
ミじゃないけどね
0041デフォルトの名無しさん2005/11/11(金) 19:46:04
>>40
はぁ?
0042デフォルトの名無しさん2005/11/11(金) 19:54:05
実際の発音もシミュ(スィミュ)だと思うぞ
0043デフォルトの名無しさん2005/11/11(金) 19:55:44
スィなんて表記は正しい日本語じゃないよ
おまえら脳みその替わりに苺か薔薇でも詰まってるんじゃね?
0044デフォルトの名無しさん2005/11/11(金) 21:05:51
バラ肉でした(爆)
0045デフォルトの名無しさん2006/02/22(水) 03:05:10
boost::spilit で >>8 はできる。
0046デフォルトの名無しさん2006/03/18(土) 09:16:26
マジレスしちゃだめw
0047デフォルトの名無しさん2006/04/26(水) 06:47:57
>>45
かなり前のレスだけど4と5ってどうやってやればいいの?
■ このスレッドは過去ログ倉庫に格納されています