二次元配列の出力 – プログラミング – Home

通知
すべてクリア

[解決済] 二次元配列の出力


ごんた
 ごんた
(@ごんた)
ゲスト
結合: 24年前
投稿: 23
Topic starter  

前回は有難うございました。今回も宜しくお願いします。
今回は以下のような二次元配列からi行j列のcsv出力を試みていますが、どうもうまくい
きません。何かご指摘お願いします。

for(j=0; j<1000; j21++){

for (i=0; i<10; i++)
{
A[j][i]=B[j][i]
fprintf(fp4,%f\t,A[j][i]);//この部分の処理

}
fprintf(fp4,,\n);//この部分の処理
}


引用未解決
トピックタグ
をよよ
 をよよ
(@をよよ)
ゲスト
結合: 22年前
投稿: 15
 

「i行j列」なら、次のように書くのがよろしいかと。

// 行数をROWS、列数をCOLSとする
for( int i = 0; i < ROWS; ++i )
{
for( int j = 0; j < COLS; ++j )
{
// A[ i ][ j ]を出力する処理
}
// 改行を出力する処理
}


返信引用
ごんた
 ごんた
(@ごんた)
ゲスト
結合: 24年前
投稿: 23
Topic starter  

以下のように変えては行っていますが、csvのセルの中に値がうまく表示できないのが現
状です。
for (i=0; i<10; i++)
{
for(j=0; j<1000; j21++){

A[j][i]=B[j][i]
fprintf(fp4,%f,A[j][i]);//この部分の処理

}
fprintf(fp4,,\n);//この部分の処理
}


返信引用
をよよ
 をよよ
(@をよよ)
ゲスト
結合: 22年前
投稿: 15
 

配列の添え字はA[j][i]でよいのですか?
内側のfor文中、j21って何ですか?
A[j][i]=B[j][i]の行末に;がないけど、良いのですか?
「うまく表示できない」とは、具体的にどのような症状なのですか?
# このコードではコンパイルもできないと思われますが、、、


返信引用
ごんた
 ごんた
(@ごんた)
ゲスト
結合: 24年前
投稿: 23
Topic starter  

すいません。おっしゃるとおりです。
ソースから抜き出したため誤った表現になってしまいました。
申し訳ないです。

>配列の添え字はA[j][i]でよいのですか?
はい。結構です。
>内側のfor文中、j21って何ですか?
jの誤りでした。
以下のような二次元配列のcsvの出力を考えたいのですが、どうしてもテキストをそのま
まエクセルに貼り付けたような形になります。
セルの中にいれたいのですが、どうしても分かりません。
宜しくお願いします。
for (i=0; i<10; i++)
{
for(j=0; j<1000; j++){

A[j][i];
fprintf(fp4,%f,A[j][i]);//この部分の処理

}
fprintf(fp4,,\n);//この部分の処理
}


返信引用
をよよ
 をよよ
(@をよよ)
ゲスト
結合: 22年前
投稿: 15
 

>> 配列の添え字はA[j][i]でよいのですか?
> はい。結構です。

「i行j列」でなくて「j行i列」なんですね?
そうならば、元どおり外側のループがjで良いです。

> 以下のような二次元配列のcsvの出力を考えたいのですが、どうしてもテキストをその

> まエクセルに貼り付けたような形になります。

csvはコンマ区切りだから、数値と数値の間にもコンマを出力してはどうでしょうか。

// 1000行10列
for( int j = 0; j < 1000; ++j )
{
for( int i = 0; i < 10; ++i )
{
fprintf( fp4, %f,, A[ j ][ i ] ); // 数値の後ろにコンマを追加
}
fprintf( fp4, \n ); // 改行だけ出力
}


返信引用
ごんた
 ごんた
(@ごんた)
ゲスト
結合: 24年前
投稿: 23
Topic starter  

をよよ様
有難うございました。
お蔭様でできました。
しかし、私の表現不足で行いたかったことは10行1000列でした。
この場合ファイル全体を読み込めなくなってしまいます。
エクセルの列で読み込める限界がきたら折り返しみたいなことはできるのですか?
// 10行1000列
for( int i = 0; i < 10; ++i )
{
{for( int j = 0; j < 1000; ++j )
  {

fprintf( fp4, %f,, A[ j ][ i ] ); // 数値の後ろにコンマを追加
}
fprintf( fp4, \n ); // 改行だけ出力
}


返信引用
をよよ
 をよよ
(@をよよ)
ゲスト
結合: 22年前
投稿: 15
 

1行の出力済みデータ数がエクセルの最大列数(255だったかな?)で割り切れたとき、
コンマの代わりに改行を出力すればよいと思います。

const int MAX_COLS = 255; // エクセルの最大列数
for( int i = 0; i < 10; ++i )
{
for( int j = 0; j < 1000; ++j )
{
fprintf( fp, %f, A[ j ][ i ] ); // コンマはここでは追加しない

if( ( j + 1 ) % MAX_COLS == 0 ) // 1行の出力済みデータ数がエクセルの
fprintf( fp4, \n ); // 最大列数で割り切れたら改行を出力
else // そうでなければ
fprintf( fp4, , ); // コンマを出力
}
fprintf( fp4, \n );
}

# 蛇足ながら、2次元配列の構造と行、列を合わせておいた方が後々楽だと思います。
# つまり、A[j][i]でなく、A[i][j]で良いようにするということです。


返信引用
ごんた
 ごんた
(@ごんた)
ゲスト
結合: 24年前
投稿: 23
Topic starter  

をよよさん
有難うございました。
できました。
助かりました。
感謝します。


返信引用
ごんた
 ごんた
(@ごんた)
ゲスト
結合: 24年前
投稿: 23
Topic starter  

># 蛇足ながら、2次元配列の構造と行、列を合わせておいた方が後々楽だと思いま
す。
># つまり、A[j][i]でなく、A[i][j]で良いようにするということです。
あと、このアドバイスも有難うございました。
かなりの参考になりました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました