ファイルを読み込み、数字を配列に入れるには?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
デジキャメ

ファイルを読み込み、数字を配列に入れるには?

#1

投稿記事 by デジキャメ » 16年前

ファイルに読み込んだ数字を、配列に入れていく作業に悩んでいます。

(例えば、ファイルに入っている2行の数字の列:1 3 5 7 (ここで改行) 2 4 6 8(ここまで)

 を読み込み、a[0]=1 a[1]=3 ... a[5]=2...のように数字を配列に入れる感じ)

上記の作業を行うにはどうすればいいでしょうか?

kazuoni

Re:ファイルを読み込み、数字を配列に入れるには?

#2

投稿記事 by kazuoni » 16年前

とりあえず、開発環境、言語は明記すべきです。

aの型は何ですか?
a[4]には何が入っているのでしょうか?

そのあたりをはっきりすると、よい回答が得られるかも知れません。

array

Re:ファイルを読み込み、数字を配列に入れるには?

#3

投稿記事 by array » 16年前

ついでに、「ファイルに読み込んだ数字」についても明確にしてほしいです。

この数値がCSV形式なのか、プログラムから配列データをそのまま出力したものなのか、数値の数は可変なのか。
この辺りが違うだけで、回答の内容も変わりますし、難易度も変わってくると思います。

non

Re:ファイルを読み込み、数字を配列に入れるには?

#4

投稿記事 by non » 16年前

kazuoniさんとかぶりますが、再度。
>2行の数字の列:1 3 5 7 (ここで改行) 2 4 6 8
>a[0]=1 a[1]=3 ... a[5]=2...

このデータで、数字だけを配列に格納すると、
a[0]=1 a[1]=3 a[2]=5 a[3]=7 a[4]=2 a[5]=4
になります。ということは、a[4]には改行コードを入れたいということでしょうか?
それとも、単なる間違いか、どっち?

デジキャメ

Re:ファイルを読み込み、数字を配列に入れるには?

#5

投稿記事 by デジキャメ » 16年前

kazumiさん arrayさん nonさん

すみません、説明が不足していましたので詳細を説明します。

開発環境:DirectX
言語:C++

data1.txtの数字
1 3 5 7
2 4 6 8
(数字だけの格納で、数字は可変です)


結果
a[0]=1 a[1]=3 a[2]=5 a[3]=7
a[4]=2 a[5]=4 a[6]=6 a[7]=8
(最終的に表示はしないです)


少し作成しましたが、エラーが発生しました。

include "DxLib.h"
#define P (8)

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
int a[10]={0};
char String[256] ;
int FileHandle, y=0, i;

ChangeWindowMode(TRUE);
if( DxLib_Init() == -1 ) return -1;//DXライブラリの初期化
FileHandle = FileRead_open( "data1.txt" );// data1.txt を開く

while( FileRead_eof( FileHandle ) == 0 ){
for(i=0; i<P; i++){
a = FileRead_gets( String, 256, FileHandle ) ;// ここでエラーが発生
}
}
FileRead_close( FileHandle );// ファイルを閉じる
for(i=0; i<P; i++){
DrawString( 0, y, %d, a);// 確認用の描画
      y+20;
}
WaitKey() ;
DxLib_End() ;
return 0 ;
}

初級者

Re:ファイルを読み込み、数字を配列に入れるには?

#6

投稿記事 by 初級者 » 16年前

わざわざWindowsアプリケーションにしているのは、なぜですか?
今回のテーマでしたら、コンソール・アプリケーションの方が
ずっと楽に作れます。

non

Re:ファイルを読み込み、数字を配列に入れるには?

#7

投稿記事 by non » 16年前

FileRead_getsは1行読み込む関数です。返却値は文字数ですし。
今回はFileRead_scanfの方がいいですね。
forで回している意味がわからないけど。

デジキャメ

Re:ファイルを読み込み、数字を配列に入れるには?

#8

投稿記事 by デジキャメ » 16年前

>初級者さん nonさん

すみません、返信が遅れました。

この作業全体の流れは、

FileRead_getsで、txtファイルから数字を1つ1つ読み込む
    ↓
配列(完成では2次元配列)に数字を入れることが出来るようにする
    ↓
最終的に既存のピクロス(イラストロジック)の問題を、テキストファイルを用いて

FileRead_getsで、数字を1つ1つ(もしくは1行ずつ)読み込めるように出来ることがねらいです。

for文以外の方法はあるのでしょうか?

non

Re:ファイルを読み込み、数字を配列に入れるには?

#9

投稿記事 by non » 16年前

>for文以外の方法はあるのでしょうか?

すでに、
while( FileRead_eof( FileHandle ) == 0 ){
これで、繰り返してますよね。

デジキャメ

Re:ファイルを読み込み、数字を配列に入れるには?

#10

投稿記事 by デジキャメ » 16年前

#include "DxLib.h"
#define P 8

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow){

int a[10]={0},FileRead_getc(int FileHandle);
int FileHandle, y=0, i=0, Cr=GetColor(255,255,255);

ChangeWindowMode(TRUE);
if(DxLib_Init() == -1) return -1;
FileHandle = FileRead_open("data1.txt");
int FileRead_getc(int FileHandle);
while(FileRead_eof(FileHandle) == 0){
a = FileRead_getc(FileHandle); i++;
}
FileRead_close(FileHandle);
for(i=0; i<P; i++){
DrawFormatString(0,0,Cr,"a[%d]=%d", i,a); y+20;
}
WaitKey();
DxLib_End();
return 0;
}

これでも作成可能でしょうか?

kazuoni

Re:ファイルを読み込み、数字を配列に入れるには?

#11

投稿記事 by kazuoni » 16年前

>これでも作成可能でしょうか?

自分で実行して、思ったとおりの結果が得られれば、
作成できたことになります。

まず、コンパイルが通るようにしてください。

#ファイル読み込みはC標準関数「fgetc」と同じなので、
ファイルポインタから一文字読み込み、unsigned charからintに変換して返却します。
なので、このプログラムだと自分の期待している動作と異なってるかと思います。
また、半角スペース(空白文字)も読みとっているので、
ファイルの内容によっては、a[10]を超えた領域にアクセスする可能性があります。

閉鎖

“C言語何でも質問掲示板” へ戻る