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

Вниз

Перекинуть данные из переменной в структуру (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]

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



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

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

Наверх




Память: 0.57 MB
Время: 0.047 c
15-1161596313
clickmaker
2006-10-23 13:38
2006.11.12
Мужики, посоветуйте UML-редактор для виндов


1-1159539430
Art_infinity
2006-09-29 18:17
2006.11.12
организация доступа к портам...


3-1153997115
ALex123
2006-07-27 14:45
2006.11.12
MySQL и dbExpress: unable to load libmysql.dll.


15-1161336921
Тульский
2006-10-20 13:35
2006.11.12
Опрос :-)


2-1162019225
#0FFFF
2006-10-28 11:07
2006.11.12
TPopupMenu