Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1247490487
TStas
2009-07-13 17:08
2009.09.13
Какое сообщение послать чужому окну, чтобы оно развернулось?


15-1247038461
SP
2009-07-08 11:34
2009.09.13
Вопрос по сайту на хостинге


15-1247439968
Bruth
2009-07-13 03:06
2009.09.13
Исходник резалки баннеров


2-1247300572
Igor2010
2009-07-11 12:22
2009.09.13
Проверка строки


15-1247583182
Пит
2009-07-14 18:53
2009.09.13
Покупка Adobe Photoshop





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский