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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2010, 19:08   #1
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию Сохранить строку в поток

Здравствуйте! Подскажите пожалуйста как можно сохранить строку в поток. Если строка записана в мемо, то можно через сейвтустрим, а если строка записана в переменной?
RIO вне форума Ответить с цитированием
Старый 21.01.2010, 19:22   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Stream.Write(s[1],Length(s));
тока советую сохранять длину строки...иначе потом фиг прочтете(разве что строка последняя)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.01.2010, 19:24   #3
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

Спасибо

Еще вопрос.

Я записал строку в поток, и пытаюсь вывести ее теперь в мемо. Почему-то не работает данным методом:

Код:
Stream.Write(S[1], Length(S));
Memo1.Lines.LoadFromStream(Stream);

Последний раз редактировалось Stilet; 01.02.2010 в 07:47.
RIO вне форума Ответить с цитированием
Старый 01.02.2010, 07:49   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Рекомендую для строк использовать соответствующий класс работы с потоком:
Код:
var s:string;m:TStringStream;
begin
 s:='12313123';
 m:=TStringStream.Create(s);
 Memo1.Lines.LoadFromStream(m);
 m.Free;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.02.2010, 14:35   #5
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

О ! Все правильно. Спасибо, не знал о данном классе
RIO вне форума Ответить с цитированием
Старый 01.02.2010, 14:57   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Класс TStringStream
Цитата:
Так как строковые константы и переменные широко применяются при разработке приложений, то для удобства работы с ними создан специальный класс TStringStream. Он обеспечивает хранение строки и доступ к ней во время выполнения приложения.
Он обладает стандартным для потоков набором свойств и методов, добавляя к ним еще несколько, упрощающих использование строк.
Свойство только для чтения
Код:
property DataString: string;
обеспечивает доступ к хранимой строке. Методы
Код:
function Read(var Buffer; Count: Longint): Longint; override;
И
Код:
function Write(const Buffer; Count: Longint): Longint; override;
реализуют обычный для потоков способ чтения и записи строки для произвольной переменной Buffer.
Метод
Код:
function ReadString(Count: Longint): string;
обеспечивает чтение count байтов строки потока, начиная с текущей позиции.
Метод
Код:
procedure WriteString(const AString: string);
дописывает к строке строку AString, начиная с текущей позиции.
При работе с файлами и потоками используются дополнительные классы исключительных ситуаций.
Класс EFCreateError возникает при ошибке создания файла, a EFOpenError — при открытии файла.
При чтении/записи данных в поток могут возникнуть исключительные ситуации EReadError И EWriteError.
Их нужно обрабатывать.
Может быть вам это будет интересно, но в основном я - для тех, кто сумеет воспользоваться поиском и сможет почерпнуть полезное для себя, не создавая "зеркальной" темы...

Последний раз редактировалось mihali4; 02.02.2010 в 03:01.
mihali4 вне форума Ответить с цитированием
Старый 02.02.2010, 01:03   #7
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

И вам спасибо Хорошая информация

Я еще добавлю Может кто-то не поймет, как считывать поток в строку.

Так вот:

Код:
Stream := TStringStream.Create('');
S := Stream.ReadString(Stream.Size);
Stream.Free;

Последний раз редактировалось RIO; 02.02.2010 в 03:28.
RIO вне форума Ответить с цитированием
Старый 28.02.2010, 09:12   #8
recod
 
Аватар для recod
 
Регистрация: 17.10.2009
Сообщений: 4
По умолчанию

Считать строковый поток в строку можно немного проще :
Код:
Stream := TStringStream.Create('');
S := Stream.DataString;
Stream.Free;
recod вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПОТОК Neymexa Общие вопросы .NET 5 12.05.2009 01:03
Программа Вводит символьную строку и число N и выводит строку, состоящую из первых N символов (С++) Yulai Помощь студентам 1 11.05.2009 11:39
Как при нажатии на строку в Listbox передавать нажатую строку в переменную Михаил Юрьевич Общие вопросы Delphi 5 16.03.2009 12:59
Как сохранить строку в регистр или переменную Demonidze Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 10.02.2009 19:52
Поток Черничный Общие вопросы Delphi 5 27.09.2008 21:23