Mercurial > hg > old > magoroku_racing
changeset 135:d59f3906e74b
add getStrFromFile
author | e085768 |
---|---|
date | Fri, 22 Jul 2011 18:39:59 +0900 |
parents | 42337585fb7c |
children | c62819f16d43 |
files | Makefile Makefile.def Makefile2 getStrFromFile.cc getStrFromFile.h |
diffstat | 2 files changed, 77 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /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 <stdio.h> +#include <stdlib.h> +#include <string.h> + +/* + 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; +}