Форум: "Начинающим";
Текущий архив: 2009.09.13;
Скачать: [xml.tar.bz2];
ВнизКак в 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;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.006 c