7 / 7 / 2
Регистрация: 12.08.2012
Сообщений: 96
1

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

25.08.2012, 15:57. Показов 81975. Ответов 10
Метки нет (Все метки)

Здравствуйте, меня интересует такой вопрос - как удалить определённую строку из файла, если я знаю
её номер ?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.08.2012, 15:57
Ответы с готовыми решениями:

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

Удаление из файла определенной записи
Новые записи сохраняются в файле нормально, а вот как удалить определённую запись не могу понять....

Удаление строки из файла\либо удаление самого файла.
День добрый, вот функция(используемые переменные объявленны ранее): void delete_cruise() { FILE...

Удаление определенной строки из Memo
Прювэд народ!!! Подскажите как из Memo удалять строки начинающиеся с определенного символа...

10
5493 / 4888 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2012, 17:23 2
Считать строки из файла. Найти нужную строку. Удалить. Записать в файл оставшиеся строки.
0
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
25.08.2012, 17:37 3
Так если известен номер строки, можно просто ее не читать
0
Эксперт С++
4264 / 2238 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.08.2012, 17:42 4
Нельзя просто из файла удалить строку (если она не последняя, иначе, точно не помню, вроде можно файл урезать), придется записывать в новый файл все, за исключением этой строки.
0
148 / 62 / 8
Регистрация: 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);
}
Я его не компилил , сейчас просто негде, пишу с планшета. Должно работать, хотя написанный код скорее всего не является оптимальным решением про производительности!
3
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 974
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;
}
8
5493 / 4888 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2012, 18:11 7
Цитата Сообщение от defer Посмотреть сообщение
Так если известен номер строки, можно просто ее не читать
Задача удалить (чтобы не было в файле).
1
148 / 62 / 8
Регистрация: 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);
}
9
7 / 7 / 2
Регистрация: 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
0 / 0 / 0
Регистрация: 03.10.2019
Сообщений: 40
16.12.2019, 18:53 11
А как можно сделать удаление, но не по номеру, а по содержимому?

Добавлено через 37 секунд
я просто написал программу, но результата нету
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <stdio.h>
#include <iomanip>
#include <fstream>
using namespace std;
    struct Movie
    {
        string title, director;
        int duration;
        string cost;
    };
 
int main(void)
{
 
    setlocale(LC_ALL,"Russian");
    const int size = 5;
    Movie film[]=
    {
     {"IT","Андрес Мускеттi",135,"35 млн $"},
     {"Avengers:Endgame","Ентонi Руссо",181,"356 млн $"},
     {"Terminator","Джеймс Кемерон",108,"6.4 млн $"},
     {"Star Wars:The Last Jedi","Раян Джонсон",152,"200 млн $"},
     {"Spider-Man:Homecoming","Джон Воттс",130,"175 млн $"},
    };
    string path = "Movie.txt";
    ofstream fout;  //Створюємо документ для запису
    fout.open("Movie.txt",fstream::app);
    if(!fout.is_open()) cout<<"Помилка!\n";
    else
        {
            for(int i=0; i<size; i++)
                {
                    cout<<setw(22)<<film[i].title<<"\t"<<film[i].director<<"\t"<<film[i].duration<<"\t"<<film[i].cost<<"\n";
                    fout<<setw(22)<<film[i].title<<"\t"<<film[i].director<<"\t"<<film[i].duration<<"\t"<<film[i].cost<<"\n";
                }
                int n, number_string;
                /*cout<<"\nВведiть номер рядка i кiлькiсть їх виведень: ";
                cin>>n>>number_string;
                n-=1;
            for(int j=0; j<number_string; j++)
            {
                fout<<setw(22)<<film[n].title<<"\t"<<film[n].director<<"\t"<<film[n].duration<<"\t"<<film[n].cost<<"\n";
            }
        } */
        fout.close();
////////////////////////////////////////////////////////////////////////////
  ifstream file_in;
 
  file_in.open("Movie.txt");
 
 if(!file_in)
  {
    std::cerr << "Помилка! Неможливо вiдкрити файл : Movie.txt" << std::endl;
    return (0);
  }
 
  std::cout <<"Введiте тривалiсть для видалення :"<< std::endl;
  int i_number_duration_delete; //для хранения номера строки который нужно удалить
  std::cin >> i_number_duration_delete;
 
  int i_number_line_now = 0; //счётчик строк
  std::string line; //для хранения строки
  std::string line_file_text; //для хранения текста файла
 
 while(getline(file_in,line))
 {
   i_number_line_now++;
 
    for(int j=1; j<=size; j++)
   if(!(film[j].duration == i_number_duration_delete))
   {
       line_file_text.insert(line_file_text.size(),line);
 
       line_file_text.insert(line_file_text.size(),"\r\n");
 
    break;
   }
 }
 
 file_in.close();
 
 std::ofstream file_out;
 
 file_out.open ("Movie.txt",std::ios::trunc);
 
 file_out.write(line_file_text.c_str(), line_file_text.size());
 
 file_out.close();
 
  return (1);
}
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2019, 18:53
Помогаю со студенческими работами здесь

Удаление определенной строки из файла
Хаи гайсы. Объясняю ситуацию. У меня есть текстовый файл. При работе он будет большим, в ней...

Удаление определённой строки
Доброго времени суток, уважаемые форумчане! Столкнулся с одной проблемой! На странице есть два...

Удаление определённой строки из .txt
Искал на форуме, так должного ответа и не нашёл... Как из .txt удалить определённую строку......

Удаление текста до определенной строки
Есть TextBox, который содержит в себе следующие данные: Сравнить Сравнить ...... Машина...

Удаление из строки определенной ее части
Всем привет! Подскажите пожалуйста, каким образом можно удалить из строки известную часть. вообще...

Не работает удаление определенной строки таблицы
Доброго времени суток! есть таблица &lt;table id=&quot;table_route&quot;&gt; &lt;tbody&gt; &lt;tr&gt; ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru