~.csvというファイルがあって、ファイルの中身は256*256のある数字の2次元配列です。
このファイルを読み込んで、2次元配列に格納したいのですが、どのようなソースを書けばいいのでしょうか?
プログラミングをちゃんと勉強してこなかったために苦戦しています。
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[]){
FILE *fi;
char I[256];
char J[256];
if((fi=fopen("ch.csv","r"))==NULL){//csvもこのような記述でよみこむことができるのか?
printf("ファイルオープンエラー\n");
exit(1);
}
while(fgets(J,256,fi) != NULL)
{
これより先が全く書けていない状態です。
ここまでもこのソースで大丈夫でしょうか?
かなり基本的なことだと思いますが、よろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>ファイルの中身は256*256のある数字の2次元配列です。
>char J[256];
とされています。これを勝手に都合良く解釈し、
・256は、文字数ではなく「データ個数」として
・数字は「整数」として
fscanf() を使って、作ってみました(BorlandC++5.6.4)。
http://www.bohyoh.com/CandCPP/C/Library/fscanf.h …
他の回答者の皆さんとは一風変わっていて、標準関数に「切り出し」をさせる方法です。
こんな方法もある、ということでソースを投稿します。
----------------------------------------------
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *fi;
int kk = 0, nn = 0, iVal, iData[ 256 ][ 256 ];
if( NULL == ( fi = fopen( "ch.csv", "r" ) ) ){
printf( "ファイルオープンエラー\n" );
exit( 1 );
}
while( 1 == fscanf( fi, "%d,", &iVal ) ){ // "%d," の , に注目
iData[ kk ][ nn ] = iVal;
nn++;
if( 256 == nn ){ // 1行読み込み済み
kk++;
nn = 0;
}
}
fclose( fi );
if( ( 256 != kk ) || ( 0 != nn ) ){
printf( "ファイルエラー[%d][%d]\n", kk, nn );
exit( 2 );
}
// 正常処理
}
注:インデントに全角空白を用いています。タブに一括変換して下さい。
No.3
- 回答日時:
csvのファイルをオープンする段階で疑問を抱いているようですが、そこに疑問があるのでしたら、C言語のファイル入出力について確認する必要があると思います。
参考URLのページおよび、その次のページを参考にしてください。要するに、CSVファイルはただのテキストファイルなので、「自分でカンマで区切って処理する」ということになります。
参考URL:http://homepage3.nifty.com/mmgames/c_guide/17-01 …
No.2
- 回答日時:
>これより先が全く書けていない状態です。
とりあえず"J"の中身を確認しましょう。
while(fgets(J,256,fi) != NULL)
{
printf("%s\n",J);
}
fclose(fi);
return 0;
}
>ここまでもこのソースで大丈夫でしょうか?
格納先の2次元配列が見当たりませんが?
I,Jの宣言も(意図するところは想像できますが)不適切だと思います。
まずは"J"の中身が意図した通りか確認。
"fgets(J,256,fi)"が適切か判断してください。
がんばって、1行だけ読んで何か(※)の[256]の配列に
格納するソースを書いてください。
※文字か整数か実数か?質問から読み取れません。
それから2次元配列を考えましょう。
No.1
- 回答日時:
まず疑問点。
>char I[256];
>char J[256];
は何を行うための配列?
二次元なら、buff[256][256]とかになるはずだけど。
>ここまでもこのソースで大丈夫でしょうか?
>while(fgets(J,256,fi) != NULL)
が駄目。
まず、CSVファイルの構成を理解する必要がある。
CSV形式で保存されている数値なら「文字列」として記録されているはず。また「CSV」なら区切りとして「,」があるから一行分読み込むとしたら、最低でも256(数値が一桁の場合)+255(256項目の区切りのカンマ)分はバッファが必要。
簡単な方法は、
1.とりあえず一行読む。
2.カンマ、もしくはデータの最後までデータを取得する。
3.取得したデータを数値変換して配列に格納。
4.2-3を一行分繰り返す
5.2-4を最後の行まで繰り返す。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
2024年のうちにやっておきたいこと、ここで宣言しませんか?
2024年も残すところ50日を切りましたね。 ことしはどんな1年でしたか? 2024年のうちにやっておきたいこと、 よかったらここで宣言していってください!
-
タイムマシーンがあったら、過去と未来どちらに行く?
20XX年、ついにタイムマシーンが開発されました。 あなたは過去に行く? それとも未来? タイムマシーンにのって、どこに行って、何をしたいか教えてください!
-
テキストファイルから文字列を読み込んで二次元配列に格納するには
C言語・C++・C#
-
C言語 csv 配列
C言語・C++・C#
-
CSVファイル作成
C言語・C++・C#
-
-
4
C言語で複数列のデータを1列のみ読み込みたい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルによる検索の高速化
-
ファイルをメモリに出力する方法
-
期間を指定したフォルダの削除...
-
データ解析ソフトRでのファイル...
-
エクセルのプロパティーでセキ...
-
Wordで差込印刷した後に別々の...
-
マインクラフトPCをプレイしよ...
-
C++でネットワークパスのファイ...
-
【マクロ】ファイル名の日付に...
-
ffftpでファイル取得が0バイト...
-
ファイルのアクセス回数について
-
アクセス クエリを別のファイ...
-
Excelでcsvのフィールドが減る
-
フォルダ名に番号を連番でつけたい
-
VBスクリプトで外字の使用を無...
-
バッチでCSVを処理する時、空の...
-
VBAでの行削除について
-
ExeclVBAユーザーフォームから...
-
パスを通したはずなのに「パス...
-
ファイル名と同名のフォルダを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルを後ろから読...
-
VBAでテキストファイルを複数開...
-
バイト型のデータを16進表記で...
-
DXFファイルをVBで取り込み、図...
-
バイナリファイルでOutOfMemory...
-
VBAでテキストファイルの改行を...
-
VBSにてCSV読み込みし比較
-
CSVファイルによる検索の高速化
-
ファイル入力のデータを構造体...
-
RGBのバイナリデータをCImageに...
-
ファイル内の(&H0A)を(&H0D0A)...
-
ファイルをメモリに出力する方法
-
[VBS] 16進数でバイナリファイ...
-
配列操作について
-
バイナリデータの書き換え
-
VBScriptの配列は、要素数を指...
-
バイナリ出力
-
Cで2次元配列にCSVファイルを...
-
Unicodeのファイル読み込みがう...
-
ファイル操作
おすすめ情報