C言語関係掲示板

過去ログ

No.600.テキストデータの分解と編集

[戻る] [ホームページ]
No.5737

ファイルデータの渡し方など
投稿者---Aqua(2003/04/09 22:57:56)


はじめまして。

1ヶ月くらい前からこちらのサイトを知りまして、
ちょくちょくROMしていたアクアと申します。
C言語を独学で勉強し始め約3ヶ月程になるのですが、
自力で乗り越えるには困難な壁にぶつかってしまいました。
お知恵をお借りできないでしょうか。

例えばこのような内容のテキストデータがあったとします。

--------------------------
########################
# testfile #
########################

192.168.10.100 mail mailserver onigiri
192.168.10.200 webserver mugicha.hoge.co.jp
--------------------------

この内容を保持できるストラクチャを作り、データを持たせます。
そして、このデータに対して「mail」で検索をかけた場合、

---------------------
IP:192.168.10.100
Hostname:mail
etc1:mailserver
etc2:onigiri
---------------------

(IPやHost,etcの間はスペース、またはTABとします)
と表示させられるようにしたいのですが、
どのようにすれば実現できるでしょうか。
そもそものデータを渡す時点で
どうすればよいのかわからず、躓いてしまっています。

1文字ずつ配列で持たせていって、スペースなどがある毎に
構造体にいれようか??
とか、色々考え試してはみたのですが、
やればやる程にドツボなんです・・・・・

No.5744

Re:ファイルデータの渡し方など
投稿者---かずま(2003/04/10 13:59:45)


#include <stdio.h>
#include <string.h>

int main(void)
{
    FILE *fp;  int i;
    char name[256], buf[1024], *ip, *hostname, *etc;

    for (;;) {
        printf("--- Hostname(. for quit): ");
        if (scanf("%255s", name) != 1 || name[0] == '.') break;
        fp = fopen("testfile", "r");
        if (fp == NULL) return 1;
        while (fgets(buf, sizeof buf, fp)) {
            ip = strtok(buf, " \t\n");
            if (ip == NULL) continue;
            hostname = strtok(NULL, " \t\n");
            if (hostname == NULL || strcmp(name, hostname)) continue;
            printf("IP:%s\nHostname:%s\n", ip, hostname);
            for (i = 1; etc = strtok(NULL, " \t\n"); i++)
                printf("etc%d:%s\n", i, etc);
        }
        fclose(fp);
    }
    return 0;
}


No.5769

Re:ファイルデータの渡し方など
投稿者---Aqua(2003/04/13 17:10:05)


遅レスになってしまってすいません。
返信ありがとうございます。
このソースを参考にしながら取り組めば
何とかなりそうな気がしてきました。

strtokという関数自体を知らなかったりしたので
まだまだ大分勉強不足ですね・・・・

ありがとうございました。