ページ 11

CSVのファイルを・・・・

Posted: 2007年11月06日(火) 18:56
by たまー
CSVのファイルの中に整数のデータが
横に7個"," が整数の間にあります。(CSVなので当たり前なのかも><)
その整数を構造体A B C D E に 順番にいれていくとしたら、
どういった形になりますでしょうか?
よろしくお願いします。

Re:CSVのファイルを・・・・

Posted: 2007年11月06日(火) 20:55
by miyaza
>構造体A B C D E に 順番にいれていくとしたら
整数を入れることができるメンバを持った構造体を7個使うという意味ですよね?

csvといってもその実態はテキストファイルなので
fopen()で開いてfscanf()やfgets()などで読み込んでやればいいと思います。

例えば、以下のソースはfgets()で一行分読み込んでstrtok()でトークン分解しそれをatoi()でint型に変換して
構造体に入れたものです。

7個の整数をcsvから読み取る前提で作ってあります。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct DATA{
	int num;
}DATA;

#define CON 7
#define CS  ","

int main(int argc,char *argv[/url]){

	DATA data[CON];
	FILE *fp;
	char str[512], *ist;
	int i;

	if(argc>2) return -1;
	fp=fopen(argv[1],"r");
	if(!fp) exit(1);

	if(fgets(str,sizeof(str),fp)==NULL) exit(1);

	for(i=0;i<CON;i++){
		if(i==0) ist=strtok(str,CS);
		else ist=strtok(NULL,CS);
		if(ist==NULL) exit(1);
		data.num=atoi(ist);
	}

	for(i=0;i<CON;i++) printf("data[%d].num=%d\n",i,data.num);

	fclose(fp);
	return 0;
}

結構おおざっぱに作ってありますが動くと思います。

Re:CSVのファイルを・・・・

Posted: 2007年11月06日(火) 21:01
by miyaza
すみません
>if(argc>2) return -1;
if(argc<1) return -1です。

Re:CSVのファイルを・・・・

Posted: 2007年11月07日(水) 02:47
by たまー
miyazaさん早い回答ありがとうございます><
思った感じでできております^^
やっぱりそのやり方がいいんですね~^^
すごく参考になりあmした^^