![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]()
строка это что? последовательность символов!
а TMemoryStream это что? тоже последовательность символов! (или нет?) как строку запихнуть в TMemoryStream? и еще один вопрос по поводу TMemoryStream. что такое buffer? почти все функции работы с TMemoryStream просят это, но нигде не написано что это такое =( только не баньте плиз, если вдруг такая тема уже есть. я не нашел. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 28.03.2007
Сообщений: 1,814
|
![]()
Я например для записи строки в мемористрим использую стрингстрим
запись в файл строки Код:
Код:
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
> тоже последовательность символов! (или нет?)
скорее последовательность байт > что такое buffer? любые данные > но нигде не написано что это такое =( даже если Ф1 нажать? не верю ) краткий курс по записи в поток: Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]()
сделал как написал SERG1980 =)
все работает, всем спасибо! и я не очень понял, что мы делаем вот этой строчкой: ms.Write(s[1], length(s) * sizeof(s[1])); ? мы передаем в функцию первый символ строки и длину строки * размер первого символа (?) это вы для наглядности написали? насколько я понял length(s) * sizeof(s[1]) это сколько памяти нужно выделить для строки? sizeof(s[1]) - это что? здесь мы определяем размер одного символа??? 1 байт. всегда. (или я не прав?) и если можно, veniside, прокомментируйте, пожалуйста ваш код? а то что это такое ms.Write(s[1], length(s) * sizeof(s[1])); я еще понял, но все последующее, не понимаю зачем нужно... Последний раз редактировалось xrob; 20.05.2011 в 09:49. |
![]() |
![]() |
![]() |
#5 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
Цитата:
А вот если в потоке несколько строк (или несколько различных данных/структур), тогда с определением длины строки возникнут огромные сложности. я, если надо в поток(файл) сохранить строку предварительно пишу в поток(файл) длину. ну, примерно так: Код:
|
||
![]() |
![]() |
![]() |
#6 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Думаю, важно упомянуть, что тип string по умолчанию в дельфи это не shortstring а ansistring , указатель на строку, и чтобы записать её данные, а не сам указатель, надо её "разыменовать", а делается это посредством обращения к первому символу, ну а количество байт для записи из строки определяем функцией length .
Насчет sizeof(s[1]) - это для гибкости кода (для последующей поддержки проектов) - потому как с дельфи 2009 (вроде) стандартный тип string уже является unicode widestring и размер одного символа - 2 байта. При чтении , как написал Serge, удобно считывать размер прямо из файла (тогда надо его туда записать), хотя можете исхитриться использовать маркер конца строки - свой или #0 (тут правда придётся посимвольно считывать) |
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
phomm, согласен со всем сказанным.
но хочу сделать одно маленькое уточнение (для изучающих работу с сохранением строки) Цитата:
Т.е. его туда надо записать (хоть свой, хоть #0)... |
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]()
а у меня такой вопрос.
если какой-то файл создан с использованием всех 256 символов, в том числе и #0, то такой файл категорически не сочетается с PChar? и еще, string это указатель??? т.е. когда я передаю в функцию bugoga(str:string):integer; то я передаю указатель? а что тогда такое str[5]; ? указатель на пятый символ строки? а str[3]:='d'; получается указателю присваиваю значение типа char? и еще вопрос, ответить можно в формате boolean: PChar - это указатель на первый символ строки, которая оканчивается #0 ? т.е. чтобы получить PChar нужно str:=str+#0; PChar:=@str[1]; так? |
![]() |
![]() |
![]() |
#9 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
да простит меня GunSmoker за сие...
ответ на поставленные вопросы - http://www.transl-gunsmoker.ru/2009/09/pchars.html |
![]() |
![]() |
![]() |
#10 | |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]() Цитата:
терминатор! он должен был что-то завершить! за сцылку спасибо. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
string, TMemoryStream, TBitmap и я | xrob | Свободное общение | 5 | 20.05.2011 09:01 |
IdHTTP и TMemoryStream и String | syserg | Работа с сетью в Delphi | 2 | 02.04.2010 20:31 |
TMemoryStream | Владимир1988 | Помощь студентам | 0 | 13.02.2010 13:04 |
Как получить адрес String строки или преобразовать String | madboy4ik | Общие вопросы по Java, Java SE, Kotlin | 6 | 15.01.2010 11:57 |