文字列操作(分割)のプログラムについて!
ファイルのデータを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つめの要素がはいってくれません。
配列の格納に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
プログラムの訂正箇所,上記と異なるプログラム,大体の流れ…
などなんでもかまいませんので、教えていただきたいです。よろしくお願いします。
お礼
すみませんでした。 私の勘違いで、ループの処理を誤っていました。 ありがとうございます!!
補足
すみません。調べてみます。