powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / массив в качестве поля структуры
17 сообщений из 17, страница 1 из 1
массив в качестве поля структуры
    #32927434
Сашка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В С# новичок (до этого писал на 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;. Но мне необходимо указать размер массива, иначе как я смогу корректно считать данные?
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32927535
Sanitto!!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй
public long[] Param = new long[1024];
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32927549
Сашка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробовал - ругается ...
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32927572
Sanitto!!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сашкапробовал - ругается ...
Тут-то на что?
Что пишет?
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32927604
Sanitto!!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, виноват, забыл, что речьь про структуру.. :)

Определить поле структуры можно только в конструкторе. Но конструктор в любом случае должен принимать параметры.. хотя бы один.
Так что в твоем случае:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public struct DSVFile
{
public int Time;
public int Chisl;
public int Mes;
public long God;
public long[] Param;
public DSVFile(int iTime, int iChisl, int iMes, int iGod)
{
    Time = iTime; 
    Chisl = iChisl; 
    Mes = iMes; 
    God = iGod; 
    Param = new long[1024];//Правда, лучше будет передать массив как параметр и присвоить
}
}
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32927629
Сашка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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;
}

?
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32927661
Sanitto!!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сашка

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.
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. Если нужно "корректно считать данные", в качестве параметра можно передать файл, а в конструкторе уже считать структуру..
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32927803
AlexG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, если известен формат, то его можно читать хоть по байтно и формировать структуру уже в программе. Можно вместо массива использовать коллекцию, например...
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32927989
Сашка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sanitto!!!
Вообще-то, может я не понимаю задачу..
1. Если необходимо задать жесткое ограничение на размер массива, то можно проверку в конструкторе задать.
2. Если нужно "корректно считать данные", в качестве параметра можно передать файл, а в конструкторе уже считать структуру..

Возможно просто я не знаю возможностей C#, но в Дельфях нельзя считать запись, размер поля которой не задан. Если есть возможность и желание, то хотелось бы пообщаться напрямую (аська, почта)
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32928361
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй GCHandle, возможно поможет:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct myRecord
{
  public int   a;
  [MarshalAs(UnmanagedType.ByValArray, SizeConst=1024)]
  public int[] b;
}
...
byte[] bt=new byte[Marshal.SizeOf(typeof(myRecord))];
// считывание записи из файла в массив байт - размер см. выше
...
// из массива байт в структуру
GCHandle h =GCHandle.Alloc(bt, GCHandleType.Pinned);
myRecord rd=(myRecord)Marshal.PtrToStructure(h.AddrOfPinnedObject(), typeof(s));
h.Free();	
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32928389
Сашка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, попробую. правда, сначала хотелось бы почитать про подобные конструкции (я новичок в С#)
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32928398
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очепяткаmyRecord rd=(myRecord)Marshal.PtrToStructure(h.AddrOfPinnedObject(), typeof( myRecord ));
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32928400
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сашка Sanitto!!!
Вообще-то, может я не понимаю задачу..
1. Если необходимо задать жесткое ограничение на размер массива, то можно проверку в конструкторе задать.
2. Если нужно "корректно считать данные", в качестве параметра можно передать файл, а в конструкторе уже считать структуру..

Возможно просто я не знаю возможностей C#, но в Дельфях нельзя считать запись, размер поля которой не задан. Если есть возможность и желание, то хотелось бы пообщаться напрямую (аська, почта)

точно не помню как там в паскале, хоть пару лет назад сполз с него на .НЕТ.
Так вот, если файл строго структурированный, значит информация в нем хранится в строгой последовательности структур, тоесть зная размер структуры, из файла можна считываеть последовательность этих структур - верно?

если да, то в ,НЕТЕ это тоже реализуемо..
описываешь структуру (надо понимать это уже сделано)
подсчитываешь размер этой структуры (можна задать жестко, если знаешь его судя повсему для твоей структуры это будет что-то типа 3*4 + 8 + 8*1024)

ну потом создаешь какой-нить ридер, и считываешь через него порциями (размер структуры) байты
дальше задача - распарсить эту последовательность байт в структуру (думаю это самый сложный этап, хотя могу ошибаться)

если будут вопросы можешь связаться по аське..
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32928413
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин, пока набивал, смотрю кузя уже все ответил и более подробно))
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32928415
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сашка(я новичок в С#)и сразу нарваться на marshaling.
повезло :)
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32928438
Сашка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кузя Сашка(я новичок в С#)и сразу нарваться на marshaling.
повезло :)

:) не, ну самый путный способ освоения чего-то нового - это написание реальных производственных задач, а не всякие "Хелло ворлд". я просто как-то не думал, что будет вот так вот непросто прочитать данные из структурированного файла ... мне их еще предстоит проанализировать и записать в БД. может и там меня поджидает что-то "вкусное" ... %)
...
Рейтинг: 0 / 0
массив в качестве поля структуры
    #32928442
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сашка мне их еще предстоит проанализировать и записать в БД. может и там меня поджидает что-то "вкусное" ... %)
а как же -ADO.NET)))
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / массив в качестве поля структуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]