No.14399![]() |
sscanfを使ってデータを格納するには 投稿者---正直(2004/06/03 00:42:41) |
||
[20040601 09:00:00] smtp[1234]: smtp[36]: connect from tokyo1 [20040601 09:00:00] smtp[1234]: smtp[36]: from <・・・・・・・・・・・・・・・> size=1234 htpr=1 [20040601 09:00:10] smtp[1234]: smtp[36]: from delivae aaaaa [20040601 09:00:10] smtp[44425]: smtp[128]: connect from osaka1 [20040601 09:00:11] smtp[44425]: smtp[128]: from <・・・・・・・・・・・・・・・> size=51 htpr=1 [20040601 09:00:00] smtp[44425]: smtp[128]: from delivae aaaaa : : このようなデータがあるファイルに入っています。 この中から日付、時間、プロセスID(1番目のsmtpの番号)、スレッドID(2番目のsmtpの番号) サイズ(size=XXXX)のデータを、sscanfで取り出し、格納していきたいのですが、 上手く行きません。 アドバイスお願いします while(fgets(buff,sizeof buff,fp) != NULL) { sscanf(buff+20 "smtp[%s[^]]]: smtp[%s[^]]]:",pid,tid); とか sscanf(buff+20 "smtp[%s[^]][^:]]: smtp[%s[^]][^:]]:%*[^\n]",pid,tid); とか sscanf(buff+20, "smtp[^[][%s[^]][^:]]:%*%[^]:]]:", pid,tid); とか } プロセスID、スレットIDを取得し、次のレコードのプロセスID、すれっとIDと一致した ところのサイズ(size=XXXX)をとりたいのですが、プロセスID、スレットIDの[]の中が 上手く取り出すことができず、日付、時間、サイズ等を取り出すこもできません。 |
No.14404![]() |
Re:sscanfを使ってデータを格納するには 投稿者---RAPT(2004/06/03 01:36:48) |
||
Win2ksp4/VC++6sp6 #include <stdio.h> int main() { const char *str="[20040601 09:00:00] smtp[1234]: smtp[36]: connect from tokyo1"; char pid[10] = {0}, tid[10] = {0}; sscanf(str, "%*[^a-z]%*[^0-9]%[0-9]%*[^0-9]%[0-9]", pid, tid); printf("pid=%s\n", pid); printf("tid=%s\n", tid); return 0; } 分かるかとは思うが、念のため。 "%*[^a-z]" … アルファベットで始まる直前までスキップ "%*[^0-9]" … 数字で始まる直前までスキップ "%[0-9]" … 数字文字列を入力対象とする MSDN Library |
No.14405![]() |
Re:sscanfを使ってデータを格納するには 投稿者---かずま(2004/06/03 02:17:05) |
||
#include <stdio.h> int main(void) { char buf[1024]; int n, year, month, day, hour, min, sec, pid, tid, size; while (fgets(buf, sizeof buf, stdin)) { n = sscanf(buf, "[%4d%2d%d%d:%d:%d] smtp[%d]: smtp[%d]%*[^>]> size=%d", &year, &month, &day, &hour, &min, &sec, &pid, &tid, &size); if (n < 8) continue; if (n == 8) size = 0; printf("%d/%02d/%02d %02d:%02d:%02d pid=%-7d tid=%-4d size=%d\n", year, month, day, hour, min, sec, pid, tid, size); } return 0; } |
No.14406![]() |
ありがとうございました。 投稿者---正直(2004/06/03 09:06:38) |
||
RAPT様、かずま様 サンプルありがとうございました。 質問時に書いたデータフォーマットと実際のデータフォーマット と異なってしまいましたが、サンプルをもとにして取得すること ができました。 ありがとうございました。 |