singlepost

Чтение из файла n-строки << На главную или назад  

Подскажите, пожалуйста, как начать чтение из файла со случайной строки?

46 ответов в теме “Чтение из файла n-строки”

  1. 16
    Александр Ступников ответил:

    Спасибо всем!! Всё заработало!

  2. 15
    Жека Кирпичев ответил:

    Ну тогда уж лучше просто замэпить файл в память, и пусть ОС сама разбирается, какой там буфер.

    А лучше всего – посмотреть в codesearch.google.com исходники какого-нибудь tail или less :)

  3. 14
    Леонид Максимов ответил:

    по 4096 символов читать тоже не сахар. надо попробовать выпросить у системы буфер побольше (начинать, скажем, с 64к и по убывающей), а потом читать в него

  4. 13
    Александр Пинский ответил:

    2 Жека jkff Кирпичев
    Я же сказал – алгоритм лобовой.Понятно, что для общего случая с неизвестной заранее максимальной длинной строк не подходит и нужно, как ты предложил, делать буферное считывание.
    Но автор темы просто задал вопрос, как это можно сделать, а не просил мегауниверсальный и оптимизированный алгоритм ;)

  5. 12
    Жека Кирпичев ответил:

    Эта прога сдохнет на строчке более 1024 символов.
    Надо читать по 4096 байт (например) в буфер, и при каждом чтении смотреть, сколько в буфере "\n"ов. Накопилось достаточно – вот и славно. И никаких нахрен fscanf'ов, это будет медленно и небезопасно.

  6. 11
    Александр Пинский ответил:

    неа, scanf возвращает количество переменных, которым были присвоены значения, а не признак конца файла ;) а вот eof и feof как раз проверяют на конец файла

  7. 10
    Dispatch Level ответил:

    xVir, !eof(f) пахать не будет! надо юзать
    scanf(…) != EOF

  8. 9
    Данил Скачков ответил:

    Ну дак поставь просто проверку на окончание файла.
    while(i<n && !eof(f))
    {
    fscanf(f, "%s\n", str);
    }

    тока в таком случае если строк меньше чем надо, то возвратится последняя

  9. 8
    Александр Пинский ответил:

    ну я же предупредил ))) к тому же, насколько помню, если читать за концом файла, то прога рухнет и выйдет из цикла ;)

  10. 7
    Vadim Ershov ответил:

    Ага, не застрахован, это точно, например от бесконечного цикла =)

  11. 6
    Александр Пинский ответил:

    \n – новая строка
    \r – возврат каретки
    В Windows в текстовых файлах для обозначения новой строки используются эти два символа. Правда, если не ошибаюсь, библиотека C для работы с файлами, преобразует последовательно идущие "\r\n" в "\n"

    Вообще, это можно сделать примерно так

    int i;
    int n = 5; //с какой строки читаем, нумерация строк с единицы
    FILE f;
    char str[1024]; //буфер, куда считывается строка

    f = fopen("file.txt", "rt");
    i = 0;
    while(i<n)
    {
    fscanf(f, "%s\n", str);
    }
    //теперь в str находится нужная строка файла (пятая в данном случае)

    Алгоритм лобовой, не застрахован от ошибок.

  12. 5
    Антон Чапоргин ответил:

    \r возврат каретки. это для win так надо делать.

  13. 4
    Александр Ступников ответил:

    эээ.. где \n – перевод строки, а \r – ???

  14. 3
    Dispatch Level ответил:

    scanf("\r\n"), наверно=)

  15. 2
    Александр Ступников ответил:

    на C
    а вот как отсчитать строку не могу понять!

  16. 1
    Кирилл Агалаков ответил:

    если скрипт совсем табуреточного уровня то:
    береш целое рандомное число, через цикл отсчитываешь нужную строчку (если поддерж процедуру поиска по строке то все еше проще)
    на каком языке то?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.