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;
+}
--- /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 );