C言語・ファイルと文字列の操作プログラムについて!
ファイルのデータを1行ずつ読み込み、","で区切られた要素に分割して配列に格納するプログラムの作り方を教えてください。
下記のようなファイルがあり、各行の3つめの要素の数字(ハイフンを含む)を各行で比較し、昇順に行をソートするというプログラムを作成しております。
要素数は4つめ以降各行ばらばらです。
[ファイル test.txt]
2013/08/01,16:19,20130801161906-210164001071,,,川口,神奈川,,電話番号
2013/08/01,11:32,20130802003256-116091178056,鈴木,埼玉,mail,電話番号
2013/08/01,15:55,20130801155519-119072194140,,,山田,東京,mail
まず、ファイルを読み込み、3つめの要素を下記のように配列s[i]に格納しようとしたのですが、うまく配列に3つめの要素がはいってくれません。
strtokを用いたプログラムを作っているのですが、1行ずつ分割と表示はできるものの、それを配列に格納することができなくて困っております。
配列の格納にstrcpyを用いたところ、途中でプログラムが強制終了し、配列への格納ができませんでした。
[格納の例]
s[0]=20130801161906-210164001071
s[1]=20130802003256-116091178056
s[2]=20130801155519-119072194140
[自分のプログラム]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 300
int main()
{
char filename[] = "test.txt";
FILE *fp;
char data[MAX], *words[MAX],*s[MAX],*cp;
const char *delim=",";
int g,i=0,j,len;
// ファイル・オープン
if ((fp = fopen(filename, "r")) == NULL)
{
printf("ファイルのオープンに失敗\n");
exit(1);
}
while (fgets(data, MAX, fp) != NULL) //1行読み込む
{
cp = data;
for (len = 0; len < MAX; len++) {
if ((words[len] = strtok(cp, delim)) == NULL) //","で文字列を分割
break;
cp = NULL;
}
s[i] = words[2]; //3つ目の要素を配列に格納
i++;
}
for(j=0;j<3;j++){ //表示
printf("%s\n",s[j]);
}
[実行結果]
20130801155519-119072194140
20130801155519-119072194140
20130801155519-119072194140
プログラムの訂正箇所,上記と異なるプログラム,大体の流れ…
などなんでもかまいませんので、教えていただきたいです。よろしくお願いします。
お礼
回答ありがとうございます。 そうですよねぇ。。 でも、DBを使ってはいけないという仕様なんです。 いや、CDRより起動するシステムでディスクを使用 してはいけないという仕様なんです。 何度も無理だとは言っているんですが。