C言語読み出しプロファイル
2707 ワード
プロファイル:
a.txt
読み込みルール:
1「#」で始まるものを注釈として読みません
2空行も読み取らない
3'='の両側にスペースを付けることができます
ここではまず使う知識点についてお話しします
1アサーションの使用
assert()マクロの使い方
注意:assertは関数ではなくマクロです.Cのassert.hヘッダファイルにあります.
assertマクロのプロトタイプ定義はでは、条件がエラーを返すと、プログラムの実行が終了し、プロトタイプ定義が次のように機能します.
#includevoid assert( int expression );
assertの役割は、式expressionを先に計算し、値が偽(すなわち0)の場合、標準エラーストリームstderrにエラー情報を印刷し、abortを呼び出してプログラムの実行を終了することです.そうしないと、assert()は何の役割もありません.マクロassert()は、通常、プログラムの正常な動作を確認するために使用されます.式の構成が間違っていない場合にのみ真の値になります.デバッグが完了すると、マクロNDEBUGに定義がある場合、マクロassert()の定義が空になるため、ソースコードからassert()文を削除する必要はありません.
2 strtok()--文字列分割関数の使用
ヘッダファイル:#include
定義関数:char*strtok(char*s,const char*delim);
関数の説明:strtok()は文字列を個々のセグメントに分割するために使用される.
パラメータsは分割しようとする文字列を指し、パラメータdelimは分割文字列であり、
strtok()がパラメータsの文字列にパラメータdelimの分割文字を発見すると、その文字は0文字に変更される.
1回目の呼び出しではstrtok()にパラメータs文字列を与える必要があり、以降の呼び出しではパラメータsをNULLに設定.
呼び出しが成功するたびに、次の分割後の文字列ポインタが返される.
戻り値:次の分割後の文字列ポインタを返し、分割できない場合はNULLを返す.
次は具体的なコードです
結果を表示:
基本的な読み出しプロファイルは、これで終わりです!
a.txt
# ip=sadf
ip =192.168.246.22
dns = 218.85.157.99
読み込みルール:
1「#」で始まるものを注釈として読みません
2空行も読み取らない
3'='の両側にスペースを付けることができます
ここではまず使う知識点についてお話しします
1アサーションの使用
assert()マクロの使い方
注意:assertは関数ではなくマクロです.Cのassert.hヘッダファイルにあります.
assertマクロのプロトタイプ定義は
#include
assertの役割は、式expressionを先に計算し、値が偽(すなわち0)の場合、標準エラーストリームstderrにエラー情報を印刷し、abortを呼び出してプログラムの実行を終了することです.そうしないと、assert()は何の役割もありません.マクロassert()は、通常、プログラムの正常な動作を確認するために使用されます.式の構成が間違っていない場合にのみ真の値になります.デバッグが完了すると、マクロNDEBUGに定義がある場合、マクロassert()の定義が空になるため、ソースコードからassert()文を削除する必要はありません.
2 strtok()--文字列分割関数の使用
ヘッダファイル:#include
定義関数:char*strtok(char*s,const char*delim);
関数の説明:strtok()は文字列を個々のセグメントに分割するために使用される.
パラメータsは分割しようとする文字列を指し、パラメータdelimは分割文字列であり、
strtok()がパラメータsの文字列にパラメータdelimの分割文字を発見すると、その文字は0文字に変更される.
1回目の呼び出しではstrtok()にパラメータs文字列を与える必要があり、以降の呼び出しではパラメータsをNULLに設定.
呼び出しが成功するたびに、次の分割後の文字列ポインタが返される.
戻り値:次の分割後の文字列ポインタを返し、分割できない場合はNULLを返す.
次は具体的なコードです
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>
/* */
char * del_left_trim(char *str) {
assert(str != NULL);
for (;*str != '\0' && isblank(*str) ; ++str);
return str;
}
/* */
char * del_both_trim(char * str) {
char *p;
char * szOutput;
szOutput = del_left_trim(str);
for (p = szOutput + strlen(szOutput) - 1; p >= szOutput && isblank(*p);
--p);
*(++p) = '\0';
return szOutput;
}
/* */
int main(int argc, char **argv) {
FILE * fp = NULL;
/* a.txt*/
fp = fopen("./a.txt", "r");
/*��_�^*/
char buf[64];
char s[64];
/* */
char * delim = "=";
char * p;
char ch;
while (!feof(fp)) {
if ((p = fgets(buf, sizeof(buf), fp)) != NULL) {
strcpy(s, p);
ch=del_left_trim(s)[0];
/* , */
if (ch == '#' || isblank(ch) || ch=='
')
continue;
/* */
p=strtok(s, delim);
if(p)
printf("%s", del_both_trim(p));
while ((p = strtok(NULL, delim)))
printf("%s ", del_both_trim(p));
printf("
");
}
}
return 0;
}
結果を表示:
ip192.168.246.22
dns218.85.157.99
基本的な読み出しプロファイルは、これで終わりです!