Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

Перекинуть данные из переменной в структуру (record)   Найти похожие ветки 

 
Ingwar ©   (2006-10-26 12:47) [0]

Задали такую задачку: Есть переменная типа string и есть структура(record).
Нужно перекинуть данные из переменной в структуру. Можно перекинуть по байтам или чем-то подобным, но возможно есть какая-то функции для таких операций. Подскажите Мастера! Спасибо.


 
Джо ©   (2006-10-26 12:47) [1]

Что значит "перекинуть данные"? Какова структура этой записи (record)?


 
Сергей М. ©   (2006-10-26 12:55) [2]


> есть какая-то функции для таких операций


Угу, есть)

var
 MyString: string;
 MyRecord: TSomeRecord;

..

//подразумевается что Length(MyString) = SizeOf(MyRecord)

 CopyMemory(@MyRecord, PChar(MyString), SizeOf(MyRecord));


 
Ingwar ©   (2006-10-26 13:01) [3]

ТО Сергей М.: А если размер MyString > MyRecord - это не критично?


 
Сергей М. ©   (2006-10-26 13:03) [4]


> Ingwar ©   (26.10.06 13:01) [3]


Ну как же не критично ?

Если, скажем,  

Length(MyString) = 4
SizeOf(MyRecord) = 3

куда, спрашивается, девать разницу ?)


 
Ingwar ©   (2006-10-26 13:05) [5]

И еще вопрос. А если надо брать данные не с самого начала строки?
То есть MyString допустим имеет размер около 1К у нее есть заголовок который мне не нужен, а меня интересует информация где-нить байта с 200го.


 
Anatoly Podgoretsky ©   (2006-10-26 13:07) [6]

А что структура
b1: Byte
...
bN: Byte


 
Ingwar ©   (2006-10-26 13:09) [7]

Нет, структура на 600 байт. В основном разнообразные массивы char, есть так же типы byte.


 
Сергей М. ©   (2006-10-26 13:10) [8]


> где-нить байта с 200го.


CopyMemory(@MyRecord, @MyString[200], SizeOf(MyRecord));


 
Anatoly Podgoretsky ©   (2006-10-26 13:10) [9]


> Если, скажем,  
>
> Length(MyString) = 4
> SizeOf(MyRecord) = 3
>
> куда, спрашивается, девать разницу ?)

Думаешь наоборот есть разница?


 
Anatoly Podgoretsky ©   (2006-10-26 13:11) [10]


> Нет, структура на 600 байт. В основном разнообразные массивы
> char, есть так же типы byte.

Слова, слова,
Сестра имя, имя скажи


 
Сергей М. ©   (2006-10-26 13:13) [11]


> Думаешь наоборот есть разница?


Думаю что автору следует самому об этом подумать)


 
Ingwar ©   (2006-10-26 13:16) [12]

Кстати, по F1 у меня нет никакой инфы про CopyMemory... Странно.

ТО Anatoly Podgoretsky: Слишком длинная структура, а скопировать мне счаз её неоткуда... Но по памяти, там что связанное с соревнованиями по гандболу... Составы команд, названия команд, имена судей, время матча, кто забил и т.д.


 
Сергей М. ©   (2006-10-26 13:20) [13]


> у меня нет никакой инфы про CopyMemory


Есть.
Введи модель поиска вручную.
Если у тебя D7, то подобный "глюк" имеет место быть.


> Слишком длинная структура


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


 
Ingwar ©   (2006-10-26 13:21) [14]

Ответ на [11]: Я уже сам понял, что стормозил с таким вопросом... Просто вначале спросил и отослал, а потом понял, что тормознул =)


 
Ingwar ©   (2006-10-26 13:25) [15]

Да у меня D7. Это у препода надо спросить... Как раз счаз уезжаю в институт...


 
Anatoly Podgoretsky ©   (2006-10-26 13:26) [16]

Сусанин?
Веду, но не скажу куда.
Сообственно у нас нет проблем, у нас все копируется.


 
Anatoly Podgoretsky ©   (2006-10-26 13:32) [17]

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

Кстати Сусанин завел поляков не потому что он этого хотел, а потому что и сам не знал дороги :-)


 
Сергей М. ©   (2006-10-26 13:32) [18]


> Это у препода надо спросить


У вас там что, спецбригада по запутыванию вражеской разведки ?)


 
Ingwar ©   (2006-10-26 16:02) [19]

При попытке скопировать структуру вылетает по ошибке =(


 
Ketmar ©   (2006-10-26 16:05) [20]

>[19] Ingwar(c) 26-Oct-2006, 16:02
>При попытке скопировать структуру вылетает по ошибке =(
ошибка в 17-й строке. или в DNA.


 
Ingwar ©   (2006-10-26 16:07) [21]

Похоже препод хочет деньги на мне заработать =( Ему нужна прога для каких-то соревнований по гандболу... Суть такова, что по UDP получаются пакетики в переменную типа стринг, а потом надо перекинуть в структуру и переменную стринг...
Это делается из-за того, что начало пакета фиксированое, а вот дальнейшая часть может меняться =( Поэтому не могу сразу считать в структуру.

ЧТо-то в этом роде я понял из разговора с преподом


 
Reindeer Moss Eater ©   (2006-10-26 16:10) [22]

Да препод реально подымется получив эту процедуру копирования.
не иначе хочет новую тачку купить.


 
Ketmar ©   (2006-10-26 16:10) [23]

>[21] Ingwar(c) 26-Oct-2006, 16:07
>что по UDP получаются пакетики в переменную типа стринг, а
>потом надо перекинуть в структуру и переменную стринг...
>Это делается из-за того, что начало пакета фиксированое, а
>вот дальнейшая часть может меняться =( Поэтому не могу
>сразу считать в структуру.
не того "препод" выбрал, ой, не того. его ж потом претензиями замучают.

зыж не так это пишется. НЕ ТАК! что за манера у людей -- спрашивать не "помогите с направлением для задачи XXX", а "надо YYY". причём это YYY -- чистые лсд-шные измышлизмы автора, не имеющие отношения к самой задаче...


 
Сергей М. ©   (2006-10-26 16:14) [24]


> Похоже препод хочет деньги на мне заработать


Ну это, согласись, есть твоя личная половая драма)


> Ему нужна прога для каких-то соревнований


Остерегайся - он может оказаться извращенцем)


> Суть такова, что по UDP получаются пакетики в переменную
> типа стринг


Эт чего, ТЗ такое что ли ?!


> Это делается из-за того, что начало пакета фиксированое,
>  а вот дальнейшая часть может меняться =( Поэтому не могу
> сразу считать в структуру.
>
> ЧТо-то в этом роде я понял из разговора с преподом


Пока ты не "разберешься" с "преподом", ни ты его ни он тебя не удовлетворит)

На сей момент из твоих объяснений все изложенное выглядит как галиматьища неесусветная


 
Ingwar ©   (2006-10-26 16:19) [25]

ТО Ketmar: Понял

Ошибка:
Project D:\Test.exe faulted with message: "access violation at  0x4f4b5320: read of address 0xf4fb5320". Process Stopped. Use Step of Run to continue.


procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
 ABinding: TIdSocketHandle);
var
 buf: string;
 len : int64;
begin
   AData.ReadBuffer(buf, len);
   CopyMemory(@Struct, PChar(buf), 401); //тут выскакивает ошибка
   CopyMemory(@Stroka, @buf[402], (len-401));
end;


Struct - структура описаная через record
Stroka : string;


 
Anatoly Podgoretsky ©   (2006-10-26 16:20) [26]

А я знаю, но тебе нескажу, поскольку это секретно.


 
Ingwar ©   (2006-10-26 16:20) [27]

Забыл одну строчку в коде
 len := AData.Size;


 
Ketmar ©   (2006-10-26 16:21) [28]

мда... "гляжу в книгу, вижу фигу" (ц)
[4], [9].
плюс: ReadBuffer(buf...)??? "здравствуй, мир на четвереньках" (ц)...


 
Ingwar ©   (2006-10-26 16:22) [29]

Anatoly Podgoretsky злой ты =)


 
Сергей М. ©   (2006-10-26 16:23) [30]


> CopyMemory(@Struct, PChar(buf), 401); //тут выскакивает
> ошибка


Врешь)... причем нагло)

Ошибка возникает здесь:

AData.ReadBuffer(buf, len); //<-- !!!!!!!!!!!!!


 
Сергей М. ©   (2006-10-26 16:24) [31]


> Ingwar ©   (26.10.06 16:22) [29]
> Anatoly Podgoretsky злой ты =)


А ты врун и неуч)


 
Ketmar ©   (2006-10-26 16:26) [32]

>[30] Сергей М.(c) 26-Oct-2006, 16:23
>Ошибка возникает здесь:
может и там. стек-то уже обгадили. вот и берём адрес buf, которая указывает "в светлое будущее".


 
Ingwar ©   (2006-10-26 16:28) [33]

Я по степам шел... В buf все нормально прочлось... ВОТ! Так что я не вру!


 
Сергей М. ©   (2006-10-26 16:29) [34]


> Ingwar ©   (26.10.06 16:28) [33]
>
> Я по степам шел


Куда-куда ты шел ?!)


> В buf все нормально прочлось


Тебе просто повезло.


 
Ketmar ©   (2006-10-26 16:30) [35]

>[33] Ingwar(c) 26-Oct-2006, 16:28
>В buf все нормально прочлось...
да? ты-таки врун... на [28] медитировал?


 
Anatoly Podgoretsky ©   (2006-10-26 16:34) [36]


> "access violation at  0x4f4b5320: read of address 0xf4fb5320".

Не трожь чужую память, не твое.


 
Anatoly Podgoretsky ©   (2006-10-26 16:36) [37]


> Anatoly Podgoretsky злой ты =)

Я еще не злой, это еще впереди.
Жалко что дальше ветку некуда отправить, нет у нас других конференции, эта последняя.


 
Сергей М. ©   (2006-10-26 16:36) [38]


> buf: string;
>  ..
> ...
>    AData.ReadBuffer(buf, len)


Выделенный жирным тип - это что за хня ?)
Это препод под страхом "низачота" тебе велел эту хню написать ?)


 
Ingwar ©   (2006-10-26 16:42) [39]

А почему я не могу прочитать в переменную? Это взято в чистом виде из книги Indy in Delphi в переводе некого А.П. Подгорецкого =)


 
Anatoly Podgoretsky ©   (2006-10-26 16:49) [40]

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


 
Германн ©   (2006-10-26 16:50) [41]


> Ingwar ©   (26.10.06 16:42) [39]
>
> А почему я не могу прочитать в переменную?

А ты уверен, что ты читаешь именно в переменную?

>  взято в чистом виде из книги Indy in Delphi в переводе
> некого А.П. Подгорецкого =)
>

НЕ ВЕРЮ!!!


 
Ingwar ©   (2006-10-26 17:02) [42]

Уже все сделал =) Просто я не думал, что нужно обязательно принудительно указывать размер переменной, через SetLength =) Просто пока я не применял CopyMemory, все работало, а копимемори оказался привередой.

В любом случае всем спасибо!!! Я разобрался и у меня все работает! Лишний раз убеждаюсь, что я не ошибся в выборе форума =)

Отдельное спасибо Анатолию Подгорецкому за перевод книги!


 
Сергей М. ©   (2006-10-26 17:07) [43]


> Ingwar ©   (26.10.06 17:02) [42]


Удачи.


 
Anatoly Podgoretsky ©   (2006-10-26 17:17) [44]

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


 
Сергей М. ©   (2006-10-26 17:19) [45]


> пинал


Видать не туда)..

Под фаберже трэба було, под фаберже..)


 
Anatoly Podgoretsky ©   (2006-10-26 17:20) [46]


> Видать не туда)..

Туда, но пинало плохое.


 
Сергей М. ©   (2006-10-26 17:22) [47]


> пинало плохое


Или фабержи протухли)


 
Ketmar ©   (2006-10-26 18:37) [48]

>[42] Ingwar(c) 26-Oct-2006, 17:02
>Просто я не думал, что нужно обязательно
>принудительно указывать размер переменной, через SetLength
а справку сгрызли термиты. интересно, зачем борланды в справке распинались по поводу AnsiStrings?

>Просто пока я не применял CopyMemory, все работало
да??? обалдеть.



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

Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.046 c
9-1138514775
VolanD666
2006-01-29 09:06
2006.11.12
Как хранить текстуры?


8-1144330627
QuickFinder
2006-04-06 17:37
2006.11.12
Параметры Flash-файла


15-1161415275
Гарри Поттер
2006-10-21 11:21
2006.11.12
Анимация "пожалуйста ждите"


2-1162110530
Unknowing
2006-10-29 11:28
2006.11.12
Логика программы. Com-порт.


2-1162032878
kitsumvi
2006-10-28 14:54
2006.11.12
Сравнить 2 изображения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский