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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаление из файла 
:(
    Опции темы
ermi
Дата 24.11.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привеи всем!!!
помогите пожалуйста smile 
никак не могу понять где ошибка.
удаление не работает.

Код

ifstream infile;

  int n_1=0;
  ofstream outfile;
  outfile.open("newpers.txt",ios::app|ios::binary);
  while(infile.eof())
  {
   if(n_1=n) n_1++;
   else
   {infile.open("pers.txt",ios::binary);
    infile.seekg(n_1*sizeof(add));
    infile.read(char*)this,sizeof(*this));
    outfile.write((char*)this,sizeof(*this));
    n_1++;
   };
   rename("newpers.txt","pers.txt");

Заранее спасибо!

Это сообщение отредактировал(а) chipset - 25.11.2006, 03:11
PM MAIL   Вверх
JackYF
Дата 24.11.2006, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



ermi, пользуйся тегами...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ermi
Дата 24.11.2006, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Ты в цикле while infile.eof() делаешь открытие файла infile. Зачем???

Добавлено @ 21:30 
Да, и кстати. Цикл нужно обозвать while( ! infile.eof() ) - пока не достигнут конец файла.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ermi
Дата 24.11.2006, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



проверка идет на конец файла
у меня неправильно?
а как надо?
PM MAIL   Вверх
JackYF
Дата 24.11.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



попробую переписать это дело...

не забыть бы открыть smile

Код

  ifstream infile;

  int n_1=0;
  ofstream outfile;
  infile.open("pers.txt",ios::binary);
  outfile.open("newpers.txt",ios::app|ios::binary);
  while( !infile.eof())
  {
     n_1++;
     infile.read(char*)this,sizeof(*this));
     if (n_1==n) break;
     
     outfile.write((char*)this,sizeof(*this));
     n_1++;
  }
  rename("newpers.txt","pers.txt");




Это сообщение отредактировал(а) JackYF - 24.11.2006, 21:37


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ermi
Дата 24.11.2006, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



все равно не работает
PM MAIL   Вверх
JackYF
Дата 24.11.2006, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Да, согласен, неправ... Переделываю...
:

Код

ifstream infile;
  int n_1=0;
  ofstream outfile;
  infile.open("pers.txt",ios::binary);
  outfile.open("newpers.txt",ios::app|ios::binary);
  while( !infile.eof())
  {
     n_1++;
     infile.read(char*)this,sizeof(*this));
     if (n_1-1==n) break;
     
     outfile.write((char*)this,sizeof(*this));
  }
  rename("newpers.txt","pers.txt");


А так?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ermi
Дата 24.11.2006, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



выдает ошибку у 
infile.read(char*)this,sizeof(*this));

PM MAIL   Вверх
JackYF
Дата 24.11.2006, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Ну конечно... я ведь брал твою строчку, не посмотрел...
Поставь после read еще одну закрывающую скобку:
infile.read((char*)this,sizeof(*this));

Добавлено @ 22:09 
Все... извините за оффтопик... пошел домой...

ermi, желаю поскорее разобраться с этой багой.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ermi
Дата 24.11.2006, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



пога запускается но нифига не удаляет
PM MAIL   Вверх
Damarus
Дата 25.11.2006, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

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



Цитата(ermi @  24.11.2006,  21:23 Найти цитируемый пост)
удаление не работает.

А где тут удаление smile 
PM MAIL ICQ Jabber   Вверх
JackYF
Дата 27.11.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Удаление происходит в строчке 10.
Если номер строки равен заданному, то цикл начинается сначала, и текущая строка не записывается в выходной файл.

По крайней мере, так я задумывал...

Damarus, поправь, если что-то забыл.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Любитель
Дата 27.11.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Некоторые замечания и исправления:
1. Файлы можно открывать в конструкторе.
2.
Код

 n_1++;
 if (n_1-1 == n)...
  

 Красивей так:
Код

if (n_1++ == n)

3. Лучше юзать c++-касты. В данном случае reinterpret_cast. Наглядность + уменьшение числа случайных ошибок.
4. ВАЖНО: зачем ios::app (не понял)
5. ВАЖНО: rename делаем после закрытия файлов. Если ренейм не в более вшнешнем блоке, чем объекты файлов (т. е. деструкторы будут вызваны после ренейма), то явно вызываем close.


--------------------
PM MAIL ICQ Skype   Вверх
JackYF
Дата 27.11.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(Любитель @  27.11.2006,  17:21 Найти цитируемый пост)
if (n_1++ == n)

Согласен.

Цитата(Любитель @  27.11.2006,  17:21 Найти цитируемый пост)
3. Лучше юзать c++-касты. В данном случае reinterpret_cast. Наглядность + уменьшение числа случайных ошибок.


Где ты это хочешь применить?

Цитата(Любитель @  27.11.2006,  17:21 Найти цитируемый пост)
5. ВАЖНО: rename делаем после закрытия файлов. Если ренейм не в более вшнешнем блоке, чем объекты файлов (т. е. деструкторы будут вызваны после ренейма), то явно вызываем close. 

Тоже согласен.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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