電子書籍の厳選無料作品が豊富!

こんにちは。

C言語で、テキストファイルの文章の一部を削除してすっきりした形で出力したいと考えています。具体的には、下のfile.txtの中身の、


22:26:37.617570 IP (tos 0x10, ttl 64, id 6677, offset 0, flags [DF], proto: TCP (6), length: 100) 10.1.4.12.ssh > 10.1.4.99.54812: P 1893099304:1893099352(48) ack 3531241764 win 1430 <nop,nop,timestamp 1598028307 370716255>

この長ったらしい上の一行を、

22:26:37.617570 IP 10.1.4.12.ssh > 10.1.4.99.54812: tcp 48

というシンプルな形式に変えて出力したいと考えています。


いらない部分の一つ目は「IP」から右の、
(tos 0x10, ttl 64, id 6677, offset 0, flags [DF], proto: TCP (6), length: 100)までと、

二つ目は「54812」から右の
: P 1893099304:1893099352(48) ack 3531241764 win 1430<nop,nop,timestamp 1598028 307 370716255>
までです。

良いやり方をご存知であればご教授頂けないでしょうか。どうぞよろしくお願いします。

A 回答 (1件)

C言語でやるなら、strtok()等の文字列処理系の関数でごりごりやるしかないと思います。


たとえば対象となる文章の中のカッコ()の数、Pの位置が毎回同じなのであれば、その特徴を元に抽出させるような方法しかないかと。

char str[] = "22:26:37.617570 IP (tos 0x10, ttl 64, id 6677, offset 0, flags [DF], proto: TCP (6), length: 100) 10.1.4.12.ssh > 10.1.4.99.54812: P 1893099304:1893099352(48) ack 3531241764 win 1430 <nop,nop,timestamp 1598028307 370716255>";

char *tok;
char buf[256]="";

// 前文を取得
tok = strtok(str, "(");
strcpy( buf, tok);

// 中文を取得
tok = strtok(NULL, ")");
tok = strtok(NULL, ")");
*(tok + 1) = '\0';
tok = strtok(NULL, "P");
strcat(buf, tok);

// 後文を取得
tok = strtok(NULL, "(");
tok = strtok(NULL, ")");
strcat(buf, "tcp ");
strcat(buf, tok);


printf("%s", buf);
    • good
    • 0
この回答へのお礼

ご回答有難う御座います。
参考にさせて頂きますね。

お礼日時:2008/11/03 13:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!