Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2009, 15:57   #1
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию Метод Add у TStringList

Собстенно проблема вот в чем:
При добавлении в TStringList.Add каких либо строк, метод автоматом переводит каретку на новую строку. В итоге когда я сохраняю TStringList.SaveToFile у меня в конце текстовика остается лишняя (ненужная) пустая строка. Как этого избежать? TStringList.Insert тоже не погает.
Заранее благодарен.
FaTaL вне форума Ответить с цитированием
Старый 03.06.2009, 16:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У этого класса есть метод Delete Укажи ему индексим Count...
Хотя с твоей проблемой я не сталкивался...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.06.2009, 18:30   #3
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

либо перед сохранением удаляй последнюю (пустую) строчку,
либо добавление делай не так TStringList.Add(s), а так: TStringList.Text:=TStringList.Text+ #13#10+s

s - это переменная типа string.
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 03.06.2009, 18:31   #4
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Добавление символов перевода каретки в конец StringList - особенность реализации и с этим ничего не поделаешь.
Приходится, если эти символы мешают, выкручиваться.
Можно сделать копию строки, содержащейся в StringList без двух конечных символов [S := Copy(SL.Text, 1, Length(SL.Text)-2); где S : string], затем записывать эту строку в файл. Конечно, теряется преимущество работы с файлами StringList, но из двух "зол" выбирают то, которое больше по нраву.
Если символы в конце действительно мешают (не помню случая чтобы это было), то можно перенести строку из StringList в MemoryStream. Этот класс записывает в файл ничего не добавляя в конец.
Код:
  SL : TStringList;
  SS : TMemoryStream;
  S : String;
begin
  SL := TStringList.Create;
  SL.CommaText := '11,22,33,44,55';

  SS := TMemoryStream.Create;
  try
    S := Copy(SL.Text, 1, Length(SL.Text)-2);
    SS.Write(S[1], Length(S));
    SS.SaveToFile('e:\strlist.txt');

  finally
    SL.Free;
    SS.Free;
  end;
-----------
Ntlegend, ни первый, ни второй совет не поможет, хмурый дядя Borland не даст.

Последний раз редактировалось Скандербег; 03.06.2009 в 18:35.
Скандербег вне форума Ответить с цитированием
Старый 20.09.2014, 12:56   #5
carlozzz
Пользователь
 
Регистрация: 14.03.2011
Сообщений: 11
По умолчанию

Перед SaveToFile, делаем

StringList.Text:=trim(StringList.Te xt); //Удаляем "пустые" символы по краям

Enjoy!
carlozzz вне форума Ответить с цитированием
Старый 20.09.2014, 13:24   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от carlozzz Посмотреть сообщение
Перед SaveToFile, делаем

StringList.Text:=trim(StringList.Te xt); //Удаляем "пустые" символы по краям

Enjoy!
во-первых, фигня, никакого "enjoy" не получится, это работать НЕ БУДЕТ.
Метод SaveToFile ВСЕГДА добавляется пустую строку в конец. Вне зависимости от содержимого Text

во-вторых, зачем писать в тему 5 (ПЯТИЛЕТНЕЙ) давности?!
Хочем понекропостить?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.09.2014, 18:56   #7
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Ещё 5 лет назад выкрутился просто через TFileStream удаляю последние два байта и всё
FaTaL вне форума Ответить с цитированием
Старый 21.09.2014, 09:59   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

FaTaL, так в пост #4 Скандербег предложил решение чуть-чуть проще: писать Text в файл через TFileStream, тогда ничего лишнего не запишется и удалять ничего не потребуется!

Впрочем, что это я... Проблемы уже пять лет, как нет, а я туда же, в обсуждение...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
add project lalilulelo Помощь студентам 3 26.05.2009 10:18
Класс TStringlist vitamin.rulez Помощь студентам 1 09.02.2009 14:42
TStringstream VS Tstringlist Lich Работа с сетью в Delphi 2 06.01.2009 10:54
TStringList nimf Общие вопросы Delphi 5 15.11.2007 14:44
Класс TStringList Pblog Обсуждение статей 0 27.05.2007 02:13