0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 32
1

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

17.05.2015, 23:53. Показов 12762. Ответов 6
Метки нет (Все метки)

Дан непустой текстовый файл. Удалить из него последнюю строку.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2015, 23:53
Ответы с готовыми решениями:

Массив указателей на строки: удалить последнюю строку
Помогите пожалуйста...суть задания: создать массив указателей на строки , разработать процедуру,...

Имеется текстовый файл.Нужно удалить из него последнюю строку
Помогите пожалуйста))Задача на файлы: Имеется текстовый файл.Нужно удалить из него последнюю...

Удалить последнюю строку матрицы, содержащую только положительные элементы
Дана матрица размера M × N. Удалить ее последнюю строку, содержащую только положительные элементы....

В текстовом файле удалить последнюю строку результат записать в другой файл
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <conio.h> #include <string.h>...

6
Модератор
Эксперт С++
12789 / 10243 / 6152
Регистрация: 18.12.2011
Сообщений: 27,433
18.05.2015, 07:56 2
Запоминайте две строки - текущую(№2) и предыдущую(№1).
Если при чтении текущей строки получили конец файла, то завершаете ввод.
Если нет, то записываете первую в результат, вторую переписываете в первую и повторяете ввод.
0
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
18.05.2015, 08:01 3
Если винда:
Проецируешь в память, плюс '\0' в конец, srtrstr("\r\n"), и в том месте SetFilePointer, SetEndOfFile. Всё готово.
1
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 4
15.08.2016, 23:32 4
Уважаемый zss, если можно поподробнее про удаление последней строки из файла!!!
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
//Неделя №_10 (Капитонец А.Б  гр42015)
/*Задание 1: 
Дан текстовый файл. Удалить из него последнюю строку. 
Результат записать в другой файл.
*/
 
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
const char* input = "test.txt";
const char* output = "outut.txt";
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian_Russia.1251");
    string str;
    ifstream fin;
    ofstream fout;
    fin.open(input);
    if(!fin.is_open())
    {
        cerr << "Can't open file " << input << endl << endl;
        fin.clear();
    }
    else
    {
        cout << "\t\t\tOpen file " << input << endl << endl;
            fout.open(output);
            if(fout.is_open())
            {
                while(getline(fin, str))
                {
                                      // вопрос такой , как вот здесь(если это возможно) записать данные из первого файла
                                      // во второй без последней строки...
                    fout << str;
                    fout << endl;
                }
                cout << "\t\t\tRecorded file  " << output << endl << endl;
                fout.close();
            }
            else
            {
                cerr << "Can't open " << output << " file for output " << endl << endl;
                fout.clear();
            }
        
        fin.close();
    }   
        fin.open(output);
        if(!fin.is_open())
        {
            cerr << "Can't open file " << output << endl << endl;
            fin.clear();
        }
        else
        {
            cout << "\t\t\tOpen file " << output << endl << endl;
            while(getline(fin, str))
            {
                cout << str << endl;
            }
            fin.close();
        }
            
        cout << "\t\t\t\tBYE!!!" << endl << endl;
        
    system("pause");
    return (0);
}
0
5226 / 3198 / 362
Регистрация: 12.12.2009
Сообщений: 8,112
Записей в блоге: 2
16.08.2016, 15:18 5
Читаешь файл построчно, запоминаешь длину последней строки, после прочтения делаешь resize.
0
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 4
16.08.2016, 20:32 6
если я Вас правильно понял, затем Вы предлагаете затем просто уменьшить общее количество символов в файле на количество символов в последней строке. У меня просто не получается сделать это в том же цикле где я произвожу
запись в другой файл!!! А если resize вынести за цикл чтения он просто же добавит к последней строке количество символов.

C++
1
2
3
4
5
6
while(getline(fin, str))
                {
                      n = str.size();                    //находим длину последней строки и помещаем в переменную 
                                     // а resize получается уже за циклом этим делать? Так ведь нет смысла же...
      
                }
P. s Вот чувствую что решение где рядом, а словить не могу((
p.s. s ...извиняйте за сумбурность поста(если что не понятно , я поясню)
0
0 / 0 / 0
Регистрация: 07.12.2015
Сообщений: 4
18.08.2016, 23:33 7
Ну вот мой "говонокод": (по-другому не получается пока))))
1)Если не трудно натолкните на мысль как это все можно сделать красивее)) Сам ведь понимаю Б что намутил здесь лишнего))
2)И на мысль в каком месте моего кода надо сделать изменение что бы снова все вернуть в стихотворение)))


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
94
95
96
97
98
//Неделя №_10 (Капитонец А.Б  гр42015)
/*Задание 1:
Дан текстовый файл. Удалить из него последнюю строку.
Результат записать в другой файл.
*/
 
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
string Remove_line(string s, int n);
 
const char* input = "test.txt";
const char* output = "outut.txt";
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian_Russia.1251");
    string str, buf, buf1;
    int n;
    ifstream fin;
    ofstream fout;
    fin.open(input);
    if(!fin.is_open())
    {
        cerr << "Can't open file " << input << endl << endl;
        fin.clear();
    }
    else
    {
        cout << "\t\t\tOpen file " << input << endl << endl;
        while(!fin.eof())
        {
            getline(fin, str);
            n = str.length();
            buf += str;
        }
        buf1 = Remove_line(buf, n);
        fin.close();
    }
    /***************************************************************************/
    fin.open(input);
    if(!fin.is_open())
    {
        cerr << "Can't open file " << input << endl << endl;
        fin.clear();
    }
    else
    {
        fout.open(output);
        if(fout.is_open())
        {
            fout << buf1 << endl;
 
            cout << "\t\t\tRecorded file  " << output << endl << endl;
            fout.close();
        }
        else
        {
            cerr << "Can't open " << output << " file for output " << endl << endl;
            fout.clear();
        }
        fin.close();
    }
    /*********************************************************************/
    fin.open(output);
    if(!fin.is_open())
    {
        cerr << "Can't open file " << output << endl << endl;
        fin.clear();
    }
    else
    {
        cout << "\t\t\tOpen file " << output << endl << endl;
        while(getline(fin, buf1))
        {
            cout << buf1 << endl;
        }
        fin.close();
    }
    cout << "\t\t\t\tBYE!!!" << endl << endl;
 
    system("pause");
    return (0);
}
string Remove_line(string s, int n)
{
    char str[1024];
    string strings;
    strcpy_s(str, s.c_str());
    int Len = strlen(str) - n;
    for(int i = 0; i < Len; i++)
        strings += str[i];
    return strings;
}
Добавлено через 23 часа 41 минуту
Ну вот , вроде довел до ума))))
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
94
95
96
97
98
//Неделя №_10 (Капитонец А.Б  гр42015)
/*Задание 1:
Дан текстовый файл. Удалить из него последнюю строку.
Результат записать в другой файл.
*/
 
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
string Remove_line(string s, int n);
 
const char* input = "test.txt";
const char* output = "outut.txt";
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian_Russia.1251");
    string str{0};
    string buf{0};
    int n = 0;
    ifstream fin;
    ofstream fout;
    fin.open(input);
    if(!fin.is_open())
    {
        cerr << "Can't open file " << input << endl << endl;
        fin.clear();
    }
    else
    {
        cout << "\t\t\tOpen file " << input << endl << endl;
        while(!fin.eof())
        {
            getline(fin, str);
            cout << str << endl;
            buf += (str + "\n");
            n = str.length();
        }
        buf = Remove_line(buf, n);
        fin.close();
    }
    /***************************************************************************/
    fin.open(input);
    if(!fin.is_open())
    {
        cerr << "Can't open file " << input << endl << endl;
        fin.clear();
    }
    else
    {
        fout.open(output);
        if(fout.is_open())
        {
            fout << buf;
 
            cout << "\t\t\tRecorded file  " << output << endl << endl;
            fout.close();
        }
        else
        {
            cerr << "Can't open " << output << " file for output " << endl << endl;
            fout.clear();
        }
        fin.close();
    }
    /*********************************************************************/
    fin.open(output);
    if(!fin.is_open())
    {
        cerr << "Can't open file " << output << endl << endl;
        fin.clear();
    }
    else
    {
        cout << "\t\t\tOpen file " << output << endl << endl;
        while(getline(fin, buf))
        {
            cout << buf << endl;
        }
        fin.close();
    }
    cout << "\t\t\t\tBYE!!!" << endl << endl;
 
    system("pause");
    return (0);
}
string Remove_line(string s, int n)
{
    string strings;
    for(int i = 1; i < (s.size() - n) - 1; i++)
        strings += s[i];
 
    return strings;
}
P.s Подскажите , что еще можно сделать , что бы код покрасивее был)) Или может есть что лишнее в коде?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2016, 23:33
Помогаю со студенческими работами здесь

Удалить последнюю строку в файле (или сохранить файл без них)
Читаю текстовое поле чужого приложения, заношу содержимое в файл, из файла читаю последнюю строку. ...

Считать последнюю строку файла
Доброго времени суток! есть файл который имеет структуру(ниже), надо считать данные. До последней...

Вывести последнюю строку из файла
Здравствуйте, пишу на этом форуме впервые. Я недавно начал изучать С++, по-этому знаний мало,...

Взять последнюю строку из файла
Я новичок! (не яд). Короче, у меня есть текстовый файл очень большого объема (36,6 Мб) и мне нужно...


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

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

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