C言語入門/正規表現1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
''[[FrontPage]]''
*この記事はまだ書きかけです。管理人が今後加筆していく予...
* C言語と正規表現 テストその1 [#s320671b]
テキストファイルの内容をメモリ領域にコピーし、正規表現を...
解析の題材として、C/C++言語ソースファイルを扱う。~
** 制約 [#dbf36254]
MFC、.NET関数を使用しないこと。~
~
~
さらによい方法が見つかればその2を書きます。
#include <stdio.h> /* ...
#include <regex.h> /* C言語...
/* U...
#include <string.h> /* ...
#include <sys/stat.h> /* for s...
#include <stdlib.h> /* for m...
/* ...
/* ...
#define RET_OK 0 /* 正常...
#define RET_NG -1 /* 異常...
#define F_NUM 40 /* 正規...
#define MAX_F_NAME 256 /* ロン...
#define FILE_NG -2 /* ファ...
#define INDEX_OK 0 /* 関数...
#define MODE_ONE 1 /* 検索...
#define MODE_TWO 2 /* 検索...
#define MODE_THREE 3 /* 検索...
#define MODE_FOUR 4 /* 検索...
/* ...
char fileRootin( char** de_desk ); /* プロ...
char styleDel( char* de_desk, unsigned char mode); /* プ...
char styleSearch( char* de_desk, unsigned char mode ); /...
/* ...
int main( void ) /* コン...
{ /* ...
char **desk; /* 作業...
int i = 0; /* カウ...
/* ...
regex_t reg; /* for ...
regmatch_t position[F_NUM]; /* for ...
/* ...
char regRtn = RET_OK; /* 正規...
char index = RET_OK; /* 関数...
char rtnCode = RET_OK; /* リタ...
/* ...
while( 1 ) /* 無限...
{ /* ...
index = fileRootin( /* ファ...
desk ); /* OUT: ...
if( INDEX_OK != index ) /* 戻り...
{ /* 正常...
printf("ファイルオープンエラー\n"); /* 画面...
rtnCode = RET_NG; /* リタ...
break; /* 処理...
} /* ...
/* ...
printf("一行目のデータは\n"); /* 確認...
while((*desk)[i] != '\n') /* ...
{ /* ...
putchar((*desk)[i]); /* ...
i += 1; /* ...
} /* ...
putchar('\n'); /* ...
/* 以下...
index = styleDel( /* コメ...
*desk, /* IN: ...
MODE_FOUR ); /* IN: ...
if( INDEX_OK != index ) /* ...
{ /* ...
printf("コメント削除エラー\n"); /* ...
rtnCode = RET_NG; /* ...
break; /* ...
} /* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
break; /* ...
} /* ...
/* ...
free(*desk); /* 作業...
return ( rtnCode ); /* ...
} /* ...
/* ...
char fileRootin( char** de_desk ) /* ファ...
{ /* IN: ...
FILE *fin; /* ファ...
/* ...
char fileName[MAX_F_NAME]; /* ファ...
/* ...
char rtnCode = RET_OK; /* リタ...
char index = RET_OK; /* 戻り...
/* ...
char spew = 0; /* バッ...
struct stat st; /* for s...
/* ...
while( 1 ) /* 無限...
{ /* ...
printf("検索元ファイル名の入力 > "); /* 画面...
fgets(fileName, MAX_F_NAME, stdin); /* 入力...
if(!strchr(fileName, '\n')) /* 入力...
{ /* 入力...
while(spew != '\n') /* stdin...
{ /* ...
spew = fgetc(stdin); /* ...
} /* ...
spew = '\0'; /* ...
} /* ...
/* ...
fileName[strlen(fileName) - 1] = '\0'; /* 末尾...
index = stat(fileName, &st); /* シス...
if(INDEX_OK != index) /* 異常...
{ /* ...
printf("statまたは入力のエラー\n"); /* 画面...
rtnCode = RET_NG; /* リタ...
break; /* 処理...
} /* ...
/* ...
*de_desk = (char*)malloc(st.st_size); /* 作業...
if(NULL == de_desk) /* 異常...
{ /* ...
printf("mallocでエラー\n"); /* 画面...
rtnCode = RET_NG; /* リタ...
break; /* 処理...
} /* ...
/* ...
fin = fopen(fileName, "rb"); /* 入力...
if(NULL == fin) /* 異常...
{ /* ...
printf("fopenでエラー(入力元)\n"); /* 画面...
rtnCode = FILE_NG; /* リタ...
break; /* 処理...
} /* ...
/* ...
fread(*de_desk, sizeof(char), st.st_size, fin); ...
fclose(fin); /* 入力...
break; /* 処理...
} /* ...
/* ...
return ( rtnCode ); /* ...
}
/* 以下...
char styleDel( char* desk, unsigned char de_mode )
{
styleSearch(
desk,
de_mode );
return 0;
}
char styleSearch( char* desk, unsigned char de_mode )
{
return 0;
}
*** 修正履歴 [#n2784e26]
ダブルポインタで、
*desk[i]
では参照エラー
(*desk)[i]
が正しい。~
*** 課題 [#g970739e]
+<regex.h>がインクルードできないため、boostの導入が必要か...
-備考~
ファイルロックは自分で実装してください。
終了行:
''[[FrontPage]]''
*この記事はまだ書きかけです。管理人が今後加筆していく予...
* C言語と正規表現 テストその1 [#s320671b]
テキストファイルの内容をメモリ領域にコピーし、正規表現を...
解析の題材として、C/C++言語ソースファイルを扱う。~
** 制約 [#dbf36254]
MFC、.NET関数を使用しないこと。~
~
~
さらによい方法が見つかればその2を書きます。
#include <stdio.h> /* ...
#include <regex.h> /* C言語...
/* U...
#include <string.h> /* ...
#include <sys/stat.h> /* for s...
#include <stdlib.h> /* for m...
/* ...
/* ...
#define RET_OK 0 /* 正常...
#define RET_NG -1 /* 異常...
#define F_NUM 40 /* 正規...
#define MAX_F_NAME 256 /* ロン...
#define FILE_NG -2 /* ファ...
#define INDEX_OK 0 /* 関数...
#define MODE_ONE 1 /* 検索...
#define MODE_TWO 2 /* 検索...
#define MODE_THREE 3 /* 検索...
#define MODE_FOUR 4 /* 検索...
/* ...
char fileRootin( char** de_desk ); /* プロ...
char styleDel( char* de_desk, unsigned char mode); /* プ...
char styleSearch( char* de_desk, unsigned char mode ); /...
/* ...
int main( void ) /* コン...
{ /* ...
char **desk; /* 作業...
int i = 0; /* カウ...
/* ...
regex_t reg; /* for ...
regmatch_t position[F_NUM]; /* for ...
/* ...
char regRtn = RET_OK; /* 正規...
char index = RET_OK; /* 関数...
char rtnCode = RET_OK; /* リタ...
/* ...
while( 1 ) /* 無限...
{ /* ...
index = fileRootin( /* ファ...
desk ); /* OUT: ...
if( INDEX_OK != index ) /* 戻り...
{ /* 正常...
printf("ファイルオープンエラー\n"); /* 画面...
rtnCode = RET_NG; /* リタ...
break; /* 処理...
} /* ...
/* ...
printf("一行目のデータは\n"); /* 確認...
while((*desk)[i] != '\n') /* ...
{ /* ...
putchar((*desk)[i]); /* ...
i += 1; /* ...
} /* ...
putchar('\n'); /* ...
/* 以下...
index = styleDel( /* コメ...
*desk, /* IN: ...
MODE_FOUR ); /* IN: ...
if( INDEX_OK != index ) /* ...
{ /* ...
printf("コメント削除エラー\n"); /* ...
rtnCode = RET_NG; /* ...
break; /* ...
} /* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
/* ...
break; /* ...
} /* ...
/* ...
free(*desk); /* 作業...
return ( rtnCode ); /* ...
} /* ...
/* ...
char fileRootin( char** de_desk ) /* ファ...
{ /* IN: ...
FILE *fin; /* ファ...
/* ...
char fileName[MAX_F_NAME]; /* ファ...
/* ...
char rtnCode = RET_OK; /* リタ...
char index = RET_OK; /* 戻り...
/* ...
char spew = 0; /* バッ...
struct stat st; /* for s...
/* ...
while( 1 ) /* 無限...
{ /* ...
printf("検索元ファイル名の入力 > "); /* 画面...
fgets(fileName, MAX_F_NAME, stdin); /* 入力...
if(!strchr(fileName, '\n')) /* 入力...
{ /* 入力...
while(spew != '\n') /* stdin...
{ /* ...
spew = fgetc(stdin); /* ...
} /* ...
spew = '\0'; /* ...
} /* ...
/* ...
fileName[strlen(fileName) - 1] = '\0'; /* 末尾...
index = stat(fileName, &st); /* シス...
if(INDEX_OK != index) /* 異常...
{ /* ...
printf("statまたは入力のエラー\n"); /* 画面...
rtnCode = RET_NG; /* リタ...
break; /* 処理...
} /* ...
/* ...
*de_desk = (char*)malloc(st.st_size); /* 作業...
if(NULL == de_desk) /* 異常...
{ /* ...
printf("mallocでエラー\n"); /* 画面...
rtnCode = RET_NG; /* リタ...
break; /* 処理...
} /* ...
/* ...
fin = fopen(fileName, "rb"); /* 入力...
if(NULL == fin) /* 異常...
{ /* ...
printf("fopenでエラー(入力元)\n"); /* 画面...
rtnCode = FILE_NG; /* リタ...
break; /* 処理...
} /* ...
/* ...
fread(*de_desk, sizeof(char), st.st_size, fin); ...
fclose(fin); /* 入力...
break; /* 処理...
} /* ...
/* ...
return ( rtnCode ); /* ...
}
/* 以下...
char styleDel( char* desk, unsigned char de_mode )
{
styleSearch(
desk,
de_mode );
return 0;
}
char styleSearch( char* desk, unsigned char de_mode )
{
return 0;
}
*** 修正履歴 [#n2784e26]
ダブルポインタで、
*desk[i]
では参照エラー
(*desk)[i]
が正しい。~
*** 課題 [#g970739e]
+<regex.h>がインクルードできないため、boostの導入が必要か...
-備考~
ファイルロックは自分で実装してください。
ページ名: