Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TStringlist, ошибка при SaveToStream 
:(
    Опции темы
tigger
Дата 24.10.2005, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

Репутация: нет
Всего: 4



Существует такая проблема:

Код

procedure Save_To_File;
var
Out_str_kd,Out_str_sd:TStringlist;
source_kd,source_sd:TStream;
begin

Out_str_kd:=TStringlist.Create;
Out_str_sd:=TStringlist.Create;

//--------------------
//наполнение Out_str_kd и Out_str_sd
//
//--------------------

source_kd:=TMemoryStream.Create;
source_sd:=TMemoryStream.Create;


Out_str_kd.SaveToStream(source_kd);
Out_str_sd.SaveToStream(source_sd);

//дальнейшая работа с source_kd и с source_sd

end;



так вот после выполнения этой процедуры source_kd и source_sd пусты.
Как от этого избавиться, вообщем нужно TStringlist перевести в TStream кроме TFileStream.


--------------------
user posted image
PM MAIL   Вверх
_hunter
Дата 24.10.2005, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



а как ты определяеш пусты они или нет. и как заполняеш?
+ зачем тут код дублировать?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
tigger
Дата 24.10.2005, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

Репутация: нет
Всего: 4



Пустоту определяю через source_kd.size и source_sd.size
Наполнение Out_str_kd.Add('строка[i]').

Дальнейшая работа идет с вызова фунции Any_Func(F:TFileStream; S:TStream; A:integer).
где s - source_sd, А - source_sd.size F - выходной файл. Так вот чтобы ввести S нужно TStringlist как-то сохранить в TStream.




--------------------
user posted image
PM MAIL   Вверх
Rennigth
Дата 24.10.2005, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Попробуй так.

Код

procedure Save_To_File;
var
Out_str_kd,Out_str_sd:TStringlist;
source_kd,source_sd:TStream;
begin

Out_str_kd:=TStringlist.Create;
Out_str_sd:=TStringlist.Create;

//--------------------
//наполнение Out_str_kd и Out_str_sd
//
//--------------------

source_kd:=TMemoryStream.Create;
source_sd:=TMemoryStream.Create;


Out_str_kd.SaveToStream(source_kd);
Out_str_sd.SaveToStream(source_sd);

source_kd.Position := 0;
source_sd.Position := 0;

//дальнейшая работа с source_kd и с source_sd

end;




--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
_hunter
Дата 24.10.2005, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



возможно приколы оптимизатора...
а вообще: найди n отличий:
Код

var
  stringList : TStringList;
  stream : TStream;
begin
  stringList := TStringlist.Create();
    stringList.Add('test');

  stream := TMemoryStream.Create();

  stringList.SaveToStream(stream);

  ShowMessage(IntToStr(stream.Size));
end;

Добавлено @ 16:02
Rennigth, позиция к размеру отношения точно не имеет...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Rennigth
Дата 24.10.2005, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(_hunter @ 24.10.2005, 16:01)
Rennigth, позиция к размеру отношения точно не имеет...

smile не спорю.

SaveToStream после сохранения устанавливает Position стрима в конец.
Я просто подумал что проблемма у tigger именно в том что он потом пытается с ним работать и естественно если position в конце у него не получается данные получить.
Других траблов с его кодом я не увидел, Size точно должен-быть нормальным.

Это сообщение отредактировал(а) Rennigth - 27.10.2005, 14:56


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
tigger
Дата 24.10.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

Репутация: нет
Всего: 4



Код

var
  stringList : TStringList;
  stream : TStream;
  buf:array [0..5] of char;
begin
  stringList := TStringlist.Create();
    stringList.Add('test');

  stream := TMemoryStream.Create();

  stringList.SaveToStream(stream);

  ShowMessage(IntToStr(stream.Size));
  
  stream.Read(buf,stream.Size);
 
  ShowMessage(buf);

end;


в buf ну не как не хочет заходить строка test



--------------------
user posted image
PM MAIL   Вверх
_hunter
Дата 24.10.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



дык он сам же написал:
Цитата
Пустоту определяю через source_kd.size и source_sd.size

хотя мало ли ( код не привел )...

явно бага где-то тут:
Код
//--------------------    
//наполнение Out_str_kd и Out_str_sd    
//    
//--------------------

но, раз код не показывает, телепатией заниматься не будем smile
Добавлено @ 17:07
а вот тут уже смотри замечание Rennigth-та...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
tigger
Дата 24.10.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

Репутация: нет
Всего: 4



Наполнение идет здесь

Код

for i := 0 to kd_str.Count - 1 do
           begin //1
           Out_str_kd.Add(Video_data[i].index+#6+Video_data[i].k_disca+#7+Video_data[i].n_disca+#8);
                    for ii:=0 to length(Video_data[i].soderzanie)-1 do
                              begin  //2
                              Out_str_sd.Add(Video_data[i].index + #1 +
                                             Video_data[i].soderzanie[ii] + #2 +
                                             inttostr(Video_data[i].cemka[ii].mecac) + #3 +
                                             inttostr(Video_data[i].cemka[ii].god) + #4 +
                                             Video_data[i].imia[ii] + #5 +
                                             Video_data[i].prod[ii] + #6 +
                                             Video_data[i].k_mater[ii] + #7 +
                                             Video_data[i].primecan[ii]+ #8)
                              end;   //_2
           end;  //_1



--------------------
user posted image
PM MAIL   Вверх
p0s0l
Дата 24.10.2005, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Цитата(tigger @ 24.10.2005, 17:04)
Код

var
  stringList : TStringList;
  stream : TStream;
  buf:array [0..5] of char;
begin
  stringList := TStringlist.Create();
    stringList.Add('test');

  stream := TMemoryStream.Create();

  stringList.SaveToStream(stream);

  ShowMessage(IntToStr(stream.Size));
  
  stream.Read(buf,stream.Size);
 
  ShowMessage(buf);

end;


в buf ну не как не хочет заходить строка test

Ты наверное не заметил, но тебе Rennigth написал делать Position := 0;
Поэтому если ты хочешь, чтобы в buf прочиталась строка test, то нужно так (смотри знаки восклицания):
Код

var
  stringList : TStringList;
  stream : TStream;
  buf:array [0..5] of char;
begin
  stringList := TStringlist.Create();
    stringList.Add('test');

  stream := TMemoryStream.Create();

  stringList.SaveToStream(stream);

  ShowMessage(IntToStr(stream.Size));
  
  stream.Position := 0; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  stream.Read(buf,stream.Size);
 
  ShowMessage(buf);

end;




--------------------
С уважением, г-н Посол.
PM   Вверх
_hunter
Дата 25.10.2005, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



но я так и не понял решилась ли проблема с нулевым размером потока...
АФФТАР!!! АУ!!! smile


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
tigger
Дата 27.10.2005, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

Репутация: нет
Всего: 4



_hunter, Rennigth, p0s0l всем спасибо
проблема решена через поток.Position := 0


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0619 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.