C言語関係掲示板

過去ログ

No.1140 入力した位置のテキストを読む

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

入力した位置のテキストを読む
投稿者---bf(2004/06/09 09:37:05)


あああああ
ここここここここ
ねねねね

ううううううううう
れれれれ
ひひひひひひ
どどどどどどどどどどど

ふふふ
ののののののの
むむむむむむ
ぎぎぎぎぎ

すすすすすすすすす
をををををを
けけけ

えええええええええ
ししししししししし

このようなテキストから「1」を入力すると改行が入るまでの
  あああああ
  ここここここここ
  ねねねね
「2」を入力すると同じく
  ううううううううう
  れれれれ
  ひひひひひひ
  どどどどどどどどどどど
と出力されるプログラムを考えています。
このテキストは5000行ぐらいあるものとします。
いいアドバイスをお願いします。



No.14525

Re:入力した位置のテキストを読む
投稿者---shu(2004/06/09 09:43:43)


改行の連続に注目してみる。


No.14530

Re:入力した位置のテキストを読む
投稿者---あかま(2004/06/09 14:42:07)


ファイルから直読みでランダムアクセスは無理だろうからひたすら線形探索。
fgets(str,256,fp);
で一行読み込んで
str[0] == '\n'
なら改行○個目…ってやればそんなに難しくないかと。

もしくはファイルの内容を全て読み込んでしまえばランダムアクセスも可。



No.14531

Re:入力した位置のテキストを読む
投稿者---かずま(2004/06/09 19:35:23)


    while (scanf("%d", &i) == 1 && i > 0) {
        rewind(fp);
        while (--i > 0)
            while (fgets(buf, sizeof buf, fp) && *buf != '\n')
                ;
        while (fgets(buf, sizeof buf, fp) && *buf != '\n')
            fputs(buf, stdout);
    }

----------------------------------------------------------------------
または、

    fpos_t pos[3000];

    for (i = 0; i < 3000; i++) {
        fgetpos(fp, pos + i);
        while (fgets(buf, sizeof buf, fp) && *buf != '\n')
            ;
    }

    while (scanf("%d", &i) == 1 && i > 0 && i <= 3000) {
        fsetpos(fp, pos + i - 1);
        while (fgets(buf, sizeof buf, fp) && *buf != '\n')
            fputs(buf, stdout);
    }



No.14532

Re:入力した位置のテキストを読む
投稿者---かずま(2004/06/09 19:53:14)


訂正します。(無駄が多いので)

    fpos_t pos[3000];

    for (n = 0; n < 3000; n++) {
        fgetpos(fp, pos + n);
        while (fgets(buf, sizeof buf, fp) && *buf != '\n')
            ;
        if (feof(fp)) break;
    }

    while (scanf("%d", &i) == 1 && i > 0 && i <= n) {
        fsetpos(fp, pos + i - 1);
        while (fgets(buf, sizeof buf, fp) && *buf != '\n')
            fputs(buf, stdout);
    }