C++: как удалить последнюю пустую строку из файла?

Модератор: Модераторы разделов

Ответить
Аватара пользователя
ArkanJR
Сообщения: 1166
Статус: Профан

C++: как удалить последнюю пустую строку из файла?

Сообщение ArkanJR »

Имеется следующий код:

Код: Выделить всё

#include <fstream>
using namespace std;
int main()
{
ofstream out("result.txt");
for(int i = 1; i < 11; i++)
{
out << i << endl;
}
out.close();
return 0;
}

В результате получаем файл result.txt со следующим содержимым:
1
2
3
4
5
6
7
8
9
10

За числом 10 следует пустая строка. Имеется ли возможность задать в коде программы её (пустой строки) удаление?
10% — это 0,1.
© Bizdelnick
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: C++: как удалить последнюю пустую строку из файла?

Сообщение Bizdelnick »

ArkanJR писал(а):
09.10.2015 21:53
За числом 10 следует пустая строка.

Пустых строк не бывает. Если строка пустая — значит её нет. Если она есть — значит в ней должен быть как минимум завершающий символ перевода строки.
По идее у Вас должен был получиться файл такого содержания: "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n". Содержащий 10 строк. Что-то не так?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2042
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: C++: как удалить последнюю пустую строку из файла?

Сообщение Stauffenberg »

ArkanJR писал(а):
09.10.2015 21:53
За числом 10 следует пустая строка. Имеется ли возможность задать в коде программы её (пустой строки) удаление?

За числом 10 следует символ перевода строки (\n). Вы его хотите удалить? На последнем шаге просто уберите endl.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: C++: как удалить последнюю пустую строку из файла?

Сообщение Bizdelnick »

Stauffenberg писал(а):
09.10.2015 23:00
За числом 10 следует символ перевода строки (\n). Вы его хотите удалить? На последнем шаге просто уберите endl.

Хорошо бы при этом ещё отдавать себе отчёт, зачем это надо. Так делать не принято, и многие программы просто проигнорируют строку, не завершённую \n, а то и заглючат при чтении такого файла.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Kopilov
Сообщения: 949
ОС: [K]Ubuntu, Debian

Re: C++: как удалить последнюю пустую строку из файла?

Сообщение Kopilov »

А ещё при использовании приёма

Код: Выделить всё

echo "дописать в конец файла" >> файл
будет получен результат, отличный от ожидаемого.
Спасибо сказали:
Аватара пользователя
ArkanJR
Сообщения: 1166
Статус: Профан

Re: C++: как удалить последнюю пустую строку из файла?

Сообщение ArkanJR »

Bizdelnick писал(а):
09.10.2015 22:14
ArkanJR писал(а):
09.10.2015 21:53
За числом 10 следует пустая строка.

Пустых строк не бывает. Если строка пустая — значит её нет. Если она есть — значит в ней должен быть как минимум завершающий символ перевода строки.
По идее у Вас должен был получиться файл такого содержания: "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n". Содержащий 10 строк. Что-то не так?

Хотелось бы, чтобы в файле было только 10 строк с числами, а не так:
Вложения
line11.png
10% — это 0,1.
© Bizdelnick
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: C++: как удалить последнюю пустую строку из файла?

Сообщение Bizdelnick »

Ну откройте тот же файл в vim, там будет не так. Это просто особенность данного конкретного текстового редактора.
Или подсчитайте число строк с помощью wc -l и убедитесь, что их десять.
Или, наконец, посмотрите содержимое файла с помощью hexdump -C.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: C++: как удалить последнюю пустую строку из файла?

Сообщение yoshakar »

ArkanJR писал(а):
10.10.2015 12:53
Хотелось бы, чтобы в файле было только 10 строк с числами, а не так:
А можно узнать что это за редактор на снимке?
Спасибо сказали:
Аватара пользователя
ArkanJR
Сообщения: 1166
Статус: Профан

Re: C++: как удалить последнюю пустую строку из файла?

Сообщение ArkanJR »

yoshakar писал(а):
10.10.2015 15:45
А можно узнать что это за редактор на снимке?

AkelPad. Когда скриншот делал, не было под рукой линукс-ПК.

Bizdelnick писал(а):
10.10.2015 13:13
Ну откройте тот же файл в vim, там будет не так. Это просто особенность данного конкретного текстового редактора.
Или подсчитайте число строк с помощью wc -l и убедитесь, что их десять.
Или, наконец, посмотрите содержимое файла с помощью hexdump -C.

Действительно. Интересно, а почему текстовые редакторы показывают разное количество строк?
10% — это 0,1.
© Bizdelnick
Спасибо сказали:
Kopilov
Сообщения: 949
ОС: [K]Ubuntu, Debian

Re: C++: как удалить последнюю пустую строку из файла?

Сообщение Kopilov »

Давайте прикинем. Сперва у Вас есть файл "ровно" с n-ю строками. В конце последней строки не стоит символ сброса (\n) -- как гововрили выше, это может быть плохо по различным причинам. Во-первых, поймут не все парсеры. Во-вторых, при автоматическом дописывании новых строк первая из них склеится с последней из имевшихся.

Теперь добавим в конец символ \n. С точки зрения содержимого файла новой строки не будет, мы лишь завершим старую по общепринятому стандарту. С точки зрения GUI редактора мы, набрав последние символы в n-й строке, нажали клавишу Enter, то есть перешли на n+1-ю. Но, пока там нет ни одного символа -- это не совсем строка, а некий "placeholder", в который можно только поставить курсор. Показывать ли его как строку с новым номером -- вопрос субъективный. Для большинства пользователей привычнее, если да.
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2042
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: C++: как удалить последнюю пустую строку из файла?

Сообщение Stauffenberg »

Bizdelnick писал(а):
09.10.2015 23:12
Stauffenberg писал(а):
09.10.2015 23:00
За числом 10 следует символ перевода строки (\n). Вы его хотите удалить? На последнем шаге просто уберите endl.

Хорошо бы при этом ещё отдавать себе отчёт, зачем это надо.

Я исхожу из того, что ТС понимает что делает. Возможно он добавляет к этой строке еще что-то, вызывая либо следующую функцию, либо другую программу. Пример, приведенный тут, наверняка изменен.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Ответить