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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Un.Rewa
0 / 0 / 0
Регистрация: 28.09.2009
Сообщений: 13
29.09.2009, 19:28     Прыжки в файле #1
Помогите кто нибуть в таком Надо зделать програму которая будет считывать с файла но с Х строчки (например с 4 и до конца )
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2009, 19:28     Прыжки в файле
Посмотрите здесь:

поиск в файле C++
C++ Замены в файле.
Поиск в файле C++
C++ Указатель в файле
C++ Информация о файле
БД в бинарном файле C++
C++ класс в файле
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
R0mm
Псевдо программист
 Аватар для R0mm
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
29.09.2009, 19:59     Прыжки в файле #2
C++
1
while(i++!=4) cin.getline();
TanT
эволюционирую потихоньку
 Аватар для TanT
464 / 462 / 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 фактически реализует прямой доступ к любому значению в
файле. Необходимо только знать месторасположение (номер байта) значения в
файле.
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
29.09.2009, 22:07     Прыжки в файле #4
это для двоичных файлов
Почему для двоичных ?
Это и с текстовыми работает.
lavan
51 / 51 / 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);//смещение на нужную строку
Суть такая,только немного надо доработать
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
29.09.2009, 22:33     Прыжки в файле #6
надо учесть что в каждой строке в конце будет два символа новой строки
Чего это два ?
Там в норме должно быть "\r\n"
Но может быть и один "\n" если файл из UNIX например.
lavan
51 / 51 / 1
Регистрация: 21.03.2009
Сообщений: 371
29.09.2009, 23:14     Прыжки в файле #7
ну тогда так:
while(!feof(ук файла)){
..
if(ch!='\n')
counter++;
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
29.09.2009, 23:21     Прыжки в файле #8
2lavan: можно просто fgets() использовать
TanT
эволюционирую потихоньку
 Аватар для TanT
464 / 462 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
30.09.2009, 05:20     Прыжки в файле #9
Цитата Сообщение от odip Посмотреть сообщение
Почему для двоичных ?
Это и с текстовыми работает.
это для из литературы почерпнул, а там написанно для двоичных.
я сам не пробовал, пока тока другим советую.
но разницы действительно быть не должно.
в конце концов какая разница между файлом открытым как двоичный и без оного флага? я предпологаю что при обычном чтении файла нельзя отловить символоы перехода на новую строку и возвратат каретки. так это?
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
30.09.2009, 08:23     Прыжки в файле #10
я предпологаю что при обычном чтении файла нельзя отловить символоы перехода на новую строку и возвратат каретки. так это?
Вроде это в любой документации написано.
При открытии файла в текстовом режиме (которые кстати есть только в Windows) при чтении символы '\r' '\n' заменяются на один символ '\n'.
Поэтому при использовании fseek() в текстовом режиме нужно понимать что делаешь.
Потому что реально размер считанной строки будет например 99 байт, а позиция в файле сдвинется на 100 байт (+ символ '\r' если он там был).
TanT
эволюционирую потихоньку
 Аватар для TanT
464 / 462 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
30.09.2009, 08:28     Прыжки в файле #11
Цитата Сообщение от odip Посмотреть сообщение
Вроде это в любой документации написано.
в подсознании отложилось, а я принял за свои догадки. пасиб
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2009, 09:35     Прыжки в файле
Еще ссылки по теме:

C++ Почему тип "bool" работает в файле с расширением .cpp и не работает в файле с расширением .c?
C++ Сортировка в файле
Поиск в файле C++
C++ Вывод в файле
C++ Информация о файле

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
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);
    ...
}
Yandex
Объявления
30.09.2009, 09:35     Прыжки в файле
Ответ Создать тему
Опции темы

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