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

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

Войти
Регистрация
Восстановить пароль
 
muskos
6 / 6 / 0
Регистрация: 06.03.2012
Сообщений: 82
#1

удаление из файла строки, используя временный файл - C++

06.03.2012, 18:41. Просмотров 551. Ответов 0
Метки нет (Все метки)

Помогите разобраться. Прилагаю исходник только функций, т.к. проблема в них по ходу.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <fstream>
#include "in.h"
using namespace std;
Del :: Del(char *s)
{
     len = strlen(s); 
     str = new char[len+1]; 
     strcpy(str, s);
}
ofstream& operator << (ofstream& out, Del& ob)
{
          out << ob.str << endl;
          return out;
}
ifstream& operator >> (ifstream& in, Del& ob)
{
        in >> ob.str;
        return in;  
}
void Del :: ReadData()
{
     char stroka[80];
     fstream in1;
     in1.open("test.data", ios :: in);
     do 
     {
           in1 >> stroka;
           cout << stroka << endl;
     }while (!in1.eof());
     in1.close();
}
void Del :: WriteData()
{
     char stroka[80];
     fstream out1;
     out1.open("test.data", ios::out | ios::app);
     cout << "Input char" << endl;
     cin >> stroka;
     out1 << endl << stroka ;
     out1.close();
}
void Del :: DeleteData() 
{
     char stroka[180];
     Del obj(stroka);
     int deleteline; // ГЁГ*äåêñ ГіГ¤Г*ëÿåìîé ñòðîêè
     cout << "Number of line" << endl;
     cin >> deleteline;
     fstream in1; 
     in1.open("test.data", ios :: in); // îòêðûâГ*ГҐГ¬ ГґГ*éë äëÿ Г·ГІГҐГ*ГЁГї ГЁГ§ ГґГ*éëГ*
     fstream in2;
     in2.open("test1", ios :: out); // îòêðûâГ*ГҐГ¬ ГґГ*éë äëÿ Г§Г*ГЇГЁГ±ГЁ Гў ГґГ*éë
     int n = 1;
     while(!in1.eof()) // ïðîãîГ*ГїГҐГ¬ ïåðâûé ГґГ*éë ïåðåçГ*ïèñûâГ*Гї ГўГ±Вё ГўГ® âòîðîé ГґГ*éë ГіГ¤Г*ëÿÿ ñòðîêó
     {
                      in1 >> obj.str;
                      if (n != deleteline)
                      {
                         in2 << obj.str << endl ;
                      }
                      n++;
     }    // áëîê Г°Г*áîòГ*ГҐГІ ГўГ±Вё ïåðåïèñûâГ*ГҐГІГ±Гї ГўГ® âðåìåГ*Г*ûé ГґГ*éë
     in1.close();
     in1.open("test.data", ios :: out); // îòêðûâГ*ГҐГ¬ ГґГ*éë äëÿ Г§Г*ГЇГЁГ±ГЁ
     in1.seekp(0);                      
     in2.close();
     in2.open("test1", ios :: in); // îòêðûâГ*ГҐГ¬ ГґГ*éë äëÿ Г·ГІГҐГ*ГЁГї
     while(!in2.eof()) 
     {
                      in2 >> obj.str;
                      cout << obj.str;
                      in1 << obj.str; // Г*ГҐ Г§Г*ïèñûâГ*ГҐГІ Гў ГґГ*éë
     }
     in1.close();
     in2.close();
}
Интересует последняя функция DeleteData. Пошагово открываем исходный файл, открываем временный файл, записываем строку(из исходного) в объект, записываем строку из объекта во временный файл. Здесь всё работает. Теперь второй этап. Сново всё открываем, только исходный для записи, а временный для чтения. Считываение из временно происходит, но в исходный файл ничего не пишется, т.е. при in1.open("test.data", ios :: out); файл просто оказывается пустым. Пробовал разные комбинации открытия файла для записи, ничего не помогает....
И второй вопрос, подскажите, как удалить потом временный файл...

Добавлено через 1 час 13 минут
Слава поиску!
Удаление данных из файла
осталось разобраться с пустыми символами добавленными в конец файла

Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void Del :: DeleteData() 
{
     char stroka[180];
     Del obj(stroka);
     int deleteline; // индекс удаляемой строки
     cout << "Number of line" << endl;
     cin >> deleteline;
     fstream in1; 
     in1.open("test.data", ios :: in); // открываем файл для чтения из файла
     fstream in2;
     in2.open("test.data.tmp", ios :: out); // открываем файл для записи в файл
     int n = 1;
     while(!in1.eof()) // прогоняем первый файл перезаписывая всё во второй файл удаляя строку
     {
                      in1 >> obj.str;
                      if (n != deleteline)
                      {
                         in2 << obj.str ;
                         if (!in1.eof()) {in2 << endl;} // если не конец файла, тогда ставим переход на новую строку
                      }
                      n++;
     }    // блок работает всё переписывается во временный файл
     in1.close();
     in1.open("test.data", ios :: out); // открываем файл для записи                     
     in2.close();
     in2.open("test.data.tmp", ios :: in); // открываем файл для чтения
     in1.close();
     in2.close();
     remove("test.data");// удаляем исходный 
     rename("test.data.tmp","test.data"); // переименовываем временный
 
}
на всякий случай скидываю исходник решения вопроса
(метки: удаление строки из файла с помощью временного файла)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2012, 18:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос удаление из файла строки, используя временный файл (C++):

Чтение текста из файла, удаление каждой второй строки (\n), запись в файл - C++
Дана строка у текстовом файле input.txt: Teachers TV's resources Have generated views Teachers TV content is now available On TES...

Удаление строки из файла\либо удаление самого файла. - C++
День добрый, вот функция(используемые переменные объявленны ранее): void delete_cruise() { FILE *fout; open_file(&quot;abase.dat&quot;); ...

Удаление символов строки, используя указатель - C++
Здравствуйте, помогите, пожалуйста, дописать код. Заранее спасибо за помощь. Задание: 1. Ввести строку в символьный массив размером 60....

Получить третий файл, содержащий чётные строки первого файла и нечётные строки второго файла - C++
Даны два файла, получить третий, содержащий чётные строки первого файла и нечётные строки второго файла. Вообще не имею понятия, как...

Файл: Из текстового файла найти max и min элемент и записать в другой текстовой файл, не используя массив - C++
Из текстового файла найти max и min элемент и записать в другой текстовой файл, не используя массив

Файл.Удаление строки. - C++
Всем здрасте.Собственно проблема.Есть текстовый файл,который заполнен любым текстом. Нужно что б пользователь мог выбрать номер...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2012, 18:41
Привет! Вот еще темы с ответами:

Удаление строки из файла - C++
Сабж, осуществляю ввод и вывод с помощью iostream и использованием векторного массива, нужно удалить строку из файла... Интересует пример...

Удаление строки из файла - C++
Здравствуйте! Подскажите пожалуйста, как реализовать функцию удаления нужной строки из файла. Только не по номеру, а по содержимому! Я так...

Удаление из файла строки - C++
Есть файл (computers.dat) куда записываются данные (структура) о компьютерах (тип, год, цена). Задание: Пользователь вводит год...

Удаление строки из файла - C++
Кто может подсказать рабочую функцию удаление строки из файла. Поиск строки не нужен, только удаление :)


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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