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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Un.Rewa
0 / 0 / 0
Регистрация: 28.09.2009
Сообщений: 13
#1

Прыжки в файле - C++

29.09.2009, 19:28. Просмотров 1721. Ответов 11
Метки нет (Все метки)

Помогите кто нибуть в таком Надо зделать програму которая будет считывать с файла но с Х строчки (например с 4 и до конца )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2009, 19:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Прыжки в файле (C++):

Поиск в текстовом файле всех слов, заданных в другом текстом файле - C++
Вообщем такое задание: Поиск в текстовом файле всех слов, заданных в другом текстом файле; Не могу понять почему не работает: ...

Сравнение слов в одном файле со словами в другом файле - C++
Здравствуйте! Суть задачи такая: 1. Первый файл - запросы с городами, второй файл - база городов РФ. Оба txt 2. Найти в запросах все...

Консольное приложение. В файле находятся только целые числа. Определить, имеет ли последовательность чисел, находящихся в файле, нечетную длину - C++
В файле находятся только целые числа. Определить, имеет ли последовательность чисел, находящихся в файле, нечетную длину, и если да, то...

Дан файл F, компонентами которого являются целые числа. Получить в файле G все нечетные числа, входящие в файл F. Числа в файле G должны следовать - C++
Помогите доздать с++) вот задание: Дан файл F, компонентами которого являются целые числа. Получить в файле G все нечетные числа, входящие ...

Удалить в текстовом файле 1.txt все строки, которые встречаются в текстовом файле 2.txt - C++
например имеется текстовый файл 1.txt c таким содержанием 111 222 333 444 555 и имеется текстовый файл 2.txt c таким...

Почему тип "bool" работает в файле с расширением .cpp и не работает в файле с расширением .c? - C++
Объясните, пожалуйста, почему тип "bool" в одной и той же программе работает в файле с расширением .cpp и не работает в файле с...

11
R0mm
Псевдо программист
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
29.09.2009, 19:59 #2
C++
1
while(i++!=4) cin.getline();
0
TanT
эволюционирую потихоньку
466 / 464 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
29.09.2009, 20:04 #3
это для двоичных файлов
Для произвольного перемещения внутри файла служит функция 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 фактически реализует прямой доступ к любому значению в
файле. Необходимо только знать месторасположение (номер байта) значения в
файле.
0
odip
Эксперт С++
7159 / 3221 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
29.09.2009, 22:07 #4
это для двоичных файлов
Почему для двоичных ?
Это и с текстовыми работает.
0
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
29.09.2009, 22:16 #5
если длина строки за рание не известна,то(надо учесть что в каждой строке в конце будет два символа новой строки)
C++
1
2
3
4
5
6
7
8
9
10
...
long counter=0;
char ch,pv;//pv-pred vvod
while(!feof(указ файла)){
pv='что то'
ch=getc(ук файла);
if(ch=='\n'&&pv=='\n')
continue;
else
counter++;//подсчет символов в строке
ну а потом
fseek(ук файла,counter,SEEK_SET);//смещение на нужную строку
Суть такая,только немного надо доработать
0
odip
Эксперт С++
7159 / 3221 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
29.09.2009, 22:33 #6
надо учесть что в каждой строке в конце будет два символа новой строки
Чего это два ?
Там в норме должно быть "\r\n"
Но может быть и один "\n" если файл из UNIX например.
0
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
29.09.2009, 23:14 #7
ну тогда так:
while(!feof(ук файла)){
..
if(ch!='\n')
counter++;
0
odip
Эксперт С++
7159 / 3221 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
29.09.2009, 23:21 #8
2lavan: можно просто fgets() использовать
0
TanT
эволюционирую потихоньку
466 / 464 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
30.09.2009, 05:20 #9
Цитата Сообщение от odip Посмотреть сообщение
Почему для двоичных ?
Это и с текстовыми работает.
это для из литературы почерпнул, а там написанно для двоичных.
я сам не пробовал, пока тока другим советую.
но разницы действительно быть не должно.
в конце концов какая разница между файлом открытым как двоичный и без оного флага? я предпологаю что при обычном чтении файла нельзя отловить символоы перехода на новую строку и возвратат каретки. так это?
0
odip
Эксперт С++
7159 / 3221 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
30.09.2009, 08:23 #10
я предпологаю что при обычном чтении файла нельзя отловить символоы перехода на новую строку и возвратат каретки. так это?
Вроде это в любой документации написано.
При открытии файла в текстовом режиме (которые кстати есть только в Windows) при чтении символы '\r' '\n' заменяются на один символ '\n'.
Поэтому при использовании fseek() в текстовом режиме нужно понимать что делаешь.
Потому что реально размер считанной строки будет например 99 байт, а позиция в файле сдвинется на 100 байт (+ символ '\r' если он там был).
1
TanT
эволюционирую потихоньку
466 / 464 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
30.09.2009, 08:28 #11
Цитата Сообщение от odip Посмотреть сообщение
Вроде это в любой документации написано.
в подсознании отложилось, а я принял за свои догадки. пасиб
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
30.09.2009, 09:35 #12
Цитата Сообщение от odip Посмотреть сообщение
можно просто fgets() использовать
вот и я бы так сделал:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
...
FILE *f;
char buf[BUFSIZ];
int missing = 4;
...
while ( fgets(buf, BUFSIZ, f) ){
    if ( missing > 0 ){
        missing--;
        continue;
    }
    printf("%s", buf);
    ...
}
0
30.09.2009, 09:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2009, 09:35
Привет! Вот еще темы с ответами:

Прыжки - C++ Builder
Здравствуйте. Задача сделать следующее: пака юзер держит клавишу – изображение прыгает, когда отпускает – изображение останавливается, но...

Прыжки в asm - Assembler
всем привет! data segment seg: dw 5 dup 0001h,0002h,0003h,0001h,0002h ends stack segment dw 128 dup(0) ends

Прыжки колобков - Unity, Unity3D
У меня есть колобок, который передвигается так: void FixedUpdate () { grounded = Physics2D.OverlapCircle (groundCheck.position,...

Прыжки температуры 6700К - Процессоры
Стоит процессор Intel core i7 6700K 4.0 ГГц. Обнаружил такую вещь, что при открытии браузера, новых вкладок или программ появляются скачки...


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

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

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