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

Позиция курсора в файле - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.65
MYriad
 Аватар для MYriad
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 50
31.10.2011, 20:23     Позиция курсора в файле #1
Подскажите, пожалуйста, как сделать, чтобы в файле отыскивалась нужная (по содержанию) строка, модифицировалась и записывалась обратно: в то же место, в тот же файл.
С поиском нужной строки разобрался:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    fstream base("1.txt");
     char s[80],name[80]="Искомая строка";
     bool b;
     int pos;
     while(!base.eof()){
         b=true;
         base.getline(s,80);
         for(int i=0;s[i]!=' ';++i)
             if(s[i]!=name[i]){
                 b=false;
                 break;
             }
             if(b==true){
                 name="Модифицированная строка";
                 Вот тут нужен код, который заменяет строку;
                 break;
             }
    }
    base.close();
Попробовал через функции fgetpos и fsetpos, пришлось юзать сишные методы работы с файлами, но всё равно не получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
     FILE *base=fopen("1.txt","rt");
     char s[80],name[80]="Искомая строка";
     bool b;
     while(!feof(base)){
         b=true;
         fgets(s,80,base);
         for(int i=0;s[i]!=' ';++i)
             if(s[i]!=name[i]){
                 b=false;
                 break;
             }
             if(b==true){
                 fpos_t pos=fgetpos(base,&pos);
                 fclose(base);
                 base=fopen("1.txt","at");
                 fsetpos(base,&pos);
                 name="Модифицированная строка";
                 fputs(name,base);
                 break;
             }
     }
     fclose(base);
Строка просто дописывается в конец файла.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
31.10.2011, 20:59     Позиция курсора в файле #2
Попробуй принцип конструирования:
создаешь массив строк, последовательно выбираешь в него строчки из файла и попутно ищешь "искомую строку";
найдя, что нужно, в какой-то из строк в файле, подменяешь найденное и опять же записываешь в созданный массив;
далее остаток файла просто построчно выбираешь в тот же массив.

В итоге имеем массив строк с модифицированным содержимым файла. Остается только прописать его в исходный файл заместо оригинального содержимого.
MYriad
 Аватар для MYriad
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 50
01.11.2011, 07:47  [ТС]     Позиция курсора в файле #3
BRcr, нерационально, конечно, особенно если файл большой, но за неимением другого сделал так, спасибо)
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
01.11.2011, 12:47     Позиция курсора в файле #4
если я правильно помню, с текстовыми файлами особо эффективности и не добьешься...
там, по-моему, в любом случае надо после какой-либо модификации части файла оставшуюся часть дозаписывать полностью после модифицированного куска.
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 12:57     Позиция курсора в файле #5
MYriad, курсор в файле позиционируется функцией fseek
C
1
fseek(f,pos,SEEK_SET);//курсор в позицию pos от начала файла
Для одновременного чтения и записи в файл необходимо указать флаг доступа "r+" я рекомендую "rb+"
C
1
FILE * f = fopen("fPath","r+");
Yandex
Объявления
01.11.2011, 12:57     Позиция курсора в файле
Ответ Создать тему
Опции темы

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