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