Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];

Вниз

фокус с TMemoryStream)   Найти похожие ветки 

 
maxim   (2011-10-09 10:25) [0]

var m:TMemoryStream;
   l:TStringList;
   buf:string;
begin
m:=TMemoryStream.Create;
l:=TStringList.Create;
buf:="qwerty";
m.Write(buf[1],6);
l.LoadFromStream(m);
showmessage(l.Text);//а где строка?
l.Free;
m.Free;
end;


пишу строку в поток, после из потока гружу в стринглист, оппа, а строки уже и нет), подскажите, где наврал?


 
Anatoly Podgoretsky ©   (2011-10-09 10:35) [1]

> maxim  (09.10.2011 10:25:00)  [0]

L.Add("qwerty");


 
maxim   (2011-10-09 10:43) [2]


> Anatoly Podgoretsky

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


 
Anatoly Podgoretsky ©   (2011-10-09 10:49) [3]

> maxim  (09.10.2011 10:43:02)  [2]

Что значит неиснтересно, у тебя это игра такая, результат вообще не
интересен?


 
sniknik ©   (2011-10-09 10:49) [4]

> почему не пишется.
m.Position:= 0;


 
sniknik ©   (2011-10-09 10:53) [5]

> это игра такая, результат вообще не интересен?
"оне" не ищут простых путей, т.к. уже считают себя профи, но еще не стали, не доросли до простых решений.
именно, что игра "в программиста".


 
maxim   (2011-10-09 10:55) [6]

спасибо большое, теперь ясно


 
_Юрий   (2011-10-09 11:50) [7]


> maxim   (09.10.11 10:55) [6]


Галка "Use debug .dcus"  в опциях проекта  позволяет заходить отладчиком внутрь стандартных модулей, и обретать таким образом ясность самостоятельно


 
Cobalt ©   (2011-10-10 13:54) [8]

Вариант 1)
называем писю
m.Write(buf[1],6);
членом
buf:ansistring;
...
m.Write(buf[1],Length(buf)*SizeOf(ansiChar));


Вариант 2) надеваем презерватив:
var m:TMemoryStream;
  l:TStringList;
  buf:string;
  Encoding: TEncoding;
begin
m:=TMemoryStream.Create;
l:=TStringList.Create;
buf:="qwerty";
m.Write(buf[1],Length(buf)*SizeOf(Char));
m.Position := 0;
Encoding := TEncoding.Create;
try
 l.LoadFromStream(m, Encoding.Unicode);
finally
 Encoding.Free;
end;
showmessage(l.Text);
l.Free;
m.Free;


 
Ega23 ©   (2011-10-10 14:09) [9]

Length(buf)*SizeOf(ansiChar)

Зачем?


 
stas ©   (2011-10-10 14:34) [10]

Ega23 ©   (10.10.11 14:09) [9]

Чтобы корректно работало на юникодной версии Delphi.


 
Ega23 ©   (2011-10-10 14:46) [11]


> Чтобы корректно работало на юникодной версии Delphi.


buf:ansistring;
...
m.Write(buf[1],Length(buf)*SizeOf(ansiChar));


 
Andy BitOff ©   (2011-10-10 22:20) [12]

> Ega23 ©   (10.10.11 14:46) [11]
> buf:ansistring;

А ну как завтра война? В военное время, знаешь чего...
;)


 
Alex_C   (2011-10-10 22:41) [13]


> пишу строку в поток, после из потока гружу в стринглист,
>  оппа, а строки уже и нет), подскажите, где наврал?


Наврал вот здесь:


> l.LoadFromStream(m);


Так не правильно! Чтобы правильно было нужно чтобы запись в поток осуществлялась вот так:

m.Write(buf, Length(buf));


Сам столкнулся с такой же проблемой: дело в том, что при записи/чтении переменной типа String в поток происходит следущее: первым записывается/считывается размер String, а затем уже сама строка. В результате при

> m.Write(buf[1],6);

Записалось только содержание самой строки, а при

> l.LoadFromStream(m, Encoding.Unicode);

Считывается первый байт, затем размер m устанавливается равным первому считываемому байту, и туда записывается байты строки. Естественно что получается у тебя первый байт - не размер строки, а первый байт строки!


 
Alex_C   (2011-10-10 22:48) [14]

Еще небольшое замечание на счет использования потоков: если есть необходимость записать в поток несколько переменных типа стринг, а потом их считать, делать нужно примерно так:
1. StrPCopy - из строк создаем массивы.
2. Записываем Размер первого массива, сам массив, размер второго массива, сам массив.
3. Считывание - как п.2.
Тогда никаких проблем при чтении/записи из Stream не возникает.


 
Servy ©   (2011-10-11 03:32) [15]


>  [13]



> Так не правильно! Чтобы правильно было нужно чтобы запись
> в поток осуществлялась вот так:
>
> m.Write(buf, Length(buf));



> buf:string;


Это типа вредных советов типа "разогрейте яйца в микроволновке"? Смайлики тогда ставьте, что ли.


> 1. StrPCopy - из строк создаем массивы.

А это новый тренд моды - чтобы что-то записать в поток, надо это что-то скопировать в памяти и положить в другое, более феншуйное место?



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.004 c
2-1318595251
Очень Злой
2011-10-14 16:27
2012.01.22
Unicode


1-1281096380
Evgeney
2010-08-06 16:06
2012.01.22
Поиск компонентов и применение параметров


15-1317445057
Gtxfnm
2011-10-01 08:57
2012.01.22
Печать больших форматов на А4


9-1173859594
GameProger
2007-03-14 11:06
2012.01.22
Создание ShareWare игр в делфи


3-1270104268
Lyudik
2010-04-01 10:44
2012.01.22
Передача данных из Oracle в Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский