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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 98, средняя оценка - 4.69
Rusarch333
7 / 7 / 1
Регистрация: 12.08.2012
Сообщений: 96
#1

Удаление определённой строки из файла - C++

25.08.2012, 15:57. Просмотров 14367. Ответов 9
Метки нет (Все метки)

Здравствуйте, меня интересует такой вопрос - как удалить определённую строку из файла, если я знаю
её номер ?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2012, 17:23     Удаление определённой строки из файла #2
Считать строки из файла. Найти нужную строку. Удалить. Записать в файл оставшиеся строки.
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
25.08.2012, 17:37     Удаление определённой строки из файла #3
Так если известен номер строки, можно просто ее не читать
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.08.2012, 17:42     Удаление определённой строки из файла #4
Нельзя просто из файла удалить строку (если она не последняя, иначе, точно не помню, вроде можно файл урезать), придется записывать в новый файл все, за исключением этой строки.
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
25.08.2012, 17:53     Удаление определённой строки из файла #5
Одним из решений этой ситуации можно использовать построчное считывание данных из файла по строкам.
Вот краткий пример. (P.S я его не компилил, сейчас просто негде и поэтому возможны опечатки)

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
#include <iostream>
#include <fstream>
#include <string>
 
int main(void)
{
 
  setlocale(LC_ALL,"Russian_Russia.1251"); //для платформы win разрешение вывода русского языка в консоль
 
  std::ifstream file_in;
 
  file_in.open("FILENAME");
 
 if(!file_in)
  {
    std::cerr << "Ошибка, невозможно открыть файл :" << FILENAME << std::endl;
    retrun (EXIT_FAILURE);
  }
 
 
  std::cout <<"Введите номер строки для удаления :"<< std::endl;
  int i_number_line_delete = 0; //для хранения номера строки который нужно удалить
  std::cin >> i_number_line_delete;
 
  int i_number_line_now = 0; //счётчик строк
  std::string line; //для хранения строки
  std::string line_file_text; //для хранения текста файла
 
 while(getline(file,line))
 {
   i_number_line_now++;
 
   if(!i_number_line_now == i_number_line_delete)
   line_file_text.insert(line_file_text.size(),line);
 }
 
 file_in.close();
 
  //теперь в line_file_text будет содержаться измененный текст файла, теперь можно перезаписать файл
 
 std::ofstream file_out;
 
 file_out.open ("FILENAME",std::ios::trunc | std::ios::binary); //открыть и обрезать
 
 //записать
 
 file_out.write(line_file_text.c_str(), line_file_text.size());
 file_out.clear();
 
  return (EXIT_SUCCESS);
}
Я его не компилил , сейчас просто негде, пишу с планшета. Должно работать, хотя написанный код скорее всего не является оптимальным решением про производительности!
Пaтрик
396 / 389 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
25.08.2012, 17:59     Удаление определённой строки из файла #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
33
34
35
36
37
38
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <algorithm>
#include <iterator>
 
bool remove_line(const char *filename, size_t index)
{
    std::vector<std::string> vec;
    std::ifstream file(filename);
    if (file.is_open())
    {
        std::string str;
        while (std::getline(file, str))
            vec.push_back(str);
        file.close();
        if (vec.size() < index)
            return false;
        vec.erase(vec.begin() + index);
        std::ofstream outfile(filename);
        if (outfile.is_open())
        {
            std::copy(vec.begin(), vec.end(), 
                std::ostream_iterator<std::string>(outfile, "\n"));
            outfile.close();
            return true;
        }
        return false;
    }
    return false;
}
 
int main()
{
    std::cout << std::boolalpha << remove_line("1.txt", 2);
    return 0;
}
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2012, 18:11     Удаление определённой строки из файла #7
Цитата Сообщение от defer Посмотреть сообщение
Так если известен номер строки, можно просто ее не читать
Задача удалить (чтобы не было в файле).
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
25.08.2012, 18:27     Удаление определённой строки из файла #8
Все проверил исправил опечатки, работает как надо!
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
#include <iostream>
#include <fstream>
#include <string>
 
int main(void)
{
 
  setlocale(LC_ALL,"Russian_Russia.1251"); //для платформы win разрешение вывода русского языка в консоль
 
  std::ifstream file_in;
 
  file_in.open("text.txt");
 
 if(!file_in)
  {
    std::cerr << "Ошибка, невозможно открыть файл : text.txt" << std::endl;
    return (EXIT_FAILURE);
  }
  
  std::cout <<"Введите номер строки для удаления :"<< std::endl;
  int i_number_line_delete = 0; //для хранения номера строки который нужно удалить
  std::cin >> i_number_line_delete;
 
  int i_number_line_now = 0; //счётчик строк
  std::string line; //для хранения строки
  std::string line_file_text; //для хранения текста файла
 
 while(getline(file_in,line))
 {
   i_number_line_now++;
 
   if(!(i_number_line_now == i_number_line_delete))
   {
       line_file_text.insert(line_file_text.size(),line); /*дабавить строку*/
       /*добавить перенос на слудующую строку*/
       line_file_text.insert(line_file_text.size(),"\r\n");
   
   }
 }
 
 file_in.close();
 
  //теперь в line_file_text будет содержаться измененный текст файла, теперь можно перезаписать файл
 
 std::ofstream file_out;
 
 file_out.open ("text.txt",std::ios::trunc | std::ios::binary); //открыть и обрезать
 
 //записать
 
 file_out.write(line_file_text.c_str(), line_file_text.size());
 file_out.clear();
 
  return (EXIT_SUCCESS);
}
Rusarch333
7 / 7 / 1
Регистрация: 12.08.2012
Сообщений: 96
25.08.2012, 19:25  [ТС]     Удаление определённой строки из файла #9
stawerfar, большое спасибо, сейчас буду тестить

Добавлено через 45 минут
stawerfar, всё очень хорошо работает . Эх...даже стыдно просить ... можешь модифицировать свой код так, чтобы он не просто удалял строку, а и заменял её на ту, которую введет пользователь ?

У меня не получается, я вить только недавно начал программировать и не понимаю некоторые части кода.

А именно:

line_file_text.insert(line_file_text.size(),line);

ios::trunc

и

file_out.write(line_file_text.c_str(), line_file_text.size());
file_out.clear();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2015, 13:51     Удаление определённой строки из файла
Еще ссылки по теме:

Неправильное удаление строки из файла C++
C++ Удаление строки из файла по имени
C++ Удаление из файла строки
C++ Удаление последней строки из файла
C++ Удаление строки из файла

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

Или воспользуйтесь поиском по форуму:
_Темыч_
0 / 0 / 0
Регистрация: 23.06.2015
Сообщений: 1
04.08.2015, 13:51     Удаление определённой строки из файла #10
Я пишу это просто что бы подписаться на обновления.
Yandex
Объявления
04.08.2015, 13:51     Удаление определённой строки из файла
Ответ Создать тему
Опции темы

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