ファイルに読み込んだ数字を、配列に入れていく作業に悩んでいます。
(例えば、ファイルに入っている2行の数字の列:1 3 5 7 (ここで改行) 2 4 6 8(ここまで)
を読み込み、a[0]=1 a[1]=3 ... a[5]=2...のように数字を配列に入れる感じ)
上記の作業を行うにはどうすればいいでしょうか?
ファイルを読み込み、数字を配列に入れるには?
Re:ファイルを読み込み、数字を配列に入れるには?
とりあえず、開発環境、言語は明記すべきです。
aの型は何ですか?
a[4]には何が入っているのでしょうか?
そのあたりをはっきりすると、よい回答が得られるかも知れません。
aの型は何ですか?
a[4]には何が入っているのでしょうか?
そのあたりをはっきりすると、よい回答が得られるかも知れません。
Re:ファイルを読み込み、数字を配列に入れるには?
ついでに、「ファイルに読み込んだ数字」についても明確にしてほしいです。
この数値がCSV形式なのか、プログラムから配列データをそのまま出力したものなのか、数値の数は可変なのか。
この辺りが違うだけで、回答の内容も変わりますし、難易度も変わってくると思います。
この数値がCSV形式なのか、プログラムから配列データをそのまま出力したものなのか、数値の数は可変なのか。
この辺りが違うだけで、回答の内容も変わりますし、難易度も変わってくると思います。
Re:ファイルを読み込み、数字を配列に入れるには?
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]には改行コードを入れたいということでしょうか?
それとも、単なる間違いか、どっち?
>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:ファイルを読み込み、数字を配列に入れるには?
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 ;
}
すみません、説明が不足していましたので詳細を説明します。
開発環境: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:ファイルを読み込み、数字を配列に入れるには?
わざわざWindowsアプリケーションにしているのは、なぜですか?
今回のテーマでしたら、コンソール・アプリケーションの方が
ずっと楽に作れます。
今回のテーマでしたら、コンソール・アプリケーションの方が
ずっと楽に作れます。
Re:ファイルを読み込み、数字を配列に入れるには?
FileRead_getsは1行読み込む関数です。返却値は文字数ですし。
今回はFileRead_scanfの方がいいですね。
forで回している意味がわからないけど。
今回はFileRead_scanfの方がいいですね。
forで回している意味がわからないけど。
Re:ファイルを読み込み、数字を配列に入れるには?
>初級者さん nonさん
すみません、返信が遅れました。
この作業全体の流れは、
FileRead_getsで、txtファイルから数字を1つ1つ読み込む
↓
配列(完成では2次元配列)に数字を入れることが出来るようにする
↓
最終的に既存のピクロス(イラストロジック)の問題を、テキストファイルを用いて
FileRead_getsで、数字を1つ1つ(もしくは1行ずつ)読み込めるように出来ることがねらいです。
for文以外の方法はあるのでしょうか?
すみません、返信が遅れました。
この作業全体の流れは、
FileRead_getsで、txtファイルから数字を1つ1つ読み込む
↓
配列(完成では2次元配列)に数字を入れることが出来るようにする
↓
最終的に既存のピクロス(イラストロジック)の問題を、テキストファイルを用いて
FileRead_getsで、数字を1つ1つ(もしくは1行ずつ)読み込めるように出来ることがねらいです。
for文以外の方法はあるのでしょうか?
Re:ファイルを読み込み、数字を配列に入れるには?
>for文以外の方法はあるのでしょうか?
すでに、
while( FileRead_eof( FileHandle ) == 0 ){
これで、繰り返してますよね。
すでに、
while( FileRead_eof( FileHandle ) == 0 ){
これで、繰り返してますよね。
Re:ファイルを読み込み、数字を配列に入れるには?
#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;
}
これでも作成可能でしょうか?
#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;
}
これでも作成可能でしょうか?
Re:ファイルを読み込み、数字を配列に入れるには?
>これでも作成可能でしょうか?
自分で実行して、思ったとおりの結果が得られれば、
作成できたことになります。
まず、コンパイルが通るようにしてください。
#ファイル読み込みはC標準関数「fgetc」と同じなので、
ファイルポインタから一文字読み込み、unsigned charからintに変換して返却します。
なので、このプログラムだと自分の期待している動作と異なってるかと思います。
また、半角スペース(空白文字)も読みとっているので、
ファイルの内容によっては、a[10]を超えた領域にアクセスする可能性があります。
自分で実行して、思ったとおりの結果が得られれば、
作成できたことになります。
まず、コンパイルが通るようにしてください。
#ファイル読み込みはC標準関数「fgetc」と同じなので、
ファイルポインタから一文字読み込み、unsigned charからintに変換して返却します。
なので、このプログラムだと自分の期待している動作と異なってるかと思います。
また、半角スペース(空白文字)も読みとっているので、
ファイルの内容によっては、a[10]を超えた領域にアクセスする可能性があります。