annotate getStrFromFile.cc @ 143:be127b7d1812

minor fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 23 Jul 2011 10:18:28 +0900
parents 6674b7498075
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
135
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
1 /* getStrFromFile.cc */
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
2
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
3 #include "getStrFromFile.h"
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
4 #include <stdio.h>
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
5 #include <stdlib.h>
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
6 #include <string.h>
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
7
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
8 /*
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
9 getStrFromFile関数
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
10 指定したテキストファイル内から,
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
11 ある文字列(searchStartStr)とある文字列(searchEndStr)の間の文字列を抜き出す.
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
12 抜き出した文字列の数を返す.
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
13 char **date に抜き出した文字列を二次元配列のポインタを渡す.
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
14 中でmallocしてるから、使い終わったら free(date)しないとダメかも
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
15 reallocとかでfree()しなくて良い方法も教えて下さい.
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
16 */
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
17
143
be127b7d1812 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
18 int getStrFromFile( char **getStrData, const char *fname, const char *searchStartStr, const char *searchEndStr )
135
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
19 {
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
20 // 読み込んだ文字列の回数. 最後にコレを返す
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
21 int num = 0;
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
22
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
23 FILE *fp;
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
24
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
25 const int BUFSIZE = 256;
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
26 char buf[BUFSIZE]; // 一行読み込み
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
27
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
28 fp = fopen( fname, "r" );
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
29 if ( fp ==NULL ){
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
30 printf("fileNameError\n");
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
31 return 0;
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
32 }
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
33
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
34 // ファイルの終端まで一行読み込みをループする
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
35 while( feof(fp) == 0 ){
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
36
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
37 fgets( buf, BUFSIZE, fp );
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
38
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
39 char *p1 = strstr( buf, searchStartStr ); // 文字列検索。
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
40 // 見つけた位置のポインタを返す
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
41 // 見つけれなかったらNULLを返す
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
42
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
43 if( p1 != NULL ){
140
6674b7498075 course fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 139
diff changeset
44 //int p1Len = strlen(p1);
135
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
45 char *p2 = strstr( p1, searchEndStr );
140
6674b7498075 course fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 139
diff changeset
46 //int p2Len = strlen(p2); //
135
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
47
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
48 // 余分なsearchEndStr以降の文字列を切り捨てるため空白文字(改行文字だっけ?'\0'ってなんだっけ)
138
993d5f7e5f30 collision
e085768
parents: 135
diff changeset
49 //p1[p1Len - p2Len] = '\0';
139
dbf8858aceed malloc error in col.cc
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 138
diff changeset
50 *p2 = '\0';
135
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
51 int searchStartStrLen = strlen(searchStartStr);
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
52
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
53 // +searchStartStrLenで最初の余分な文字列をカウントしないようにする
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
54 int lenNum = strlen(p1 + searchStartStrLen);
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
55
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
56 // 動的にメモリ確保したい。なんかオカしいってのはわかるケド、良い方法が思いつかん
143
be127b7d1812 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
57 getStrData[num] = (char*)malloc(sizeof(char)*lenNum+1);
135
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
58
143
be127b7d1812 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
59 strcpy(getStrData[num], p1+searchStartStrLen);
135
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
60
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
61 num ++;
143
be127b7d1812 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
62 if (num>=64) {
be127b7d1812 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
63 printf("Too many objects in file %s\n", fname);
be127b7d1812 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
64 exit(0);
be127b7d1812 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
65 }
135
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
66 }
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
67 }
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
68
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
69 fclose( fp );
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
70
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
71 printf("num = %d\n",num);
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
72
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
73 for( int i = 0; i < num; i ++ ){
143
be127b7d1812 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 140
diff changeset
74 printf("getStrData[%d] = %s\n", i, getStrData[i]);
135
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
75 }
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
76
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
77 return num;
d59f3906e74b add getStrFromFile
e085768
parents:
diff changeset
78 }