- 1 名前:名前は開発中のものです。 mailto:sage [2016/01/05(火) 23:44:29.77 ID:fkNSYSkc.net]
- Cを習得した程度のスキルでも、ゲームのグラフィックを比較的容易に描画する事のできる、
「DXライブラリ」に関するスレッドです。 DXライブラリに関するテクニックなどの情報交換などを行う事で、 多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。 【公式】 homepage2.nifty.com/natupaji/DxLib/ 【関連スレ】 C/C++ゲーム製作総合スレッド Part7 [転載禁止](c)2ch.net peace.2ch.net/test/read.cgi/gamedev/1420939171/ ゲームプログラムなら俺に聞け32(c)2ch.net peace.2ch.net/test/read.cgi/tech/1441693570/ ●DXライブラリではなくDirectXの質問ならこっちへ 【C++】 DirectX初心者質問スレ Part39 【C】 [転載禁止](c)2ch.net peace.2ch.net/test/read.cgi/tech/1418438785/
- 437 名前:名前は開発中のものです。 mailto:sage [2018/06/17(日) 03:19:14.87 ID:z6C9dnYv.net]
- ええ、公開されてますね(困惑。
- 438 名前:名前は開発中のものです。 mailto:sage [2018/06/30(土) 00:04:57.83 ID:QTwf7deE.net]
- ジオメトリシェーダとハルシェーダが使えないのは別に文句ないけど
technique使用不可なのは地味にイライラする
- 439 名前:名前は開発中のものです。 mailto:sage [2018/07/04(水) 18:03:25.24 ID:GKLylxjM.net]
- DXライブラリのシェーダーまわりはそれだけじゃないつーか
DirectX9とDirectX11でコーディング方法が違ったり、 Android版ではそもそもシェーダー使用不可能だったり、 2Dスプライトの表示にシェーダー使えなかったりして あれもないこれもないって感じになっちゃうなぁ。まあそういうのがいらない人向けなんだろうけど
- 440 名前:名前は開発中のものです。 mailto:sage [2018/08/09(木) 02:58:08.73 ID:w7j+HefU.net]
- VRoidのVRMファイルの読込に対応しようとしたらマテリアルが物理レンダのパラメータで
DXライブラリだとVRMファイル読込むのは難しそうだ 物理レンダ対応してくんないかな
- 441 名前:名前は開発中のものです。 [2018/08/11(土) 12:47:56.79 ID:RmGfKRPO.net]
- DxLibのシェーダーのSamplerで、テクスチャごとに違うフィルタリングモードでSamplerを作りたいんだけど無理かな?
プログラム側でSetDrawModeで設定したフィルタリングモードになっちゃうんだけど
- 442 名前:名前は開発中のものです。 mailto:sage [2018/08/11(土) 13:37:54.92 ID:mdLblHI4.net]
- 未だにMMDとメタセコだから
VRMファイルはナウでヤングすぎる
- 443 名前:名前は開発中のものです。 mailto:sage [2018/08/11(土) 20:00:03.15 ID:0BvUQheC.net]
- DXライブラリは時代遅れすぎてどうにもならない
- 444 名前:名前は開発中のものです。 mailto:sage [2018/08/11(土) 20:48:54.21 ID:V6BT8wZU.net]
- すぎてってほどではないと思う、まだ
- 445 名前:名前は開発中のものです。 mailto:sage [2018/08/12(日) 00:15:54.84 ID:DLCHw2GI.net]
- 時代に遅れすぎた理由は、アセットストアがないせいだな
いまだにアセットがひとつもないのは、アセットおじさんも真っ青だわ
- 446 名前:名前は開発中のものです。 mailto:sage [2018/08/12(日) 09:49:59.00 ID:n2rCCHLV.net]
- お前は何を言ってるんだ
- 447 名前:名前は開発中のものです。 mailto:sage [2018/08/15(水) 02:14:13.34 ID:I59D2OX6.net]
- DXライブラリでようやく地面モデルと線分の当たり判定つけられた
そこに主人公モデルの位置を同じにした まだモーションつけてないから 主人公が棒立ちのまま移動した 坂道登れるだけで感動した(小並感
- 448 名前:名前は開発中のものです。 mailto:sage [2018/08/20(月) 12:57:34.10 ID:HuW2CUtM.net]
- 日記ですか
- 449 名前:名前は開発中のものです。 mailto:sage [2018/08/26(日) 11:59:52.50 ID:Oz7phZC4.net]
- 日記の続きまたー?
- 450 名前:名前は開発中のものです。 mailto:sage [2018/08/29(水) 12:37:25.65 ID:8rKJxZI3.net]
- DXライブラリって世間的にはゲームエンジン扱いなのな
- 451 名前:名前は開発中のものです。 mailto:sage [2018/08/30(木) 08:01:34.88 ID:w5Eoz0MG.net]
- >>439
多分そこが一番誤解されやすいとこだよな。 基本はDirectXで自前で全部作りたいけれどめんどくさい設定周りだけはやって欲しい人向けのお助けラッパーだよね。 そこにDirectX以上の機能はいらないし。今の状態で十分。
- 452 名前:名前は開発中のものです。 mailto:sage [2018/08/30(木) 14:26:51.75 ID:83gEz2C2.net]
- 「各種ゲーム用エンジン紹介」みたいなところで触れられる分には「そんなもんか」って感じだけど
「ゲームエンジンを使っている」カテゴリの中にDXライブラリ製ゲームが含まれるとあれ?って思う 自分でも基準がよく分からない
- 453 名前:名前は開発中のものです。 [2018/08/31(金) 10:19:13.96 ID:MuDS6z7U.net]
- 教えてほしいんですが
int fp = FileRead_open("csvファイル"); この場合、fpにはcsvがそのまま入ってるという解釈でいいですか? つまり、ifstream ifs(fp);が可能になるのかが知りたいです。 ifstream ifs(FileRead_open("csvファイル"));は無理ですか? なんでこんな面倒なこと考えるかというと、 archive化したファイル内のcsvを読みたいんです。
- 454 名前:名前は開発中のものです。 [2018/08/31(金) 10:29:38.50 ID:MuDS6z7U.net]
- >archive化したファイル内のcsvを読みたいんです
厳密に言いますと、 ifstream ifs();で読み込んで string buf[要素数]; while(ifs && getline(ifs,buf[line])){ line++; } とbuf[]に一旦、そのままcsvの中身を格納したいんです。 普通なら、 ifstream ifs(csvファイル);で問題ないじゃないですか? でも、そのcsvがarchiveしたファイルから読み込む場合 ifstream ifs(csvファイル);だと読み込みません。 そこでFileRead_openを使うわけですが、 自分はどうしても ifstream ifs(csvファイル); string buf[要素数]; while(ifs && getline(ifs,buf[line])){ line++; } の流れで利用したいんです。 なので、ifstream ifs(csvファイル);に来る前に FileRead_openを使い終わらせ、 あとはFileRead関数系を使わなくて済む様にしたいんです。 、、伝わりますか?僕の言いたいこと。。
- 455 名前:名前は開発中のものです。 [2018/08/31(金) 23:18:37.63 ID:8gsP87Iw.net]
- archive化したテキストファイルは改行コード\nが消えたバイナリファイル化してるから
最初にファイルサイズを計って1行ではなく全部をchar[filesize]に読み込むしかないんじゃない?
- 456 名前:名前は開発中のものです。 [2018/09/01(土) 06:52:39.05 ID:RWsTVHZH.net]
- >>444
>
- 457 名前:archive化したテキストファイルは改行コード\nが消えたバイナリファイル化してるから
え、それ本当ですか? >最初にファイルサイズを計って1行ではなく全部をchar[filesize]に読み込むしかないんじゃない? すみません、もう少し具体的に教えてください! [] - [ここ壊れてます]
- 458 名前:名前は開発中のものです。 mailto:sage [2018/09/01(土) 07:02:25.87 ID:BLfEX+5a.net]
- >>445
ファイルサイズが1000なら char t_data[ 1000 ] にファイルのデータを格納する で、後は添え字で任意のデータにアクセスする
- 459 名前:名前は開発中のものです。 mailto:sage [2018/09/01(土) 11:30:13.35 ID:ghpuXsiR.net]
- FileRead_scanfじゃいかんの?
- 460 名前:名前は開発中のものです。 [2018/09/01(土) 14:32:20.17 ID:PENKT9BN.net]
- >>445
2chは長い行で書き込めないのよ string all; char* path = "./hello.csv"; int size = (int)FileRead_size( path ) ; // 1char = 1byte char* buffer = new char[size]; int id = FileRead_open( path, false ) ; FileRead_read( buffer, size, id) ; all = buffer; // copy to string delete[] buffer; FileRead_close(id); // allをcsvのrow(\r\n)とcol(,)でパースする。csv書式の不正チェックとか丁寧にやると長くなるので以下適当 string csv[ROW][COL]; string tmp = ""; int x = 0; int y = 0; for(int i=0; i<all.length(); i++){ char c = all[i]; if(c == ',') { csv[y][x] = tmp; tmp = ""; x++; } else if (c == '\n') { // 本当は\r\nの2つで改行なんだけど csv[y][x] = tmp; tmp = ""; x = 0; y++; } else { tmp += c; } } csv[y][x] = tmp; // 最後の一個 文字列(string)から数値(intとか)に変えるときはatoiじゃなくてstrstreamだかを使うとよい
- 461 名前:名前は開発中のものです。 [2018/09/01(土) 14:44:21.63 ID:PENKT9BN.net]
- 追記
csvファイルの最後に無駄な改行がついてたりすると配列のサイズ超えたりしがちなので注意
- 462 名前:名前は開発中のものです。 [2018/09/01(土) 14:53:41.96 ID:PENKT9BN.net]
- さらに追記
csvの最後ってヌル文字で終わってないだろうから自分で足したほうがいいかも string all; char* path = "./hello.csv"; int size = (int)FileRead_size( path ) ; // '\0'が無い文字列char*をstringに渡すと長さ不定でまずい char* buffer = new char[size+1]; buffer[size] = '\0'; int id = FileRead_open( path, false ) ; FileRead_read( buffer, size, id) ; all = buffer; // copy to string delete[] buffer; FileRead_close(id);
- 463 名前:名前は開発中のものです。 mailto:sage [2018/09/02(日) 02:13:46.38 ID:qrAMxSjg.net]
- Cは文字列処理が弱いからCSVParserを書くのも一筋縄にはいかんよ
- 464 名前:名前は開発中のものです。 mailto:sage [2018/09/03(月) 04:26:51.22 ID:8cSGEO2Y.net]
- そしてCSVの仕様を調べて、予想以上に面倒くさいことを知る
- 465 名前:名前は開発中のものです。 mailto:sage [2018/09/03(月) 23:58:20.90 ID:JgPc/ZW2.net]
- 「,」じゃなくてTABスペースで区切るとか
「'座標(x,y)'」みたいにシングル・ダブルクォーテーションで囲む「,」を含むセルだとか CSVも奥が深い
- 466 名前:名前は開発中のものです。 mailto:sage [2018/09/04(火) 02:54:31.44 ID:jVVbpFTb.net]
- ヘッダにコメントにセル内改行に空白セルに非固定列数に…
あれやこれや対応させると面倒なので、仕様はExcel出力版に決めうちとかしちゃう それでいてExcel経由でもやり方によって微妙に違ったりするけど
- 467 名前:名前は開発中のものです。 mailto:sage [2018/09/04(火) 12:16:43.15 ID:qFImTgae.net]
- Excel出力でも小数点の区切りがカンマな国とかあって地獄絵図なんだよなぁ
- 468 名前:名前は開発中のものです。 mailto:sage [2018/09/04(火) 12:18:12.23 ID:qFImTgae.net]
- 日本語がおかしかった
「小数点ががカンマ」ね
- 469 名前:名前は開発中のものです。 mailto:sage [2018/09/04(火) 12:18:39.57 ID:qFImTgae.net]
- 死にたい・・・
- 470 名前:名前は開発中のものです。 mailto:sage [2018/09/04(火) 18:21:03.16 ID:87Ucq8PA.net]
- ワロタw
そもそも「小数点の区切りがカンマ」って別に変な日本語じゃないと思うけど?
- 471 名前:名前は開発中のものです。 mailto:sage [2018/09/05(水) 02:54:47.49 ID:6fPtkJ/i.net]
- 「(整数と)小数の区切り記号がカンマ」か
「小数点という区切り記号がカンマ」かってとこじゃない? まあいずれにせよ通じる内容、普通に見落としちゃうレベルではある
- 472 名前:名前は開発中のものです。 [2018/09/05(水) 23:25:30.03 ID:jdPHLPpw.net]
- もう>>442は投げ出しているだろうよ
- 473 名前:名前は開発中のものです。 [2018/09/07(金) 06:49:13.67 ID:SP/YWN4v.net]
- >>460
投げ出していません。 >>448さんのせっかくのソースがちょっと複雑で、、、 言葉でなにをしなければならないのか、アドバイスほしいです。 要は、 archive化したテキストファイルは改行コード\nが消えたバイナリファイル化してるから 普通にCSVを開くプログラムを書いていると archive後、正常に読み込まないってことですよね? ということは、バイナリ状態のCSVを読み込むプログラム文を書けってことですか? でも、それだとビジュアルスタジオ上のデバッグプレイじゃ バイナリ化してないcsvなんでエラーが起きますよね? だからすごく困っています。 どうすればいいのか
- 474 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 12:19:35.09 ID:knV8JfdB.net]
- >>461
>>でも、それだとビジュアルスタジオ上のデバッグプレイじゃ >>バイナリ化してないcsvなんでエラーが起きますよね? 何を言っているのか分からん デバッグモードだろうがバイナリ形式のファイルを読み込むプログラムを書けばバイナリ形式で読み込むし、 テキスト形式を読み込むプログラムを書けばテキスト形式で読み込むでしょ
- 475 名前:名前は開発中のものです。 [2018/09/07(金) 12:41:21.71 ID:SP/YWN4v.net]
- >>462
えっと、自分の知識不足かもしれませんが 普通に数字と「,」だけが詰まったcsvファイルを用意していても バイナリ形式で読むプログラムを書いていれば バイナリ形式で読むってことですか? バイナリ形式で読むプログラムを書いた場合は 用意するファイルもバイナリ形式で保存されたファイルじゃないと ダメなのかなと思っているんですけど。
- 476 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 13:34:50.10 ID:knV8JfdB.net]
- >>463
そもそも上の方に書いてあった 「バイナリ形式は改行が削除される」っていうのが表現として適切じゃないな 改行コードを改行として認識するのがテキスト形式 改行コードをそのまま文字の羅列として認識するのがバイナリ形式 テキスト形式のファイルをバイナリ形式で読み込んだら そのテキスト内の改行コードがそのまま文字列として読み込まれるだけ
- 477 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 13:46:37.16 ID:2W2TZVJf.net]
- 1 複数データを一つにまとめたい(暗号化したい)
2 読み込みプログラム(csvパーサー?)は既存のものをそのまま流用したい ってことなのかな…… >>444,>>446,>>448のキモは、DXアーカイブファイルを一本のchar配列に読み込む(バイナリデータとして扱う)という部分なので、 結局DXアーカイブもifstreamも関係なくて、char配列内のバイナリデータを自力で解析できるかという話になる パソコンで使うデータは全てバイナリデータと言えるので、csvだろうが音声だろうがDXアーカイブファイルだろうが全てバイナリ形式で読み込める
- 478 名前:名前は開発中のものです。 [2018/09/07(金) 14:40:43.77 ID:SP/YWN4v.net]
- >>462
>パソコンで使うデータは全てバイナリデータと言えるので、 >csvだろうがDXアーカイブファイルだろうが全てバイナリ形式で読み込める その理論だとcsvや音声などの外部素材データをDXarchiveファイルにしたとしても、 archiveする前、つまりはビジュアルスタジオのプロジェクト上で ビルドして正常に機能してるプログラムそのままでも archive後も正常に機能するはずではないですか? もう少し具体的に言いますと>>442で説明しきれなかったんですが ifstream ifsを利用して、csvの中の数値を配列に入れ込むプログラムを 自分は書いてまして、そのプログラムで問題なく動いてるゲームがあるんですが、 それの完成後にreleaseビルドして、使用してるサウンドやcsvの素材は フォルダごとarchiveファイル化したんですよ(配布する場合は皆さんそうしますよね?。 そしてexeファイルを実行したところ、画像やサウンドは正常に読み込むんですが、 csvだけ正常に読み込んでくれないんです。 エラーになるというよりは、数値を正しく読み込んで無いようで、配列を利用した背景画像が バグります。 例えばそこで素材をarchiveファイル化せずに、素材が入ったフォルダをそのままで 利用すると画像やサウンドはもちろん、csvも正常に読み込み、ゲームも正常に動くんです。 なので、私は、こう思ったわけです。 「csvについては、archiveファイル化すること前提にしたプログラムを組まないと 正しく読めないのかな」と。 それで、「FileRead_open」を使わないとダメなのかなと。 archiveファイルのcsvを読み込む場合、FileRead_openを利用しろと言われたことがあるので。 でもあなたの話を聞いてたら、違うのかな、とか。。。
- 479 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 15:06:25.39 ID:knV8JfdB.net]
- >>466
アーカイブは言わば「バイナリ形式」のファイルでしょ? 「テキスト形式のファイルを読み込むプログラム」でバイナリ形式のアーカイブを読み込もうとしてるからバグってるんじゃない? 123 456 789 上記のファイルがあったとして「1行読み込む」関数を使った場合 「123」「456」「789」って読み込むだろうけど アーカイブ化(バイナリ形式)すると「1行読み込む」関数を使うと 「123\r\n456\r\n789」みたいに 一つの文字列として全部読み込むから数値が正常に読み取れてないと思うんだけど
- 480 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 15:15:20.85 ID:2W2TZVJf.net]
- まず、DXアーカイブファイルは全部のファイルを無理矢理合体&暗号化した完全独自形式のものなので、基本的にDXライブラリが用意した専用の関数でしか読み込めない
画像やサウンドはDXライブラリの読み込み関数を使うから、何もせずともDXアーカイブファイルから読み込めるようになってるんだよ LoadGraph等には、内部的にFileRead_openが入ってるので、元のフォルダだろうとアーカイブだろうと読み込める ただ、暗号化されてない場合に限り、小細工を弄すればバイナリファイルとして直接読める。(フォーマットを理解して自力でポインタ移動する必要がある) 上でみんなが説明してるのはこれ これまでのやり取りを見る限り、バイナリファイル云々は今の君の知識で理解するのはたぶん無理なので、DXライブラリの関数使って地道にがんばったほうがいい というかなぜFileRead_openを拒むのかがわからない……
- 481 名前:名前は開発中のものです。 [2018/09/07(金) 15:15:27.11 ID:SP/YWN4v.net]
- 呼び出し LoadData(int,int,string);//縦、横、csvファイルパス
void LoadData(int y,int x,string s){ m_line = y; m_col = x; int line = 0;int count = 0;int sum = 0;int nokorinoketa=0; ifstream ifs(s); string buf[3000]; Map.resize(m_line);//resizeで行数を決める for(int i = 0; i<m_line; i++){Map[i].resize(m_col);}//resizeで各行の列数を決める while(ifs && getline(ifs,buf[line])){line++;} for(int line=0; line<y; line++){ for(int col=0; col<x; col++){ if(col < x-1){ sum = buf[line][count]-48; count++; while(isdigit(buf[line][count])){ sum = sum*10 + (buf[line][count])-48; count++;} Map[line][col] = sum;//Noが格納 count++;} if(col == x-1){//最後の数字 nokorinoketa = buf[line].size()-count; sum = buf[line][count] - 48; while(nokorinoketa > 1){ count++; sum = sum*10 + (buf[line][count])-48; nokorinoketa--;} Map[line][col] = sum;//Noが格納 }} count=0;}}
- 482 名前:名前は開発中のものです。 [2018/09/07(金) 15:22:35.20 ID:SP/YWN4v.net]
- 行数制限のせいで見づらいソースになってますが、ご了承ください。
処理内容は引数で配列の縦と横の値と、csvファイルのパスを受け取り、 まず、bufに全部入れてから、map配列に入れていく感じです。 呼び出しはLoadData(4,4,"h/m/data.csv");みたいな感じで書きます。 archiveファイル化しなければ、これで正常に動きます。 >>468 >基本的にDXライブラリが用意した専用の関数でしか読み込めない >画像やサウンドはDXライブラリの読み込み関数を使うから、 >何もせずともDXアーカイブファイルから読み込めるようになってるんだよ 納得です。それを聞きたかったんです。わかりやすいです。 >>というかなぜFileRead_openを拒むのかがわからない…… 拒んでいません。 一応、FileRead_openを>>469のプログラムに組み込んで動くようにしたんです。 問題なく、動きます。それはプロジェクト上で、ですが。 で、やっぱり外部ファイルをarchiveしたら、そのプログラムではうまくcsvを読み込まないんです。 FileRead_openを組み込んだのに、FileRead_openを組み込む前と同じバグの状況です。
- 483 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 15:27:55.83 ID:2W2TZVJf.net]
- だからFileRead_readやFileRead_getsで読むんだぞ
もう一度リファレンスを熟読するんだ
- 484 名前:名前は開発中のものです。 [2018/09/07(金) 15:28:30.17 ID:SP/YWN4v.net]
- あ、ちなみに>>469で利用しているMap配列の要素数は決めておらず、
vector<vector<int>>Map;と宣言しており、 第一、第二引数を受け取ってから要素数を決定させています。
- 485 名前:名前は開発中のものです。 [2018/09/07(金) 15:35:23.97 ID:SP/YWN4v.net]
- >>471
ちゃんとFileRead_readで読むプログラムに修正しました。 具体的には、 ifstream ifs(s); while(ifs && getline(ifs,buf[line])){line++;} の箇所を int fh = FileRead_open(s.c_str()); while(fh && getline(fh,buf[line])){line++;} と変更するだけです(この場合は最後にFileRead_close(fh);してます。 これで問題なくないですか? 実際に、visualstudioのプロジェクト上でビルドすると 正常に動いています。 なのに、releaseビルドして、素材ファイルをarchiveした途端 csvは正常に読み込まないんです、、、、ほんと参ってます。。 なにが悪いんでしょう?
- 486 名前:名前は開発中のものです。 [2018/09/07(金) 15:45:28.86 ID:SP/YWN4v.net]
- なぜ、FileRead_openを使ってるのに、
FileRead_openを使ってないときのバグが出るんでしょうか。 でも、archive化しなければ、FileRead_openを使ってるそれでも正常に動くのです。 引数でcsvファイルのパスを受け取っているのが問題なんでしょうか? でも、利用するcsvファイルがいくつもあるので呼び出し命令の引数でファイルを選択してやらないと 困るんですよね。 もちろん、引数では数値を受け取り、switchで数値ごとにcsvを選択させてもいいですが、、 でも引数が問題では無いとも思うんですよ、、、、、。 なんでなのか、もう何日も悩んでいます。 もしよかったら頭から数字,数字,.....というdataが入ったcsvを FileRead_openで開いて、配列に入れていくという シンプルなソースを書いてみてくれませんか? DXライブラリのリファレンスにはcsvを使ったものが載ってないんですよ、、 なので、見せてほしいです。それを理解して応用させたいので。 お願いします、ほんと凄く困っていまして、、、
- 487 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 15:48:35.98 ID:6e9JnvLB.net]
- それ逆じゃないのか?
- 488 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 17:09:17.90 ID:stA8I9vh.net]
- 良く分からんけど、こんな感じの事がしたいの?
void LoadData( int t_Width, int t_Height, std::string t_FileName ) { int t_FileHandle = FileRead_open( t_FileName.c_str() ); int t_FileSize = FileRead_size( t_FileName.c_str() ); std::vector< std::vector< int > > t_MapDataVec; int t_LoadNum = 0; char t_Char; //マップの配列を確保 t_MapDataVec.resize( t_Height ); for( int i = 0; i < t_Height; i++ ) { t_MapDataVec[ i ].resize( t_Width ); } //正常に1文字を読み込める間、繰り返す while( ( t_Char = FileRead_getc( t_FileHandle ) ) != -1 ){ if( isdigit( t_Char ) != 0 ){ int t_Sum = 0; do{ t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); t_Char = FileRead_getc( t_FileHandle ); }while( isdigit( t_Char ) != 0 ); t_MapDataVec[ t_LoadNum / t_Width ][ t_LoadNum % t_Width ] = t_Sum; ++t_LoadNum; } } FileRead_close( t_FileHandle ); }
- 489 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 20:11:51.17 ID:stA8I9vh.net]
- >>473
int fh = FileRead_open(s.c_str()); while(fh && getline(fh,buf[line])){line++;} ん? FileRead_readとかのDXライブラリ関数じゃなくて getlineが使われてる様だが? 例えばabc.csvを他のファイルと纏めて Archive.dxaっていうアーカイブにした場合、 std::ifstream t; t.open( "abc.csv");とかしたって読み込まないよ そんなファイル無いんだから DXライブラリ用のArchive作ってるのに それを通常の入出力関数で読み出そうとしてるのがバグの原因だよ
- 490 名前:名前は開発中のものです。 [2018/09/07(金) 22:11:13.47 ID:SP/YWN4v.net]
- >>477
>getlineが使われてる様だが? int fh = FileRead_open(s.c_str()); えっと、まずこれをした時点で、 ファイル内の文字がfh
- 491 名前:に入ってると思ってるんで
それをgetline(fh,buf[line]))するわけですから 問題ないかと思っているんですが、、私、なにか勘違いしてるのでしょうか、、 >t.open( "abc.csv");とかしたって読み込まないよ >そんなファイル無いんだから これはどーいうことですか?パスの表記の話でしたら ここでは割愛しただけですので実際は頭のフォルダとファイル名と入力してます。 t.open( "フォルダ名/abc.csv");な感じで。 、、そー言う問題ではなくて、archiveした場合 "abc.csv"というファイル名ではなくなるという話ですか?? >>476 まさか、これ、自分と同じことやってるプログラムですか? まさかこんなに短くできますよ、とかじゃないですよね? すごく興味深いのでちょっと処理をじっくり読ませて頂きます。 [] - [ここ壊れてます]
- 492 名前:名前は開発中のものです。 [2018/09/07(金) 22:15:41.50 ID:SP/YWN4v.net]
- >>477
あ、今気づきました、 自分FileRead_read使ってないですね、、、 FileRead_openとFileRead_readと一緒くたに考えてソース作ってしまってました。 FileRead_openもDXライブラリの関数でそれで開いてるから DXライブラリArchiveしたファイルを開く問題はすでにクリアしたと。
- 493 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 22:26:57.73 ID:2W2TZVJf.net]
- 薄々気づいていたけど、あまりにも基本的なことがわかってなさすぎる
勘違いですらなくて、全くわかってない int fn はただのハンドル(識別番号)だし、ファイルオープンと読み込みは違うし、アーカイブファイルについても全くわかってないし、その知識でバイナリファイルを理解できるわけがない あんま厳しいこと言いたくないけど、拾ってきたコピペを組み合わせて作ろうと思わず c++の基本から勉強して、一文字ずつ自分で打ち込んだほうがいい
- 494 名前:名前は開発中のものです。 [2018/09/07(金) 23:04:19.42 ID:SP/YWN4v.net]
- >>476
すみません、今まで使ったことない関数や表現がありますのでよかったら教えて頂けませんでしょうか、、 自分は今成長したいんで、非常に関心がありますのでぜひともお願いします。 質問1、 if( isdigit( t_Char ) != 0 ) ここの意味は、isdigitで「t_Charの(頭が)空じゃ無いなら」の認識で正解ですか? 判定関数のisdigitを利用したことないもので、、 質問2、 もし1の私の認識が当たっているとすれば do{ t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); t_Char = FileRead_getc( t_FileHandle ); }while( isdigit( t_Char ) != 0 ); ここの条件式は、t_Charの中の文字を読み進めながら 「空の領域になるまで」という理解になりますが、それで間違いないですか? 質問3、 t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); すみません、ここのt_Char - '0'の理解ができてないんですがこれはなにを意味していますか? 推測では「,」の場所を判断するために記載していると思うのですが 「- '0'」は文字の0と文字の「,」は同義語ですか? t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); はなにをしているのか 解説して頂けませんでしょうか、、 4、究極に理解が足りず困っているのが t_MapDataVec[ t_LoadNum / t_Width ][ t_LoadNum % t_Width ] = t_Sum; です。 本当に、これは初めて見た表現なんですが t_LoadNum / t_Widthでなぜその時の行数の添字が割り出せるのか、 t_LoadNum % t_Widthでなぜその時の要素数の添字が割り出せるのか お願いします、解説を、、、、すごく関心があります。そもそも、誰もが記載するであろう、 for(int line=0; line<y; line++){ for(int col=0; col<x; col++){ の式が無いプログラムで、二次元配列を回している様子が 自分の想像限度外で、もうなにがなんだか。 t_LoadNumの値だけをインクリメントしてるだけでなぜ二次元配列をすべて回すことが可能になるんですか?
- 495 名前:名前は開発中のものです。 [2018/09/07(金) 23:12:10.86 ID:SP/YWN4v.net]
- >>480
経験が浅いのは認めます、、 特に外部ファイルをいじるのと、archiveファイルについてはほんと理解度が低いです。 でも、ここでそう指摘されることも、 また私が質問させていただくことも自分が成長するひとつの事柄にはなりませんでしょうか、、 ただコピペしたいのでは無く、ソースを理解したくて>>481でも質問させて頂きました。 未熟者なのは認めます、疑問に思ったことをまず自分で検索で調べてみての質問です。 教えて頂けないでしょうか。。 正直、DXライブラリのアーカイブを使わなければ ゲームは動くのですが、DXライブラリのアーカイブでつまずいてしまっています。 releaseビルドしたあとにバグ
- 496 名前:ナ遊べないのでほんと辛いのです。 []
- [ここ壊れてます]
- 497 名前:名前は開発中のものです。 [2018/09/07(金) 23:21:53.72 ID:SP/YWN4v.net]
- >>480
C++を熟知せずとも、便利な関数のおかげで 手軽にゲームを作れる、それがDXライブラリの良さであり、 短所でもあるのだと思います。 画像を描画するのも関数ひとつです。それで表示できるので つまずきませんでした。 でもmap情報を外部ファイルにして読むことは、つまずています。 厳密にはアーカイブしなけば読むことは成功していますが、、 「お前は基本がなっていない」と言われたらそうなんですが でもチュートリアル的なブログや参考書でも、ひとつひとつ完全に理解しようとすると挫折するから 今の自分ではわからなくてもとりあえずそうなんだという精神で進めていきましょう的な 助言も多かったです。ぶつかるたびに覚えていけばいい的な、、違いますでしょうか? ファイルを扱う、バイナリ形式とかは、初めてです。なのでソースも見苦しいです。 でもそんな私でも>>476のプログラムはすごく魅力的だということがわかるんです。 学びたいんです、、簡単な解説でいいので、お願いできませんか?
- 498 名前:名前は開発中のものです。 mailto:sage [2018/09/07(金) 23:54:23.29 ID:VUsIud2k.net]
- 長い。
【1・2】isdigitが分からないならisdigitについて調べれば? 【3】教科書の最初に載ってるはずだが「'0'」は0という文字そのものを表す 【4】適当に数字を入れて計算してみれば?
- 499 名前:名前は開発中のものです。 [2018/09/08(土) 00:37:34.88 ID:DgEMMqli.net]
- >>484
【4】適当に数字を入れて計算してみれば? これ、今やってるんですが、目から鱗です、、、 すごい、添字の回し方、こんなシンプルな表現方法がったなんで すごい!
- 500 名前:名前は開発中のものです。 [2018/09/08(土) 00:38:42.99 ID:DgEMMqli.net]
- stA8I9vhさん、天才だ、、参考書やブログで見たことないですよ、
こんな回し方してる人。
- 501 名前:名前は開発中のものです。 [2018/09/08(土) 00:46:42.46 ID:DgEMMqli.net]
- >>481の4、まじでやばい質問でしたね。アホすぎる、というか
検証しろって感じですよね。ほんとすみません。 ただ、[ t_LoadNum / t_Width ][ t_LoadNum % t_Width ]では 配列の列数と添字とが同じ値だからこそできる計算式ですね。 ちぐはぐの場合は、やはり for(int line=0; line<y; line++){ for(int col=0; col<x; col++){ を使うしか無い。 ネットで見たことないのは、 配列の列数と添字とが同じ数にぶちこむケースがあまりないから ですね、、なんだそういうことか、、、
- 502 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 00:51:04.46 ID:zhYpFAkU.net]
- >>486
やり方としては定番だよ 初心者向けの記事とかだと説明しないだけで
- 503 名前:名前は開発中のものです。 [2018/09/08(土) 00:57:50.45 ID:DgEMMqli.net]
- >>488
はい、シンプルですごく驚きました。 それに、二次元配列の要素を回す場合は これが使えるのは両方の値が同じ場合だけですよね? 自分が要する配列は添字より列数が多い場合ばかりなので この方法は使えない。 要は>>476さんはソースの参考にということで 記載してくれたので、ちゃんと自分のやりたいことに 組み込めってことですよね。
- 504 名前:名前は開発中のものです。 [2018/09/08(土) 01:05:53.57 ID:DgEMMqli.net]
- でも少しでも認めて頂けると嬉しいのです。
初心者ですが、昨今ゲーム制作においてもっともポピュラーなUnityでは無く 人口が減少しつつあるC++やDXライブラリでゲームを作ろうとしてる私のこのヤル気を。 まあ、csvのarchiveファイルから読み込む云々でモチベ下がりましたけど なんで画像やサウンドみたくスムーズに利用できないのか、と なんら問題なく進められたのに。。 簡単な話、DXライブラリの関数に getline(識別番号,配列[]))の代わりになるものがあればよかったのに。 引数が違うじゃないですが、どれも。
- 505 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 01:09:04.45 ID:zhYpFAkU.net]
- し らんがな
ね ろ
- 506 名前:名前は開発中のものです。 [2018/09/08(土) 01:12:38.23 ID:DgEMMqli.net]
- >>491
この問題を考えているので寝ることができないです t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); これの ( t_Char - '0' ); はなにを表しているんですか? t_Char - '0'です。 なぜ、文字列の'0'を引く必要があるのか、知りたいのです。
- 507 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 01:18:28.37 ID:vg2kVoor.net]
- https://dixq.net/forum/viewtopic.php?f=3&t=20352
https://dixq.net/forum/viewtopic.php?f=3&t=20345 あっちの回答は当てにならないってか
- 508 名前:名前は開発中のものです。 [2018/09/08(土) 01:28:20.69 ID:DgEMMqli.net]
- t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); の意味や
'0'がなにを表しているのか検索しようにも 現状のワードだけで検索するのは無理ですよ。。 なぜ俺が長文のプログラムでしていることを たった一行にできているのか、さっぱりです。
- 509 名前:名前は開発中のものです。 [2018/09/08(土) 01:34:42.92 ID:DgEMMqli.net]
- >>476の処理なんですが
二行目のint t_FileSize = FileRead_size( t_FileName.c_str() ); をしたあと、変数t_FileSizeは一切使用されておりませんが ここでファイルのサイズを得る必要があるのはなぜですか? どなたかわかる方、解説おねがします。
- 510 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 02:39:16.41 ID:38R4ypyC.net]
- >>495
あぁごめんね FileSizeの部分は消して良いよ あとシングルクォートで囲んでるのは文字を示すよ C言語の基礎ね で、'0'~'9'までの文字コードの値は順に並んでいる事が保証されてるから '0'を引くと整数値に変換出来る '0' → 48 '1' → 49 '2' → 50 //以下略
- 511 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 02:50:26.67 ID:zhYpFAkU.net]
- まあ文字周りのの仕様から考えると決してC/C++的には正しくないんだろうけどな
やっちゃうよな
- 512 名前:名前は開発中のものです。 [2018/09/08(土) 03:32:28.47 ID:DgEMMqli.net]
- >>496
>FileSizeの部分は消して良いよ ありがとうございます、FileSize、なぜ読むのか検索したり情報読んだりで ずっと悩んでいました。必要無いんですね。 >'0' → 48 なるほど、"-48"を>>496さんは"-'0'"で表していたんですね。 勉強になりました。 ご迷惑かけまくって申し訳ありません。 あと、ひとつだけ質問させて頂いていいですか? FileRead_openでハンドルを取得したあと、 string型のbuf配列を作って、まずは一旦そこに全部を入れ込みたいんですが 「getline(fh,buf[line])」の様な感じで使えるDXライブラリファイル読み込み関数が 判断つきません。もしかして、無い感じですか? FileRead_getsを使って、 string buf[3000];  FileRead_gets( buf,3000, t_FileName ) ; とか、いけませんか? 私は、一旦buf[]にぶち込んで、 そのあとはもうDXライブラリ関数とか必要無しの状態にして buf[]の中を回して1文字を読み込んで二次元配列に格納していくって 処理をしたいのですが、、、、それが無理なら やっぱり、FileRead_getcをつかって 一文字ずつ読んで格納することを考えていこうと思いますが、、
- 513 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 03:46:12.30 ID:f8SOqHWR.net]
- >>498
何回か言われてたと思うんだけど FileRead_read関数を使えば良いんじゃないの?
- 514 名前:名前は開発中のものです。 [2018/09/08(土) 04:11:23.63 ID:DgEMMqli.net]
- >>499
DXライブラリのリファレンスページの 「FileRead_read」のサンプルのプログラムは 画像データの取り込みなので FileRead_read( Buffer, FileSize, FileHandle ) ; が配列に使えるのか、わからないのです。 int t_FileSize = FileRead_size( t_FileName.c_str() ); string buf[3000]; FileRead_read( buf,FileRead_size,t_FileName ); これでいけますか?
- 515 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 04:21:08.99 ID:f8SOqHWR.net]
- STLのstring?
それを3000個も用意する意味ないでしょ 配列やstringが何なのか分かってないとしか やるなら char t[ 3000 ]でしょ (要素数は3000から可変にすべきだけど) FileRead_read( buf,FileRead_size,t_FileName ); 何でファイルハンドル指定する第3匹数にstringをぶち込んでるの? 訳分からん事してるよ
- 516 名前:名前は開発中のものです。 [2018/09/08(土) 04:34:19.67 ID:DgEMMqli.net]
- >>501
あ、すみません。 間違えました。 int t_FileHandle = FileRead_open( t_FileName.c_str() ); int t_FileSize = FileRead_size( t_FileName.c_str() ); string buf[3000]; FileRead_read( buf,FileRead_size,t_FileHandle ); これです。 これなら問題ないですか?
- 517 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 04:57:08.51 ID:f8SOqHWR.net]
- string3000個もいらねーって言ってるだろーが!
バッファの先頭アドレスを指定する所にstringの実体を入れてるのも駄目だと思うけど あと夜遅くてPC使えないとかで手元に実行環境が無いんだ
- 518 名前:チたら
使える様になるまで待ってみては?当てずっぽでソースコードっぽいものを書かれても困る [] - [ここ壊れてます]
- 519 名前:名前は開発中のものです。 [2018/09/08(土) 05:41:44.22 ID:DgEMMqli.net]
- >>503
String型(文字列型)とchar型(文字型)と勉強したんで、 csvに入った長い文字列(3,12,43,34,0,32,2,....が数百並ぶとかザラです)を 入れるためにString型を用意したつもりです。 実際、エラーは出ずに今まで動いているのですが、問題になっている理由を 聞かせてください。 char型でも while(ifs && getline(ifs,buf[line])){ line++; }  は正常に動くんですよね? ちなみに3000というのは、csvの文字列がどれだけ長くても対応できるように、、 と思ってそうしているんですが、、、文字列の量によっては無駄になるメモリもありますが、、 >当てずっぽでソースコードっぽいものを書かれても困る 確かにまだ確認はしていませんが、熟練の方でしたら どうなるのか、わかるかなと思いまして、、聞いてみました。 (確かにいちいち自分で試せばいいですが、以前予期せぬエラーというか 無限ループとか、そういう危ないエラーを食らったことがあるので なるべく聞いて確認したい気持ちもあります)
- 520 名前:名前は開発中のものです。 [2018/09/08(土) 05:49:23.91 ID:DgEMMqli.net]
- 結局、今夜も夜通しで進展せず朝を迎えた。
プログラムとサイトやブログとにらめっこしてました。 外部ファイル扱いの理解度が足りないせいもありますが 一番は、DXライブラリサイトのリファレンスが親切じゃないこと。 archiveファイル読み込み関数でcsvファイルを扱う場合の説明が不十分。 ifstreamやgetlineで問題なく動くプログラムをやっとこさ組めたのに。。 画像やサウンドなんてFileReadで触らずとも、それぞれ描画関数や再生関数で archiveファイルから勝手に開けるのに、、、なぜリファレンスサンプルに テキストファイル取り上げないの、、、、、、
- 521 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 06:26:04.85 ID:2HdjcsD1.net]
- C/C++にはString型(文字列型)なんてものは無く
std::stringクラスオブジェクトを3000個も用意するなって事でしょう 基礎の理解がおぼつかないまま先に進もうとしてめちゃくちゃになってる DXのサンプル無くてもCのfopen/fread辺りのTXT読み込みサンプルを探して試してみて デバッガで動きが理解できたら対応するDXライブラリのAPIに置き換えればいい
- 522 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 06:40:52.25 ID:t6UqvRI+.net]
- >>504
例え話をしよう 新居を購入して、そこに引っ越し用のダンボール箱を3000個 搬入したいとする ※新居はダンボール箱3000個まで収容可能とする でもあなたは"家"を3000個用意してる訳 おかしい事してるの、わかる? プログラムでいうと、buf[ 0 ]のstringにデータが入ってて buf[ 1 ] ~ buf[ 2999 ]は無駄になってる あと文字列 = stringって思ってるみたいだけど 文字列って要はchar型の配列だから別にstringである必要は無いよ 文字列比較とかするつもりが無いんだったら、 std::vector< char > t_DataVec;で充分だと思うけど
- 523 名前:名前は開発中のものです。 [2018/09/08(土) 06:46:54.61 ID:DgEMMqli.net]
- >>506
>Cのfopen/fread辺りのTXT読み込みサンプルを探して試してみて fopen/freadあたりの扱い方が近い、ということでしょうか? 了解しました、一度確認してみます。 >>507 ものすごいわかりやすい例え話でした。。 ありがとうございます、ちょっとそれを考慮して修正してみます。
- 524 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 09:14:50.02 ID:nuE0zfH6.net]
- Ruby では簡単。
Ruby, JavaScript などの動的言語を一通りやっていないと、C などポインタのある言語は無理。 言語の難易度が違いすぎる # コロン区切りのCSV 入力ファイルを、1行ずつ処理する input_file = "input.csv" CSV.foreach(input_file, col_sep: ":") do |row| puts( row[0] + row[1] ) end
- 525 名前: []
- [ここ壊れてます]
- 526 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 10:26:18.43 ID:zhYpFAkU.net]
- >>509
今の話題に関しては、メモリ空間を認識できるかどうかの違いでしか無くね…?
- 527 名前:名前は開発中のものです。 [2018/09/08(土) 22:08:22.95 ID:DgEMMqli.net]
- >>501さん
>配列やstringが何なのか分かってないとしか >string3000個もいらねーって言ってるだろーが! >>507さん >buf[ 1 ] ~ buf[ 2999 ]は無駄になってる あのうお二人にお聞きしますが、charかstringのどちらがふさわしいかは、今は置いておいて、 stringだと、buf[3000]も要らないんですよね? 私はbuf[3000]のbuf[ 1 ] ~ buf[ 2999 ]は無駄になってるって話でしたよね? (私は怒っているわけではありません) string buf[3000];をstring buf[1];に書き換えたら ビルド後、エラーが出る様になったんですけど、、 もちろん、string buf[3000];に戻せば、正常に動きます。 どういうことでしょうか。 ちなみに私の作ったソースは>>469なんですが、 string buf[1];にしただけでエラーが出始めるということは 列数が足りてないってこと=[0]からも利用してたってことじゃないでしょうか。 お二人は、ちゃんとソースを理解して、無駄だからやめろ、と ご指摘してくださったのかと思っていたのですが、、、 私はstring buf[];にcsvの文字を入れ込む必要があるので 念のため3000にして、いくらか余りが出てもいいくらいの思いで宣言して利用してるんで お二人にご指摘された後、ん〜、string buf[0];でcsv内の文字列が全部格納できれば 世話ないんだけど本当かな〜、ともちょっと疑っていたんですが 先ほど試してみて、やっぱりエラーが出た、とう結果です。 >>469のソースの while(ifs && getline(ifs,buf[line])){line++;} ここの部分、このgetlineでbuf[]を使うわけですが、[1]だけじゃ困る、 ということですよね?? [3000]を[1]に変えてエラーになるということは。
- 528 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 22:19:35.21 ID:/fM1gWQu.net]
- 完全にスレ違いなので他所に行った方がいい
個人的にはc++の教本を一から読み直すことを勧める。 初歩的なことが全くわかってない、ということをまず自覚したほうがいい
- 529 名前:名前は開発中のものです。 [2018/09/08(土) 22:42:35.24 ID:DgEMMqli.net]
- あと、すみません>>476さん、
昨日からずっと>>476さんのソースを研究させて頂いてるんですけど 間違っているのではないかと思われる箇所があるんですが、 自分の思い違いなのか、書いた>>476さんにお尋ねさせてほしいのですが //マップの配列を確保 t_MapDataVec.resize(t_Height); for( int i = 0; i < t_Height; i++ ){ t_MapDataVec[i].resize(t_Width);} ↑ ここで配列t_MapDataVecの行数はt_Height、 t_MapDataVecの要素数はt_Widthからそれぞれ決めていますよね、 ここはそれで正解なんですけど、 問題はこの後、その配列に数値を格納するときなんですが t_MapDataVec[ t_LoadNum / t_Width ][ t_LoadNum % t_Width ] = t_Sum; ++t_LoadNum; ↑ これでは、行数の添え字の進み方ががおかしくなりませんか? これ、行数と要素の添え字を両方ともt_Widthを利用して算出してます。 しかし、行数の数はさっきのresizeではt_Heightで決めています。 つまり、t_Widthとt_Heightの値とは必ず同じというわけでは無いはずなので t_Widthだけを利用した算出方法では行数の添え字の動きに支障が出ませんか?
- 530 名前:名前は開発中のものです。 [2018/09/08(土) 22:47:12.28 ID:DgEMMqli.net]
- >>512
>初歩的なことが全くわかってない それは>>511の内容(エラー)について 私の方が無知で責められる内容だということですか? ご指摘頂けませんか? 「あなたが言う様に変更したらエラーが出る様になりました」 「、、お前は初歩がわかってないから消えろ」では 納得いきません。申し訳ありませんが、自分が間違っているのであれば 気付かせてからの「わかったら消えろ」発言にして頂きたいです。
- 531 名前:名前は開発中のものです。 [2018/09/08(土) 22:52:29.99 ID:DgEMMqli.net]
- >>512
もしかしてstringでは配列を作る必要がないということですか? string buf[1];では無くstring buf;にしろと。 それはそれでエラーになるじゃないですか。 ここで↓ while(ifs && getline(ifs,buf[line])){line++;} だからbufは配列じゃないと困るんですけど、、
- 532 名前:名前は開発中のものです。 [2018/09/08(土) 22:59:20.13 ID:DgEMMqli.net]
- >>512
ちなみにこの https://teratail.com/questions/44651 PAGEの質問の回答者の中に >C++なのに、あえてmojiretuをchar配列にする理由があるのでしょうか。 >std::string mojiretu[10]; >このように定義しておけば、 >mojiretu[0] = s; >mojiretu[1] = s2; >は問題なく通ります。 とstringで配列を作ることを肯定する記載もあります。 別に、charでは無くstringで配列を作ってもダメな手では無いはずです。
- 533 名前:名前は開発中のものです。 [2018/09/08(土) 23:26:58.22 ID:JZkN0uf+.net]
- なんか変なのわいてんな
- 534 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 23:29:17.95 ID:2HdjcsD1.net]
- >>515の2,3行目までは当たりなのでstd::stringクラスについてよく調べること
C/C++の話だけなら別スレに移ろう C++相談室 part137 mevius.5ch.net/test/read.cgi/tech/1535353320/ 【初心者歓迎】C/C++室 Ver.103【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1530384293/
- 535 名前:名前は開発中のものです。 [2018/09/08(土) 23:45:27.10 ID:DgEMMqli.net]
- >>518
そもそもstringクラスの話はココの人に「それでは無駄がでている」との指摘を受けて 話に出しているだけで私としては修正することでエラーが出るなら buf[3000]で無駄が出ていようが構わいことです。 とにかく、何日も悩んでいるのは、archiveしたcsvを読むのに、 DXライブラリ関数を使っているのにビルド上は問題ないのにarchive後は正しく読まない、 その理由がわからない。 >>477さんが指摘したDXライブラリ関数では無いgetlineも 自分で新たにbool getline2(int fh, string& s);と宣言し bool StageDataBase::getline2(int fh, string& s) {char buf[1024]; if (FileRead_gets(buf, sizeof buf, fh) == -1) return false; s = buf; return true;} とFileRead_getsを使って入れ込む関数を作っても、archive後は正常に読み込んでいない。 ここの住人さんが提示するソースを研究なり導入しても改善せず、なにがなんだかわからんのです。 私の未熟なのはわかりましたが、私のやりたいことに対して、 現在のソースの間違い個所を指摘してもらいたいんです。 未熟だ、charでは無駄が、とか正直そんなのどうでもいいですよ。 解決したいのは、archiveしたcsvを今のソースでは 正しく読んでくれないんです。どこが間違っているせいですか? それがご相談したいことなんです。
- 536 名前:名前は開発中のものです。 [2018/09/08(土) 23:49:24.65 ID:JZkN0uf+.net]
- 甘ったれんな
- 537 名前:名前は開発中のものです。 mailto:sage [2018/09/08(土) 23:49:57.08 ID:TBpj/0tY.net]
- >>while(ifs && getline(ifs,buf[line])){line++;}
>>ここの部分、このgetlineでbuf[]を使うわけですが、[1]だけじゃ困る、 ということですよね?? 「一旦CSVファイルの内容を全部変数に格納して、 その変数からデータを読み込みたい」って話だったでしょ? バグってんのは、あなたがそういう仕様にコードを修正出来てないから >>while(ifs && getline(ifs,buf[line])){line++;} >>だからbufは配列じゃないと困るんですけど、、 bufじゃなくて、そのwhile〜の部分のコードの方を修正するって考えに何故ならない? >>getline(ifs,buf[line]) 別の掲示板の書き込みを見る限り、これあなたが独自に定義した関数でしょ? 関数の説明も無く「エラーが出るんですけど」とか言われても他人は答えられんでしょ >>これでは、行数の添え字の進み方ががおかしくなりませんか? おかしくないよ?具体的な数値入れて見直してね 基礎が出来てないとこんな有様になるんだねぇ…可哀想に 👀 Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
|

|