Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.13;
Скачать: CL | DM;

Вниз

Как в TStream записать строку   Найти похожие ветки 

 
@!!ex ©   (2009-07-10 21:29) [0]

Есть две строки. динамической длины и фиксированной:
Str1:string[4];
Str2:string;

Мне нужно эти строки записать в Stream.
Проблема в тмо, что надо передавать не указатель, а буффер... и ЧТО туда передавать?
по логике Str1[1], Str2[1], ан нет, нифига...


 
Германн ©   (2009-07-10 21:45) [1]


> ан нет, нифига...

С чего бы нифига?


 
turbouser ©   (2009-07-10 22:36) [2]


>
> @!!ex ©   (10.07.09 21:29)  


> Проблема в тмо, что надо передавать не указатель, а буффер

Эмммм... Можно по подробнее с этого момента?


 
palva ©   (2009-07-10 23:57) [3]

Поток это последовательность байтов. То есть, надо сначала придумать как хранить в потоке длину строки. То ли в явном виде (скажем четыре байта) то ли завершать строку ограничителем. (Тогда ограничитель в строке не допустим.) Возможны разные другие изощренные методы. Но способ должен придумать ты сам. А потом будет возможен разговор, как это реализовать.


 
Amoeba ©   (2009-07-11 00:24) [4]


> @!!ex ©   (10.07.09 21:29)
>
> Есть две строки. динамической длины и фиксированной:
> Мне нужно эти строки записать в Stream.
> Проблема в тмо, что надо передавать не указатель, а буффер.
> .. и ЧТО туда передавать?

Не слабо! Просто изумляете!
Вы, молодой человек, частенько такие вопросы ухитряетесь задать, что и не знаешь, что думать о вашей квалификации. Прямо хоть стой, хоть падай.

А ведь задача элементарнейшая. Как-то и неприлично давать две строчки простейшего готового кода.

> по логике Str1[1], Str2[1], ан нет, нифига...

А здесь Ваш код в студию!


 
@!!ex ©   (2009-07-11 00:50) [5]

> [2] turbouser ©   (10.07.09 22:36)

Все просто. я как белый человек привык в функции записи/чтения передавать указатели. А тут гребанный var\const.

> [3] palva ©   (10.07.09 23:57)

Как хранить я знаю. сначала идет длина, потом строка, либо если фиксированный размер строки, то без длины.
Проблема в том, что эта фигня не хочет реагировать на строку переданную в качестве буффера.

> [4] Amoeba ©   (11.07.09 00:24)

Могу развеять ваши сомнения. Я полный ноль в понимании var и const и считаю их идиотским изобретение больных на голову упрощенцев(не опечатка).


 
Германн ©   (2009-07-11 00:55) [6]


> @!!ex ©   (11.07.09 00:50) [5]
>
> > [2] turbouser ©   (10.07.09 22:36)
>
> Все просто. я как белый человек привык в функции записи/чтения
> передавать указатели. А тут гребанный var\const.
>

И тут передаётся указатель. Ne"s pa?

> > [3] palva ©   (10.07.09 23:57)
>
> Как хранить я знаю. сначала идет длина, потом строка, либо
> если фиксированный размер строки, то без длины.
> Проблема в том, что эта фигня не хочет реагировать на строку
> переданную в качестве буффера.
>

Проблема в непонимании того, что нужно хранить и как потом восстанавливать.

> > [4] Amoeba ©   (11.07.09 00:24)
>
> Могу развеять ваши сомнения. Я полный ноль в понимании var
> и const и считаю их идиотским изобретение больных на голову
> упрощенцев(не опечатка).

Большинство на форуме после такого высказывания признает тебя больным. Ну или (в моём стиле) трешником.


 
Германн ©   (2009-07-11 01:03) [7]


> Как в TStream записать строку
>
> @!!ex ©   (10.07.09 21:29)  

И кстати. Не пора ли перейти от слов к делу?

> Мне нужно эти строки записать в Stream.
> Проблема в тмо, что надо передавать не указатель, а буффер.
> .. и ЧТО туда передавать?
> по логике Str1[1], Str2[1], ан нет, нифига...

И объяснить задачу и привести пример кода, который пробовался, но не решил вышеуказанную.


 
@!!ex ©   (2009-07-11 09:20) [8]

> [6] Германн ©   (11.07.09 00:55)
> И тут передаётся указатель. Ne"s pa?

Через жопу.


> Проблема в непонимании того, что нужно хранить и как потом
> восстанавливать.

Спасибо что объяснили. А я то идиот, думал что протокол обмена данными уже разработан. Ан нет, оказываеться яне знаю как хранить и как восстанавливать.


> [6] Германн ©   (11.07.09 00:55)
> Большинство на форуме после такого высказывания признает
> тебя больным. Ну или (в моём стиле) трешником.

Вы впраые думать обо мне что считаете нужным.


> [7] Германн ©   (11.07.09 01:03)
> И кстати. Не пора ли перейти от слов к делу?

Уже не порка.
ВСе было решено извращениями вот nакого вида:
Stream.Read((@Text[1])^,Length);


 
жж   (2009-07-11 10:14) [9]


> ВСе было решено извращениями вот nакого вида:
> Stream.Read((@Text[1])^,Length);


Не так
а вот так:

Stream.ReadBuffer(Text[1], Length(Text))
причем сначала надо отдельным полем записать \ считать длину, чтобы перел началом чтения выставить SetLength
это для динамической строки

для статической можно просто :
Stream.ReadBuffer(Texе, SizeOf(Text))


 
@!!ex ©   (2009-07-11 10:18) [10]

> [9] жж   (11.07.09 10:14)

Спасибо, буду знать.


 
Юрий Зотов ©   (2009-07-11 10:44) [11]

> @!!ex ©

Специально для тех, кто не хочет разбираться в деталях языка:
StrStream := TStringStream.Create(строка);
и можно ни о чем не заботиться.

Но лучше все-таки в деталях языка разобраться. Оно потом пригодится.


 
@!!ex ©   (2009-07-11 10:54) [12]

> [11] Юрий Зотов ©   (11.07.09 10:44)

Я согласен разбираться в деталях языка...
но ситуации вида:
var
 null:pointer;
begin
 null:=nil;
 someFunc(null^);
end;

Это же бред. Умники переводящие someFunc не удосужились прочитать доку и понять, что она может принимать NULL и сделали параметр const"ом. Ну и нафиг это нужно?

Хотя уже спорили об этом.

P.S.
Специфику языка мне почти не имеет смысл изучать, потому что нужно писать код легко портируемый. Это конечно усложняет написание, некоторые фишки в дельфи очень удобны. С другой стороны не приходитсья заморачиваться с "изысками".


 
turbouser ©   (2009-07-11 11:05) [13]

null:pointer;
убивать за такое


 
@!!ex ©   (2009-07-11 11:12) [14]

> [13] turbouser ©   (11.07.09 11:05)

я тоже так думаю.
someFunc(nil) куда логичнее. Но нет, надо костылей в виде var/const параметров навешать.


 
turbouser ©   (2009-07-11 11:17) [15]


> @!!ex ©   (11.07.09 11:12) [14]
>
> > [13] turbouser ©   (11.07.09 11:05)
>
> я тоже так думаю.
> someFunc(nil) куда логичнее.

Я вообще-то имел ввиду название переменной


 
Anatoly Podgoretsky ©   (2009-07-11 11:33) [16]

И за название переменной, и за переменную, и за someFunc(null^), и за someFunc(nil) можно убивать и послать к изучению языка, который ты извчать не хочешь, но научился громко кричать.


 
@!!ex ©   (2009-07-11 11:49) [17]

> [16] Anatoly Podgoretsky ©   (11.07.09 11:33)

да это разве громко?

как вы передадите nil в такую функцию, расскажите неучу:
procedure someFunc(var i:integer);


 
Игорь Шевченко ©   (2009-07-11 11:53) [18]

@!!ex ©   (11.07.09 11:49) [17]

А зачем в нее передавать nil ?


 
{RASkov} ©   (2009-07-11 11:53) [19]

> [17] @!!ex ©   (11.07.09 11:49)

Эта функция не может принимать nil в параметре


 
@!!ex ©   (2009-07-11 11:55) [20]

> [18] Игорь Шевченко ©   (11.07.09 11:53)


> [19] {RASkov} ©   (11.07.09 11:53)


Потому что в WinAPI функция МОЖЕТ принимать, NULL в качестве параметра. А разработчики из Борланда, этот момент из виду упустили. Сейчас я точно не вспомню в каких функциях это встречается, но то что я на это натыкался - факт.


 
turbouser ©   (2009-07-11 11:56) [21]

:)


 
Anatoly Podgoretsky ©   (2009-07-11 12:00) [22]


> @!!ex ©   (11.07.09 11:49) [17]
> > [16] Anatoly Podgoretsky ©   (11.07.09 11:33)
>
> да это разве громко?
>
> как вы передадите nil в такую функцию, расскажите неучу:
>
> procedure someFunc(var i:integer);

Ты смеешься, какой еще NIL если параметр integer


 
Anatoly Podgoretsky ©   (2009-07-11 12:00) [23]

> @!!ex  (11.07.2009 11:55:20)  [20]

Ты не путай NULL с NULL и NULL c nil


 
Anatoly Podgoretsky ©   (2009-07-11 12:01) [24]


> @!!ex ©   (11.07.09 11:49) [17]
> > [16] Anatoly Podgoretsky ©   (11.07.09 11:33)
>
> да это разве громко?
>
> как вы передадите nil в такую функцию, расскажите неучу:
>
> procedure someFunc(var i:integer);

Ты смеешься, какой еще NIL если параметр integer


 
{RASkov} ©   (2009-07-11 12:02) [25]

Прекрати уже истерику :)
Разработчики из Борланда много вещей сделали удобнее чем это самое на винапи делать


 
@!!ex ©   (2009-07-11 12:03) [26]

> [22] Anatoly Podgoretsky ©   (11.07.09 12:00)

В оригинале:
void someFunc(int* i);


 
Игорь Шевченко ©   (2009-07-11 12:10) [27]

@!!ex ©   (11.07.09 12:03) [26]

передать можно, somefunc(PInteger(nil)^);

И зачем громко кричать здесь - кричи в Борланде, есть место для кричания, называется Quality Central


 
Anatoly Podgoretsky ©   (2009-07-11 12:19) [28]

Видимо так -somefunc(nil^);, ты же не привел проторип функции


 
@!!ex ©   (2009-07-11 12:22) [29]

> [27] Игорь Шевченко ©   (11.07.09 12:10)

Так можно.


> [28] Anatoly Podgoretsky ©   (11.07.09 12:19)

Так нельзя. Там var.


> [28] Anatoly Podgoretsky ©   (11.07.09 12:19)
> ты же не привел проторип функции

Привел. [17]


 
Anatoly Podgoretsky ©   (2009-07-11 12:50) [30]

Ну и что, что var, тогда нельзя и PInteger(nil)^) потому что var
Ты видимо не различаешь типизированые и нетипизированые указатели.


 
sniknik ©   (2009-07-11 13:04) [31]

@!!ex ©   (11.07.09 11:49) [17]
> как вы передадите nil в такую функцию, расскажите неучу:
> procedure someFunc(var i:integer);

@!!ex ©   (11.07.09 12:03) [26]
> В оригинале:
> void someFunc(int* i);
но тогда, более точный перевод будет вовсе не var/const а
procedure someFunc(i: PInteger);
и тогда в ней становиться можно чудесным образом передавать nil, и следуют другие изменения по работе с переменной.

p.s. объяснять что, как и почему не буду. обжигался.


 
oldman ©   (2009-07-11 13:26) [32]


> palva ©   (10.07.09 23:57) [3]
> Поток это последовательность байтов.


То есть, передать проблем нет. Проблема принять :)))
А автор хочет именно "записать в stream строку".
Не вижу проблемы по сабжу...


 
palva ©   (2009-07-11 14:18) [33]

По сабжу строку записать в поток невозможно. Если автор уже придумал, как он будет преобразовывать строку в последовательность байтов так, чтобы потом ее можно было восстановить, то проблемы нет.


 
oldman ©   (2009-07-11 14:32) [34]


> palva ©   (11.07.09 14:18) [33]
> Если автор уже придумал, как он будет преобразовывать строку в последовательность байтов


А строка это не последовательность байтов?
:)


 
palva ©   (2009-07-11 14:47) [35]


> А строка это не последовательность байтов?

Конечно нет. Последовательность байтов это array [0..n] of Byte, а все остальное... Ну может быть, отдельный байт или однобайтовый символ можно считать последовательностью байтов. Все остальное - нет.


 
@!!ex ©   (2009-07-12 01:46) [36]

> [31] sniknik ©   (11.07.09 13:04)

Ну так и я об этом же. Надо просто делать функции с указателями.
Какой смысл городить var/const?


 
Германн ©   (2009-07-12 01:55) [37]


> @!!ex ©   (12.07.09 01:46) [36]
>
> > [31] sniknik ©   (11.07.09 13:04)
>
> Ну так и я об этом же. Надо просто делать функции с указателями.
>
> Какой смысл городить var/const?
>

А зачем тогда ты пользуешь Дельфи?
Пользуйся продуктами от МС.


 
@!!ex ©   (2009-07-12 02:34) [38]

> [37] Германн ©   (12.07.09 01:55)

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

В принципе я практически не пользуюсь стандартными решениями от Борланда, поэтому не натыкаюсь на такие косяки.
Модули с которыми мне приходиться работать, к счастью оформлены по стандарту,а не по велению языка.


 
sniknik ©   (2009-07-12 03:07) [39]

> Какой смысл городить var/const?
ради типизации, возможности "удобнее" работать с переменными, и возможности больше синтаксиса проверять компилятором, для самоконтроля ... ну и + еще чего нибудь.

не нравится, убери все условности и пиши на asm-е (даже C подразумевает какие то ограничения, не "родственность" системе).

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

> поэтому не натыкаюсь на такие косяки.
все твои "косяки" это отсутствие знаний. и не желание их приобретать.


 
sniknik ©   (2009-07-12 03:15) [40]

вот например, "классический" пример "косящий под С"

procedure someFunc(i: PInteger);
begin
 ShowMessage(IntToStr(i));
end;

нормально? а если вызов
someFunc(nil);
???

AV да? компилятором не проверяется и не может, тут уже программисту нужно логику менять, а попробуй то же повторить с var...  (не говорю что это невозможно, и с var AV не словить, но большинство опасных действий компилятор не пропустит.)

p.s. блин, опять пытаюсь объяснить, и это человеку который гордится тем что не понимает... хватит, хватило восьмибитных флоатов.


 
Сергей М. ©   (2009-07-12 10:32) [41]


> @!!ex


> Я полный ноль в понимании var и const и считаю их идиотским
> изобретение больных на голову упрощенцев


Тогда первые ряды "больных на голову упрощенцев" по праву принадлежат ребяткам из Майкрософт)

Sub Proc(MyString AS String)
Sub Proc(ByRef MyString AS String)
Sub Proc(ByVal MyString AS String)


 
@!!ex ©   (2009-07-12 11:27) [42]

> [40] sniknik ©   (12.07.09 03:15)

И чем тебе так не нравяться 8 битные флоаты? В их существовании можешь убедиться попробовав написать хотя бы один шейдер с RTT.


 
sniknik ©   (2009-07-12 11:42) [43]

> И чем тебе так не нравяться 8 битные флоаты?
не они, а твоя постановка вопроса с их участием. и упертость в понимании базовых вещей... (то что что-то там работает вопреки базе, вовсе не значит, что база неверна, это значит, что ты чего то напутал в условиях)



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

Текущий архив: 2009.09.13;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.013 c
15-1247591897
Shyrick
2009-07-14 21:18
2009.09.13
Проблема с java-скриптовым редактором


4-1217397687
VitGun
2008-07-30 10:01
2009.09.13
Получение данных из таблицы другой программы.


2-1247209825
b/@.
2009-07-10 11:10
2009.09.13
Можно ли возвратить из функции массив ?


1-1215078860
DrPass
2008-07-03 13:54
2009.09.13
Секция finalization не выполняется


15-1247493335
Цукор5
2009-07-13 17:55
2009.09.13
Win2003 + запуск программы