# HG changeset patch # User e085768 # Date 1311327599 -32400 # Node ID d59f3906e74b882c536ab53102dbb1f64e1a5667 # Parent 42337585fb7c44af534f1deae4b1cc88fa746f35 add getStrFromFile diff -r 42337585fb7c -r d59f3906e74b Makefile diff -r 42337585fb7c -r d59f3906e74b Makefile.def diff -r 42337585fb7c -r d59f3906e74b Makefile2 diff -r 42337585fb7c -r d59f3906e74b getStrFromFile.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/getStrFromFile.cc Fri Jul 22 18:39:59 2011 +0900 @@ -0,0 +1,74 @@ +/* getStrFromFile.cc */ + +#include "getStrFromFile.h" +#include +#include +#include + +/* + getStrFromFile関数 + 指定したテキストファイル内から, + ある文字列(searchStartStr)とある文字列(searchEndStr)の間の文字列を抜き出す. + 抜き出した文字列の数を返す. + char **date に抜き出した文字列を二次元配列のポインタを渡す. + 中でmallocしてるから、使い終わったら free(date)しないとダメかも + reallocとかでfree()しなくて良い方法も教えて下さい. +*/ + +int getStrFromFile( char **getStrDate, 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'; + + int searchStartStrLen = strlen(searchStartStr); + + // +searchStartStrLenで最初の余分な文字列をカウントしないようにする + int lenNum = strlen(p1 + searchStartStrLen); + + // 動的にメモリ確保したい。なんかオカしいってのはわかるケド、良い方法が思いつかん + getStrDate[num] = (char*)malloc(sizeof(char)*lenNum); + + strcpy(getStrDate[num], p1+searchStartStrLen); + + num ++; + } + } + + fclose( fp ); + + printf("num = %d\n",num); + + for( int i = 0; i < num; i ++ ){ + printf("getStrDate[%d] = %s\n", i, getStrDate[i]); + } + + return num; +} diff -r 42337585fb7c -r d59f3906e74b getStrFromFile.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/getStrFromFile.h Fri Jul 22 18:39:59 2011 +0900 @@ -0,0 +1,3 @@ +/* getStrFromFile.h */ + +int getStrFromFile( char **getStrDate, const char *fname, const char *searchStartStr, const char *searchEndStr );