Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Последняя строка TStringList


Автор: Canada 10.1.2010, 05:21
Здравствуйте. Сохраняю TStringList в файл и он дописывает еще 1 строку. Т.е. добавляет или каретку или еще что-то. Но данных 100 строк и в конце файла пустая 101-я строка, которая мне не нужна. Как это поправить? Заранее благодарен.

Автор: Демо 10.1.2010, 07:40
Он ничего не добавляет. Смотри содержимое до сохранения.

Автор: Canada 12.1.2010, 01:04
Да добавляет. Загрузил 100 строк, сделал SaveToFile на выхлопе 101. Там как перенос каретки добавился в конце.

Автор: Keeper89 12.1.2010, 01:27
Canada, код в студию.

Автор: Данкинг 12.1.2010, 01:46
Может, это "Блокнот" сам просто переносит курсор на следующую строчку, если встать на последнюю? Попробуй загрузить из сохранённого файла снова в StringList - что получится?

Автор: Демо 12.1.2010, 10:01
Цитата(Canada @  10.1.2010,  05:21 Найти цитируемый пост)
Здравствуйте. Сохраняю TStringList в файл и он дописывает еще 1 строку. Т.е. добавляет или каретку или еще что-то. Но данных 100 строк и в конце файла пустая 101-я строка, которая мне не нужна. Как это поправить? Заранее благодарен.


Понятно о чём ты.

101-й строки не существует.
Её показывают тебе твои средства отображения и редактирования.

2 символа действительно добавляются,но это нормальное поведение TStrings.
Текстовый файл заканчивается #13#10, но после них ничего нет - никакой новой строки.

Если тебе нужно управлять этим процессом (т.е. не на уровне строк, а на уровне байт) - не используй TStrings.

Автор: Frees 12.1.2010, 10:43
можно сохранить TStringList в поток и у потока удалить 2 последних байта

Автор: hkdkest 12.1.2010, 18:28
Цитата(Canada @ 10.1.2010,  05:21)
Здравствуйте. Сохраняю TStringList в файл и он дописывает еще 1 строку. Т.е. добавляет или каретку или еще что-то. Но данных 100 строк и в конце файла пустая 101-я строка, которая мне не нужна. Как это поправить? Заранее благодарен.

сохрани 99 строк =))

Автор: Snowy 13.1.2010, 12:38
Код
var
  sl: TStringList;
  s:  AnsiString;
begin
  sl := TStringList.Create;
  sl.Add('Str1');
  sl.Add('Str2');
  try
    with TFileStream.Create('C:\1.1', fmCreate) do
    try
      s := sl.Text;
      Write(s[1], Length(s) - 2); // без 2-х байт
    finally
      Free;
    end;
  finally
    sl.Free;
  end;
end;

Автор: Canada 15.1.2010, 11:14
Спасибо всем огромное! Я приболел и поэтому не заходил. Еще раз Большое Спасибо!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)