はじめまして。
hiraです。
今非常に基本的であろうことに悩んでいます。まだまだプログラムを始めたところなのでうまくいきません。
内容は・・・
あるファイルを読み込んで、二次元の配列に格納していく。
です。
具体的には
test.txtというファイルがあり、中身は数字の二次元配列です。
カンマやtabで区切られています。配列の大きさ、数字の桁数などはファイルによって違います。
そのファイルを読み込んで、配列に格納したいと考えています。
今は一列を読み込むことには成功しています。そこからどのようにして分けて言ったらいいのか・・・ご教示お願いします。
もしくは、もっと違う方法で読み込む方法があればよろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fin;
char array[256];
char buf[256];
fin=fopen("test.txt","r");
if(fin == NULL){
printf("%sがオープンできません\n",fin);
exit(1);
}
while(fgets(buf,256,fin) != NULL)
{
ここが問題・・・
}
fclose(fin);
return 0;
}
No.2ベストアンサー
- 回答日時:
★『strchr』、『strpbrk』、『strtok』などの文字列関数を使う。
・どの関数を使ってもカンマ、タブ区切り、数字を切り分けてくれます。
・サンプルとして『strtok』関数バージョンを紹介します。
・『while』文の内部のみです。
サンプル:
char buff[ 256 ];
char *tokn = ",\t"; ←カンマとタブ文字を指定
char *seek; ←文字列のシーク移動用
while ( fgets(buff,sizeof(buff),fin) != NULL ){ ←sizeof(buff)で『buff』のサイズ(256)になる
if ( (seek = strtok(buff,tokn)) != NULL ){
do {
/*
value = atoi( seek ); ←『atoi』関数で数字文字列を整数に変換して value にセット
ここは出題です。
*/
} while ( (seek = strtok(NULL,tokn)) != NULL );
}
}
最後に:
・最初の if の『strtok』関数で切り分ける文字列『buff』と区切り文字群『tokn』で最初の数字セルを
取得します。取得後に do-while 部分で数字文字列を整数に変換して2次元配列へセットします。
ここの部分は、質問者さんが実装して下さい。→『atoi』関数で整数変換できるので頑張って下さい。
・次に while の『strtok』関数で続きの切り分ける文字列を取得します。
もしも、カンマやタブ文字が見つからないと NULL を返しますので do-while 文を抜けます。
・これで1行単位で『数字,数字,数字,…,数字』という CSV 形式のデータを2次元配列にセットできます。
・上記のはあくまでサンプルですので、2次元配列へのセット部分は hira1234 さんが記述して下さい。
参考URL:http://www9.plala.or.jp/sgwr-t/lib/strtok.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
nullと""、\\0とEOFの違いにつ...
-
16進数を2文字ずつ配列に格納し...
-
C#でstringをポインタとして渡す
-
[C++]WCHARの1文字目しか表示で...
-
c#で他のアプリの文字入力フォ...
-
引用符と二重引用符
-
プログラムによく出てくるst...
-
WSH(VBS)でJSONの文字列を読み...
-
C++で入力した文字列から数字を...
-
[C#.net]正規表現による指定文...
-
Excelシートを固定長のテキスト...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
%dなどの違い
-
Shift_JIS(16進)を文字に変換す...
-
セグメントエラー
-
関数から配列を返すには?
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
init関数の意味
-
C言語にて構造体のメンバがNULL...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C++で入力した文字列から数字を...
-
nullと""、\\0とEOFの違いにつ...
-
プログラムによく出てくるst...
-
%dなどの違い
-
WSH(VBS)でJSONの文字列を読み...
-
TCL言語で文字列検索方法を教え...
-
C#でstringをポインタとして渡す
-
16進数を2文字ずつ配列に格納し...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
C++で文字列の右端から特定の文...
-
シリアル通信で0x00を送信した...
-
VBA-DLLの引数受け渡しについて
-
数字の入った配列をファイルへ...
-
c#で他のアプリの文字入力フォ...
-
構造体→文字列→構造体 をする方法
-
Shift_JIS(16進)を文字に変換す...
-
バイナリファイル中の日本語文...
-
C言語の課題で困っています;
-
[C++]WCHARの1文字目しか表示で...
-
VB6.0でのバイナリデータの扱い...
おすすめ情報