c言語でデータの指定列の度数分布をつくろうとしています。
以下のように1列のデータに対してはプログラムを組むことができます。
#include<stdio.h>
#include<stdlib.h>
#define UPPERBOUND 2.0
#define LOWERBOUND -2.0
#define RANGE 0.1
int main(int argc, char* argv[]){
int i;
FILE *fp;
FILE *fp2;
char str[256];
if(argc != 2 && argc != 3){
printf("***usage: %s <datafilename>\n", argv[0]);
exit(-1);
}
if((fp = fopen(argv[1], "r")) == NULL){
printf("can't open file\n");
exit(-1);
}
if(argc == 3){
if((fp2 = fopen(argv[2], "w")) == NULL){
printf("can't open outputfile\n");
exit(-1);
}
}
int tablesize = (UPPERBOUND-LOWERBOUND)/RANGE;
int table[tablesize];
for(i=0; i<tablesize; i++){
table[i] = 0;
}
while((fgets(str, 256, fp)) != NULL){
double dbl = atof(str);
if(!(dbl < LOWERBOUND || dbl > UPPERBOUND)){
int n = (dbl-LOWERBOUND)/RANGE;
table[n]++;
}
}
for(i=0; i<tablesize; i++){
printf("%lf~%lf\t: %d\n", LOWERBOUND+(i*RANGE), LOWERBOUND+((i+1)*RANGE), table[i]);
if(argc == 3){
fprintf(fp2, "%lf~%lf\t: %d\n", LOWERBOUND+(i*RANGE), LOWERBOUND+((i+1)*RANGE), table[i]);
}
}
return 0;
}
そこで複数列のデータに対して、例えば10列100行のデータに対して6列目だけを見たいときはどうすればできますでしょうか?
No.1ベストアンサー
- 回答日時:
やることは一緒ですよ
ただ fgetsで一行取得した中から 6列目をどう見つけるかだけだと思います
データの区切りが『,』であるなら
char* FindData( char* str, int n )
{
char *ptr = NULL;
if ( n > 0 ) {
if ( NULL != (ptr = strcchr( str, ',' )) ) {
--n;
ptr++; // 最初の『,』をスキップ
while( n-- ) {
ptr = strchr( ptr, ',' );
if ( ptr == NULL )
break;
ptr++; // 見つけた『,』をスキップ
}
}
} else if ( n == 0 ) {
ptr = str;
}
return ptr;
}
といった関数を用意して
while((fgets(str, 256, fp)) != NULL){
// 1列目が0としているので 6列目なら5を引数にします
char *p = FindData( str, 5 );
if ( p != NULL ) {
double dbl = atof(str);
if(!(dbl < LOWERBOUND || dbl > UPPERBOUND)){
int n = (dbl-LOWERBOUND)/RANGE;
table[n]++;
}
}
}
といった具合でしょう
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の課題です
-
c言語でのfscanfについて
-
テキストファイル内に対して, ...
-
fgets( ) の返り値は何?
-
C言語 連番データの読み込み
-
数値のみ抽出(C言語)
-
ファイルの特定行の抽出
-
フーリエ変換のC言語プログラム...
-
ファイルが読み込めない・・・
-
辞書順にソートしたいのですが...
-
音声データを出力するCプログラ...
-
InternetReadFileを使ったファ...
-
乱数とファイルの入出力の質問...
-
3桁ずつ順に読んでいきたい
-
エラーがわかりません、、
-
CGIコンパイルエラーについ...
-
VisualStudioでのファイルの入...
-
fscanfでループしてしまう。
-
日本語ファイル名のFTPについて
-
csvファイルのデータを構造体に
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語でのfscanfについて
-
fopenでファイル名に、変数を使...
-
複数ファイルの同時読み込みの...
-
C言語でセグメンテーションエ...
-
C言語でファイル読み書きを早く...
-
ファイル出力で改行を入れたい!
-
エラーがわかりません、、
-
テキストファイル内に対して, ...
-
構造体のメンバにファイルポイ...
-
C言語にてXMLファイルから任意...
-
ガンマ変換 C言語でプログラ...
-
日本語ファイル名のFTPについて
-
【C言語】ファイルを読み込んで...
-
fscanfでループしてしまう。
-
fgets( ) の返り値は何?
-
CRC32の計算方法
-
VisualStudioでのファイルの入...
-
ファイルに行番号を追加
-
ファイルへの書込み処理が異常...
-
ファイルが読み込めない・・・
おすすめ情報