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

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

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

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

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

Здравствуйте, меня интересует такой вопрос - как удалить определённую строку из файла, если я знаю
её номер ?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2012, 15:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление определённой строки из файла (C++):

Удаление и редактирование определённой строки - C++
Задание- словарь синонимов, в нём нужно осуществить удаление и редактирование определённой строки в файле в m1 находит синоним, в m2 -...

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

Удаление строки из файла - C++
В общем у меня есть текстовый документ, в котором что-то записано таблицей. И мне надо удалить из неё какую-либо строку. Я решил читать...

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

Удаление строки из файла - C++
Добрый день, возник вопрос возможно ли удалить/изменить в файле слово/строку, не перезаписывая при этом весь файл?

Удаление строки файла - C++
Подскажите как удалить строку из файла? я знаю что можно перезаписывать файл, удалить из первого файла строку и записать в другой файл.

9
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2012, 17:23 #2
Считать строки из файла. Найти нужную строку. Удалить. Записать в файл оставшиеся строки.
0
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
25.08.2012, 17:37 #3
Так если известен номер строки, можно просто ее не читать
0
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.08.2012, 17:42 #4
Нельзя просто из файла удалить строку (если она не последняя, иначе, точно не помню, вроде можно файл урезать), придется записывать в новый файл все, за исключением этой строки.
0
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);
}
Я его не компилил , сейчас просто негде, пишу с планшета. Должно работать, хотя написанный код скорее всего не является оптимальным решением про производительности!
2
Пaтрик
416 / 391 / 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;
}
4
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2012, 18:11 #7
Цитата Сообщение от defer Посмотреть сообщение
Так если известен номер строки, можно просто ее не читать
Задача удалить (чтобы не было в файле).
0
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);
}
5
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();
0
_Темыч_
0 / 0 / 0
Регистрация: 23.06.2015
Сообщений: 1
04.08.2015, 13:51 #10
Я пишу это просто что бы подписаться на обновления.
0
04.08.2015, 13:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2015, 13:51
Привет! Вот еще темы с ответами:

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

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

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

Удаление строки из файла по имени - C++
Помогите пожалуйста удалить строку из файла по введенному имени в консоле.


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

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

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