Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как изменить строчку в файле? / 16 сообщений из 16, страница 1 из 1
07.12.2004, 17:24
    #32817210
Serega128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
Т.е. имеем: файл, состоящий из строк.
Мне нужно: найдя какую-либо определенную строку, изменить её значение.
Как это можно сделать без перезаписи файла? Для этих целей использую VC++6.
...
Рейтинг: 0 / 0
07.12.2004, 18:59
    #32817404
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
если не менять саму строку, то используй

fseek,
size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);
...
Рейтинг: 0 / 0
07.12.2004, 19:06
    #32817410
Serega128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
А как мне файл открыть (с каким модификатором fopen("file.txt", "a+w"))?
А строку мне менять как раз надо (которую нашел).
...
Рейтинг: 0 / 0
08.12.2004, 07:28
    #32817701
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
Serega128А как мне файл открыть (с каким модификатором fopen("file.txt", "a+w"))?
А строку мне менять как раз надо (которую нашел).
Для того, чтобы изменить строку в файле не перезаписывая его полностью, надо быть уверенным, что длины считанной строки и записываемой строки равны. Иначе можно затереть что-то важное (типа как при работе с массивами через указатели: выход за границы массива допустим (остается на совести кодировщика), но к чему он приведет - неизвестно).

В твоем конкретном случае надо сделать так (только принципы, без кода):
1. Открыть файл на чтение-запись;
2. Найти позицию первого символа искомой строки в файле, запомнить ее;
3. Считать строку,запомнить ее длину;
4. Провести изменения строки, проверить длину;
5. Если длина строки уменьшилась - дополнить пробелами, если увеличилась - выдать сообщение об ошибке;
6. Перейти на запомненную позицию в файле;
7. Провести запись в файл и, если необходимо, повторить п.п.2-7
8. По окончании всех работ с файлом - закрыть его :)
...
Рейтинг: 0 / 0
08.12.2004, 18:14
    #32819435
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
Никак не сделать без перезаписи файла.
...
Рейтинг: 0 / 0
09.12.2004, 10:04
    #32819963
Alex_VC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
MasterZivНикак не сделать без перезаписи файла.
Почему нельзя без перезаписи?
Вроде бы можно, только здесь проблема с размером строки: если она больше изменяемой, тогда надо перезаписывать файл (или портить начало следующей строки), если меньше- то остается мусор.
Если все строки одинаковой длины-тогда это сделать просто...
...
Рейтинг: 0 / 0
09.12.2004, 10:28
    #32820015
Serega128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
Предпологается, что длинна строки одинакова (и новой и старой). Можно пример кода?
...
Рейтинг: 0 / 0
09.12.2004, 13:05
    #32820588
Alex_VC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
1) Ищешь "определенную" строку в файле
2) Встаешь в файле на начало этой строки (перед чтением каждой следующей строки запоминаешь позицию в файле (например, в переменной long beg_pos), если строка - искомая - fseek(f,-(tek_pos-beg_pos),SEEK_CUR), где tek_pos - текущая позиция в файле (fgetpos(f,&tek_pos)))
3) Пишешь свою строку (fwrite(str,sizeof(str),1,f))
Вроде так (при условии, что sizeof(str) - старой и новой строки совпадают- иначе будет либо затирание следующей строки, либо оставаться "мусор" от старой)...
...
Рейтинг: 0 / 0
09.12.2004, 13:19
    #32820626
Serega128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
У меня не получилось. Как открыть файл?
...
Рейтинг: 0 / 0
10.12.2004, 10:00
    #32822327
Alex_VC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
Код: plaintext
1.
FILE *f;
f=fopen("file.txt","w+");
...
Рейтинг: 0 / 0
10.12.2004, 10:04
    #32822342
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
Alex_VC1) Ищешь "определенную" строку в файле
2) Встаешь в файле на начало этой строки (перед чтением каждой следующей строки запоминаешь позицию в файле (например, в переменной long beg_pos), если строка - искомая - fseek(f,-(tek_pos-beg_pos),SEEK_CUR), где tek_pos - текущая позиция в файле (fgetpos(f,&tek_pos)))
3) Пишешь свою строку (fwrite(str,sizeof(str),1,f))
Вроде так (при условии, что sizeof(str) - старой и новой строки совпадают- иначе будет либо затирание следующей строки, либо оставаться "мусор" от старой)...


Алекс, не это ли можно выразить словосочетанием "перезапись файла", а ?
...
Рейтинг: 0 / 0
10.12.2004, 10:15
    #32822379
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
И еще. При записи в файл в произвольном месте оставшаяся часть в общем случае стирается. Для того, чтобы она не стиралась , нужно пользоваться не C-шными функциями ввода-вывода, а низкоуровневыми или функциями WIN API. А там понятия строки не существует вообще. С-шный же ввод -вывод - это потоковый ввод-вывод, последовательный, там практически нет произвольного доступа.
Так что самый просто способ сделать это - считать файл, разобрать по строкам (это можно и в процессе чтения сделать - fgets), изменить нужную строку(и) и записать файл обратно.
...
Рейтинг: 0 / 0
10.12.2004, 10:36
    #32822451
Alex_VC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
MasterZiv
Алекс, не это ли можно выразить словосочетанием "перезапись файла", а ?
Ну, под перезаписью файла я понимаю создание НОВОГО файла, с последующим копированием содержимого предыдущего. В данном случае файл заново не создается, изменяются только его данные (дата создания остается прежней). Ну а способов как это сделать несколько...
...
Рейтинг: 0 / 0
14.12.2004, 10:15
    #32826045
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
Alex_VCНу, под перезаписью файла я понимаю создание НОВОГО файла, с последующим копированием содержимого предыдущего. В данном случае файл заново не создается, изменяются только его данные (дата создания остается прежней). Ну а способов как это сделать несколько...

Если ты подумаешь[\b], то сможешь понять, что это и есть создание нового[\b] файла, но только с тем же названием.
...
Рейтинг: 0 / 0
14.12.2004, 10:21
    #32826055
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
это уже тонкие материи :-)
если идентифицировать файл по внешним признакам (имя, занимаемые кластеры, inode) то это будет прежний файл.
Если же идентифицировать файл по его содержимому, то каждое изменение информации файла будет приводить к уничтожению старого и появлению нового.

но ведь все идентифицируют по внешним признакам :-)
...
Рейтинг: 0 / 0
15.12.2004, 10:28
    #32827915
Alex_VC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строчку в файле?
MasterZiv Alex_VCНу, под перезаписью файла я понимаю создание НОВОГО файла, с последующим копированием содержимого предыдущего. В данном случае файл заново не создается, изменяются только его данные (дата создания остается прежней). Ну а способов как это сделать несколько...

Если ты подумаешь[\b], то сможешь понять, что это и есть создание нового[\b] файла, но только с тем же названием.
Но ведь у файла есть дата создания и дата последней модификации, дата последнего доступа и т.п. При создании нового файла дата создания будет установлена в момент его создания (как, впрочем, и модификации). При изменении данных файла, изменяется дата модификации, дата создания остается неизменной. (Мона, конено, и у вновь созданного файла установить эту дату...)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как изменить строчку в файле? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]