Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> редактирование текстового файла 
V
    Опции темы
SergXP
Дата 11.11.2009, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



Всем Добрый вечер)) 

Прошу помочь разобраться с алгоритмом редактирования файла. 

Файл users.txt содержит текст вида:
Цитата

1                   // идентификатор (id)
Иванов         // фамилия 
Иван             // имя  
Иванович     // отчество 
1                   // пол (1=муж, 0=жен)
20                 // возраст

2
Петров
Сидор
Сергеевич
1
20

3
Иванова
Наталья
Петровна
0
25

4
Сидорова
Татьяна
Ивановна
0
19


ф-ция на запись в файл:
Код

  fprintf(f,"\n\n");
  fprintf(f,"%i\n",id);
  fprintf(f,"%s\n",family);
  fprintf(f,"%s\n",name);
  fprintf(f,"%s\n",second_name);
  (pol == 0) ? fprintf(f,"%i\n",0) : fprintf(f,"%i\n",1);
  fprintf(f,"%i",old);


Как можно отредактировать запись в файле в моем случае? 

--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
sdukshis
Дата 11.11.2009, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 23.3.2009

Репутация: нет
Всего: 1



В вашем случае очень неудобно, поскольку выбран неудачных формат хранения. Попробуйте использовать формат с разделителем.
В этом случае вы легко сможете читать файл.

Для редактирования необходимо полностью сохранить данные в памяти, отредактировать и записать в файл, предварительно стерев старые данные. Можно комбинировать с использованием временных файлов.
PM MAIL   Вверх
SergXP
Дата 11.11.2009, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



sdukshis, с разделителем, например ";"?
т.е. получим
Цитата

1;Иванов;Иван;Иванович;1;20

2;Петров;Сидор;Сергеевич;1;20

3;Иванова;Наталья;Петровна;0;25

4;Сидорова;Татьяна;Ивановна;0;19

а как считывать в данном случае файл? 
в php есть ф-ция explode, там все просто)) 
в C++ не знаю...

может у кого-нибудь имеется кусок чтение/запись/редактирование текстовых файлов? 
--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
Abyx
Дата 11.11.2009, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 5
Всего: 10



SergXP, в любом случае редактирование текстового файла - это полная его перезапись
(исключение - добавление в конец)

читай файл в память, построчно
редактируй в памяти и создавай файл заново
PM MAIL   Вверх
SergXP
Дата 11.11.2009, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



Abyx,  smile  хитро, ну это будет крайний способ, потому что  данные у меня хранятся в массиве, поэтому перезаписать я легко смогу))

Но все таки хотелось бы без полной перезаписи попытаться.....  smile 
--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
bsa
Дата 12.11.2009, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(SergXP @  11.11.2009,  23:48 Найти цитируемый пост)
Но все таки хотелось бы без полной перезаписи попытаться...
С текстовым это почти невозможно.
лучше хранить так:
Код
1 Иванов Иван Иванович 1 20
2 Петров Сидор Сергеевич 1 20
Читать очень просто через getline (читаешь строку), а потом stringstream (парсишь строку).
PM   Вверх
Abyx
Дата 12.11.2009, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 5
Всего: 10



проще всего использовать istream_iterator<string>(your_file_istream)
он будет и читать, и парсить входной поток на отдельные слова
если в каждой записи одинаковое число полей, то файл считается в 2 вложенных цикла, 1й для записей - 2й для полей

Это сообщение отредактировал(а) Abyx - 12.11.2009, 00:17
PM MAIL   Вверх
SergXP
Дата 12.11.2009, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



 smile спасибо за идеи.
Лучше наверное всетаки полностью перезаписывать и не заморачиваться  smile 
да это, курсовую сижу делаю)) 
что-то встрял на этом редактировании... 
ну впринцепи ладно.... думаю преподу все равно как происходит редактирование))) т.к. у нас ООП, он на классы будет смотреть.

Еще раз, Всем спасибо!


--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0832 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.