[過去ログ] DXライブラリ 総合スレッド その19 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
469(4): 名前は開発中のものです。 [] 2018/09/07(金) 15:15:27.11 ID:SP/YWN4v(4/13) AAS
呼び出し 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;}}
470: 名前は開発中のものです。 [] 2018/09/07(金) 15:22:35.20 ID:SP/YWN4v(5/13) AAS
行数制限のせいで見づらいソースになってますが、ご了承ください。
処理内容は引数で配列の縦と横の値と、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を組み込む前と同じバグの状況です。
472: 名前は開発中のものです。 [] 2018/09/07(金) 15:28:30.17 ID:SP/YWN4v(6/13) AAS
あ、ちなみに>>469で利用しているMap配列の要素数は決めておらず、
vector<vector<int>>Map;と宣言しており、
第一、第二引数を受け取ってから要素数を決定させています。
511(1): 名前は開発中のものです。 [] 2018/09/08(土) 22:08:22.95 ID:DgEMMqli(15/21) AAS
>>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]に変えてエラーになるということは。
540: 名前は開発中のものです。 [] 2018/09/09(日) 00:52:21.26 ID:/IlMVd18(9/11) AAS
>>537
>あと「上手くいかない」「エラーが出る」とかじゃ意味分からんね 具体性がない
まあ、どういう状況かはこのスレに書いてきたんですが
途中から来た貴方に私が過去レスを見てくれというのも
おこがましいので、貴方のために説明します。
経緯は>>538です
で、私のもともとのソースは
>>469です。
これがarchiveファイルにしていなければ正常にcsvファイルの中身を
Map配列に入れ込める関数です。
この段階のgetline関数はiostreamの関数です。
そのgetlineでなにが行われているのかは、もちろん私より承知なんでしょう。
まあ要は、
このソースのどこをDXライブラリ関数に変えたらいいのか、という相談なんです。
ピンポイントで修正個所を言ってくれる人はほとんどおらず、
別の部分をいろいろご指摘されたわけですが。
で、次にDXライブラリ関数を使って
自分なりに完成させたソースを貼りますね
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.031s