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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.65
MYriad
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 50
#1

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

31.10.2011, 20:23. Просмотров 4266. Ответов 4
Метки нет (Все метки)

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

Позиция курсора - C++
Можете мне пояснить пораметры этой записи пожалуйста. Что можно менять что нет.. COORD position = {0, 0}; HANDLE hConsole =...

Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция - C++
Есть код №1. Он выводить на экран позицию нужного мне слова (только если в середине 1 слово а не 2 и больше например только "privet". А...

перемещение курсора в файле - C++
как мне после первого цикла вернуть курсор в начала файла out? fseek ругает то, что первый элемент другого типа + без понятия количество...

Перемещение курсора в файле - C++
Здравствуйте! Пишу программу, где работаю с файлом с помощью потока, и понадобилось переместить курсор в начало строки, т.к. getline при...

Построчное перемещение курсора в текстовом файле - C++
Кусочек кода, см. комментарии switch(flag) { case'1': { f=fopen(value, "r"); //Открываем необходимый файл if...

Как сохранить текущее положение курсора в файле? - C++
как сохранить текущее положение курсора в файле , а затем в дальнейшем поставить курсор на это место??

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BRcr
4008 / 2297 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
31.10.2011, 20:59 #2
Попробуй принцип конструирования:
создаешь массив строк, последовательно выбираешь в него строчки из файла и попутно ищешь "искомую строку";
найдя, что нужно, в какой-то из строк в файле, подменяешь найденное и опять же записываешь в созданный массив;
далее остаток файла просто построчно выбираешь в тот же массив.

В итоге имеем массив строк с модифицированным содержимым файла. Остается только прописать его в исходный файл заместо оригинального содержимого.
1
MYriad
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 50
01.11.2011, 07:47  [ТС] #3
BRcr, нерационально, конечно, особенно если файл большой, но за неимением другого сделал так, спасибо)
0
BRcr
4008 / 2297 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
01.11.2011, 12:47 #4
если я правильно помню, с текстовыми файлами особо эффективности и не добьешься...
там, по-моему, в любом случае надо после какой-либо модификации части файла оставшуюся часть дозаписывать полностью после модифицированного куска.
0
-=ЮрА=-
Заблокирован
Автор 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+");
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2011, 12:57
Привет! Вот еще темы с ответами:

Передача потока (текущ.позиции курсора в файле) как аргумент функции - C++
Всем привет! Столкнулся с такой проблемой, Конструкция довольно тяжелая для меня. Мне нужно чтобы я открывал файл для чтения, затем...

Где ошибка? Позиция в string - C++
#include <iostream> #include <cstring> using namespace std; int main() { int nr; string alfa, tekst, kod; alfa...

Позиция начала строки в консоли... - C++
Вопрос такой, как сделать нестандартную позицию начала строки... Тоесть у меня есть приложение где слева навигация а справа содержание...

Позиция символа в UTF-8 строке - C++
#include <iostream> using namespace std; void main() { // файл в UTF-8 без БОМ system("chcp 65001"); char* s =...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.11.2011, 12:57
Ответ Создать тему
Опции темы

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