Главная страница
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. блин, опять пытаюсь объяснить, и это человеку который гордится тем что не понимает... хватит, хватило восьмибитных флоатов.



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

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

Наверх




Память: 0.58 MB
Время: 0.011 c
15-1247728694
desc
2009-07-16 11:18
2009.09.13
PostgreSQL, доступ из одной БД в другую, построение views...


15-1247250170
Аноним
2009-07-10 22:22
2009.09.13
С днем рождения, Ketmar


4-1215791230
Mielofon
2008-07-11 19:47
2009.09.13
Нужно содержимое большой панели вывести в EMF файл


1-1215149667
dreamse
2008-07-04 09:34
2009.09.13
Как можно задать константу автоматически при выборе приложения?


15-1245862119
TIF
2009-06-24 20:48
2009.09.13
Все версии Windows