Главная страница
    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]

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



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

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

Наверх




Память: 0.54 MB
Время: 0.046 c
15-1161510263
Dib@zol
2006-10-22 13:44
2006.11.12
Ворох вопросов по API, дубель два


2-1161854032
Делфи
2006-10-26 13:13
2006.11.12
Сохранение


1-1159475439
TStas
2006-09-29 00:30
2006.11.12
Выгрузка процедуры в файл


1-1159521850
Msl
2006-09-29 13:24
2006.11.12
Обращение к переменным,объявленным в форме, из dll


1-1159719430
Master_
2006-10-01 20:17
2006.11.12
EXCEL документ в DLL ?





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