Mercurial > hg > old > magoroku_racing
view getStrFromFile.cc @ 148:c920a164d68a gongo
merge
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 30 Jul 2011 14:40:13 +0900 |
parents | be127b7d1812 |
children |
line wrap: on
line source
/* getStrFromFile.cc */ #include "getStrFromFile.h" #include <stdio.h> #include <stdlib.h> #include <string.h> /* getStrFromFile関数 指定したテキストファイル内から, ある文字列(searchStartStr)とある文字列(searchEndStr)の間の文字列を抜き出す. 抜き出した文字列の数を返す. char **date に抜き出した文字列を二次元配列のポインタを渡す. 中でmallocしてるから、使い終わったら free(date)しないとダメかも reallocとかでfree()しなくて良い方法も教えて下さい. */ int getStrFromFile( char **getStrData, const char *fname, const char *searchStartStr, const char *searchEndStr ) { // 読み込んだ文字列の回数. 最後にコレを返す int num = 0; FILE *fp; const int BUFSIZE = 256; char buf[BUFSIZE]; // 一行読み込み fp = fopen( fname, "r" ); if ( fp ==NULL ){ printf("fileNameError\n"); return 0; } // ファイルの終端まで一行読み込みをループする while( feof(fp) == 0 ){ fgets( buf, BUFSIZE, fp ); char *p1 = strstr( buf, searchStartStr ); // 文字列検索。 // 見つけた位置のポインタを返す // 見つけれなかったらNULLを返す if( p1 != NULL ){ //int p1Len = strlen(p1); char *p2 = strstr( p1, searchEndStr ); //int p2Len = strlen(p2); // // 余分なsearchEndStr以降の文字列を切り捨てるため空白文字(改行文字だっけ?'\0'ってなんだっけ) //p1[p1Len - p2Len] = '\0'; *p2 = '\0'; int searchStartStrLen = strlen(searchStartStr); // +searchStartStrLenで最初の余分な文字列をカウントしないようにする int lenNum = strlen(p1 + searchStartStrLen); // 動的にメモリ確保したい。なんかオカしいってのはわかるケド、良い方法が思いつかん getStrData[num] = (char*)malloc(sizeof(char)*lenNum+1); strcpy(getStrData[num], p1+searchStartStrLen); num ++; if (num>=64) { printf("Too many objects in file %s\n", fname); exit(0); } } } fclose( fp ); printf("num = %d\n",num); for( int i = 0; i < num; i ++ ){ printf("getStrData[%d] = %s\n", i, getStrData[i]); } return num; }