Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
В С# новичок (до этого писал на Delphi), поэтому просьба сильно не ругать. Задача состоит в следующем: есть файл с известной структурой, создаваемый прогграммой, писанной еще на Turbo Pascal 7.0. На всякий случай привожу эту структуру на Паскале: arx1=record time,chisl,mes : integer; god : longint; param : array [1..1024] of longint; end; Мне необходимо читать данные из этого файла. Для этого я пытаюсь описать следующую структуру: public struct DSVFile { public int Time; public int Chisl; public int Mes; public long God; public long[1024] Param; } На строчку public long[1024] Param; компилятор ругается. Не ругается только, если не задавать размер: public long[] Param;. Но мне необходимо указать размер массива, иначе как я смогу корректно считать данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 08:27 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
Попробуй public long[] Param = new long[1024]; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 09:30 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
пробовал - ругается ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 09:34 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
Сашкапробовал - ругается ... Тут-то на что? Что пишет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 09:40 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
Пардон, виноват, забыл, что речьь про структуру.. :) Определить поле структуры можно только в конструкторе. Но конструктор в любом случае должен принимать параметры.. хотя бы один. Так что в твоем случае: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 09:49 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
Sanitto!!! public DSVFile(int iTime, int iChisl, int iMes, int iGod) { Time = iTime; Chisl = iChisl; Mes = iMes; God = iGod; Param = new long[1024];//Правда, лучше будет передать массив как параметр и присвоить } [/src] 1. а чем лучше? 2. т.е. это будет так: public DSVFile(int iTime, int iChisl, int iMes, int iGod, long[] iParam) { Time = iTime; Chisl = iChisl; Mes = iMes; God = iGod; Param = new long[1024]; Param = iParam; } ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 09:58 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
Сашка 1. а чем лучше? 2. т.е. это будет так: public DSVFile(int iTime, int iChisl, int iMes, int iGod, long[] iParam) { Time = iTime; Chisl = iChisl; Mes = iMes; God = iGod; Param = new long[1024]; Param = iParam; } ? 1. Ну.. правильней, что ли, логически.. 2. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Вообще-то, может я не понимаю задачу.. 1. Если необходимо задать жесткое ограничение на размер массива, то можно проверку в конструкторе задать. 2. Если нужно "корректно считать данные", в качестве параметра можно передать файл, а в конструкторе уже считать структуру.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 10:10 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
Вообще, если известен формат, то его можно читать хоть по байтно и формировать структуру уже в программе. Можно вместо массива использовать коллекцию, например... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 11:00 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
Sanitto!!! Вообще-то, может я не понимаю задачу.. 1. Если необходимо задать жесткое ограничение на размер массива, то можно проверку в конструкторе задать. 2. Если нужно "корректно считать данные", в качестве параметра можно передать файл, а в конструкторе уже считать структуру.. Возможно просто я не знаю возможностей C#, но в Дельфях нельзя считать запись, размер поля которой не задан. Если есть возможность и желание, то хотелось бы пообщаться напрямую (аська, почта) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 11:50 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
попробуй GCHandle, возможно поможет: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 13:29 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
спасибо, попробую. правда, сначала хотелось бы почитать про подобные конструкции (я новичок в С#) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 13:39 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
очепяткаmyRecord rd=(myRecord)Marshal.PtrToStructure(h.AddrOfPinnedObject(), typeof( myRecord )); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 13:43 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
Сашка Sanitto!!! Вообще-то, может я не понимаю задачу.. 1. Если необходимо задать жесткое ограничение на размер массива, то можно проверку в конструкторе задать. 2. Если нужно "корректно считать данные", в качестве параметра можно передать файл, а в конструкторе уже считать структуру.. Возможно просто я не знаю возможностей C#, но в Дельфях нельзя считать запись, размер поля которой не задан. Если есть возможность и желание, то хотелось бы пообщаться напрямую (аська, почта) точно не помню как там в паскале, хоть пару лет назад сполз с него на .НЕТ. Так вот, если файл строго структурированный, значит информация в нем хранится в строгой последовательности структур, тоесть зная размер структуры, из файла можна считываеть последовательность этих структур - верно? если да, то в ,НЕТЕ это тоже реализуемо.. описываешь структуру (надо понимать это уже сделано) подсчитываешь размер этой структуры (можна задать жестко, если знаешь его судя повсему для твоей структуры это будет что-то типа 3*4 + 8 + 8*1024) ну потом создаешь какой-нить ридер, и считываешь через него порциями (размер структуры) байты дальше задача - распарсить эту последовательность байт в структуру (думаю это самый сложный этап, хотя могу ошибаться) если будут вопросы можешь связаться по аське.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 13:44 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
блин, пока набивал, смотрю кузя уже все ответил и более подробно)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 13:47 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
Сашка(я новичок в С#)и сразу нарваться на marshaling. повезло :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 13:48 |
|
||
|
массив в качестве поля структуры
|
|||
|---|---|---|---|
|
#18+
кузя Сашка(я новичок в С#)и сразу нарваться на marshaling. повезло :) :) не, ну самый путный способ освоения чего-то нового - это написание реальных производственных задач, а не всякие "Хелло ворлд". я просто как-то не думал, что будет вот так вот непросто прочитать данные из структурированного файла ... мне их еще предстоит проанализировать и записать в БД. может и там меня поджидает что-то "вкусное" ... %) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 13:56 |
|
||
|
|

start [/forum/topic.php?fid=20&msg=32927803&tid=1437212]: |
0ms |
get settings: |
9ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
66ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 411ms |

| 0 / 0 |
