Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 51, средняя оценка - 4.71
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
#1

работа с fseek и файлами - C++

18.10.2009, 00:15. Просмотров 6763. Ответов 7
Метки нет (Все метки)

задача:
совершить "прыжок" по строкам файла test.txt (строк, предположим, 20) и считав строку (предположим седьмую) вывести её на экран.

мой горе-код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <io.h>
 
using std::cout;
using std::endl;
 
int main()
{
    FILE *file = fopen("test.txt", "r");
    
    fseek(file, 7L, SEEK_SET);
    
    int n;
    
    fscanf(file,"%d",n);
    
    cout << n << endl;
    
    fclose(file);
    
    system("PAUSE");
    return 0;
}
проблема:
как не странно, но не работает(
помогите чем сможете...

PS: Для чего нужны функции fgets и fputs и как с ними работать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2009, 00:15     работа с fseek и файлами
Посмотрите здесь:
C++ Работа с файлами (fseek)
C++ Fseek и структуры
C++ fseek / fread
C++ fseek для ab
Функция fseek C++
fseek не работает C++
fseek вылетает C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
18.10.2009, 06:45     работа с fseek и файлами #2
и не будет, вот мат.часть
Для произвольного перемещения внутри файла служит функция fseek.
int fseek(FILE *F, long int offset, int origin);
Функция устанавливает указатель текущей позиции файла F, в соответствии
со значениями начала отсчета origin и смешения offset. Параметр offset равен
количеству байтов, на которые будет смешен указатель файла относительно
начала отсчета, заданного параметром origin. В качестве значения для параметра
origin должен быть взят одно из следующих значений, определенных в заголовке
stdio.h.
· SEEK_SET – отсчет смещения offset вести с начала файла;
· SEEK_CUR – отсчет смещения offset вести с текущей позиции файла;
· SEEK_END – отсчет смещения offset вести с конца файла.
Функция возвращает нулевое значение при успешном выполнении операции,
ненулевое – при возникновении сбоя при выполнении смещения.
Функция fseek фактически реализует прямой доступ к любому значению в
файле. Необходимо только знать месторасположение (номер байта) значения в
файле.
надеюсь понятно, что без данных о размере строк 7ую выделить не получиться
используй getline
в конце концов ты работаешь в С++, а там многое уже изобретено до нас, вот примерный код доступа к 7ой строке, можешь после сделать f.seek(0); и вернуться в начало файла
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <fstream>
#include <string>
 
 
using namespace std;
 
int main()
{
    string str;
    int count=0;
    ifstream f("file.txt"); 
    if (!(f.is_open()))  // проверка наличия первого файла с текстом
        cout<<"ERROR: not file ";
    else
    {
            while(!f.eof()) // чтении из файла
            {   
                getline(f, str);
                ++count;
                if (count==7)
                {
                    cout<<str; // выводим 7 ую
                    break;
                }
                        
            }   
        }
 
        f.close();
        cout << endl;
        system("PAUSE");
        return 0;
}
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,230
Завершенные тесты: 1
18.10.2009, 11:17     работа с fseek и файлами #3
G-Cat,что такое fseek,и для чего его используют?
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
18.10.2009, 11:20     работа с fseek и файлами #4
Цитата Сообщение от МедведЪ Посмотреть сообщение
G-Cat,что такое fseek,и для чего его используют?
я вмешаюсь, прочти внимательно второй пост. особенно цитируемый текст
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
18.10.2009, 11:22  [ТС]     работа с fseek и файлами #5
2 МедведЪ:
TanT описал в своём сообщении функцию fseek. Эта функция для "прыжка" в файле по строкам. Ну т.е. если тебе из твоего файла (*.txt, например) нужно считать 4-ую строку...но как доказал TanT ета функция не настолько универсальна как я думал(

Кто нибудь может посоветовать хорошие справочники по работе с ofstream\ifstream?
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,230
Завершенные тесты: 1
18.10.2009, 13:28     работа с fseek и файлами #6
G-Cat, как понял тебе просто надо читать какую то строчку из фалйа?правильно?как ты сказал напр 4ую
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
18.10.2009, 19:22  [ТС]     работа с fseek и файлами #7
да, но даже не то что бы считать, а сравнить с искомой (это дальше по задаче)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2009, 19:40     работа с fseek и файлами
Еще ссылки по теме:
Что делает fseek? C++
Fseek() для ifstream C++
C++ Функции fseek, _fseeki64
C++ C++ текстовые файлы. Не работает fseek
C++ Какие функции команды fseek() ?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
18.10.2009, 19:40     работа с fseek и файлами #8
2G-Cat: Приведи полный текст задачи.
fseek() используется для перехода на заданное смещение в файле В БАЙТАХ !
Так как ты не знаешь с какого байта начинается строка номер 7, то эта функция ничем не поможет.

Если тебе нужно считать 7-ую строку при нумерации строк с 1, то это делается так:
Читаем с помощью fgets() строку. Повторить 6 раз.
Читаем с помощью fgets() строку. Это и будет нужная 7-ая строка.
Yandex
Объявления
18.10.2009, 19:40     работа с fseek и файлами
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru