Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

18.10.2009, 00:15. Просмотров 7295. Ответов 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 и как с ними работать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2009, 00:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос работа с fseek и файлами (C++):

Работа с файлами (fseek) - C++
В чем проблема и как ее устранить ? #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt; ...

fseek не работает - C++
Нужно записать данные в структурированный текстовый файл. Проблема заключается в том, что в части ввод данных, функция fseek не...

Функция fseek - C++
Здраствуйте! Пишу сейчас телефонную книгу. Точнее что-то наподобие этого. Появилась проблема. Мне необходимо из файла, в который раннее...

Fseek и структуры - C++
Добрый день,не могу разобраться с fseek в структурах / Нужно сделать запрос (zapros()) n-ой записи через fseek и вывести ее ,либо изменить...

fseek вылетает - C++
#include &lt;stdio.h&gt; #include &lt;windows.h&gt; char *filename; long size; File *in; char *infile; int main(int argc, char *argv) { ...

fseek / fread - C++
Всем привет! Такой вопрос возник. Есть строка, состоящая из нескольких &quot;записей&quot; в файле (буквы + числа). Нужно с помощью функций...

7
TanT
эволюционирую потихоньку
467 / 465 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
18.10.2009, 06:45 #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;
}
2
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,344
Завершенные тесты: 1
18.10.2009, 11:17 #3
G-Cat,что такое fseek,и для чего его используют?
0
TanT
эволюционирую потихоньку
467 / 465 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
18.10.2009, 11:20 #4
Цитата Сообщение от МедведЪ Посмотреть сообщение
G-Cat,что такое fseek,и для чего его используют?
я вмешаюсь, прочти внимательно второй пост. особенно цитируемый текст
0
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
18.10.2009, 11:22  [ТС] #5
2 МедведЪ:
TanT описал в своём сообщении функцию fseek. Эта функция для "прыжка" в файле по строкам. Ну т.е. если тебе из твоего файла (*.txt, например) нужно считать 4-ую строку...но как доказал TanT ета функция не настолько универсальна как я думал(

Кто нибудь может посоветовать хорошие справочники по работе с ofstream\ifstream?
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,344
Завершенные тесты: 1
18.10.2009, 13:28 #6
G-Cat, как понял тебе просто надо читать какую то строчку из фалйа?правильно?как ты сказал напр 4ую
0
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
18.10.2009, 19:22  [ТС] #7
да, но даже не то что бы считать, а сравнить с искомой (это дальше по задаче)
0
odip
Эксперт С++
7161 / 3223 / 58
Регистрация: 17.06.2009
Сообщений: 14,164
18.10.2009, 19:40 #8
2G-Cat: Приведи полный текст задачи.
fseek() используется для перехода на заданное смещение в файле В БАЙТАХ !
Так как ты не знаешь с какого байта начинается строка номер 7, то эта функция ничем не поможет.

Если тебе нужно считать 7-ую строку при нумерации строк с 1, то это делается так:
Читаем с помощью fgets() строку. Повторить 6 раз.
Читаем с помощью fgets() строку. Это и будет нужная 7-ая строка.
0
18.10.2009, 19:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2009, 19:40
Привет! Вот еще темы с ответами:

fseek для ab - C++
Нигде не могу найти работает ли fseek для режима ab??? или у аb статически указатель стоит в конце файла? мне нужно в середину файла...

Что делает fseek? - C++
Что делает fseek и зачем он нужен? fseek(firstFile,0,SEEK_SET); fseek(secondFile,0,SEEK_SET);

Fseek() для ifstream - C++
Знаю, что есть два вида открытия и закрытие файла. 1) Это чистый Си, когда: FILE * pf, * pr; pf = fopen(&quot;new1.txt&quot;, &quot;r&quot;); ...

Функции fseek, _fseeki64 - C++
Ребят как по умному объяснить преподавателю что я использую функцию _fseeki64 для того чтобы создавать большие файлы, потому что функция...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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