Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2012, 08:16   #1
nefakt
Форумчанин
 
Регистрация: 25.10.2012
Сообщений: 161
По умолчанию Загрузка из массива в ListBox

Всем привет .
Хотел узнать как из данного массива
Код:
 type
   TPrecinct=record    // Структурный массив
   iNumPrecinct: integer;
   countZone : integer;
   unk1 : integer;
   tagin : integer;
   tagout : integer;
   unk2  : integer;
   x    : single;
    y   : single;
    z   : single;
    xZone : single;
    yZone :single;
    zZone : single;
   end;
При загрузке файла вывести данную строку
Код:
 iNumPrecinct: integer;
в LIstBox для заполнение из файла. Если точнее он должен при загрузке файла считывать из данного массива
Код:
TPrecinct=record    // Структурный массив
все строки и заполнять в листбокс
Код:
 iNumPrecinct: integer;
эту строку из массива т.к. все остальные строки идут в edit. В данный момент программа умеет только считывать версию файла и количество строк.
Как можно реализовать? Мучаюсь уже 3-ий день. Вот полный код программы на всякий случай.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, sButton, sGroupBox, sListBox, sEdit, sDialogs, sSkinManager,
  sLabel, ComCtrls, acProgressBar, Menus;

type
  TForm1 = class(TForm)
    sSkinManager1: TsSkinManager;
    sOpenDialog1: TsOpenDialog;
    sSaveDialog1: TsSaveDialog;
    sEdit1: TsEdit;
    sEdit2: TsEdit;
    sListBox1: TsListBox;
    sGroupBox1: TsGroupBox;
    sEdit3: TsEdit;
    sEdit4: TsEdit;
    sGroupBox2: TsGroupBox;
    sEdit5: TsEdit;
    sEdit6: TsEdit;
    sEdit7: TsEdit;
    sGroupBox3: TsGroupBox;
    sListBox2: TsListBox;
    sEdit8: TsEdit;
    sEdit9: TsEdit;
    sEdit10: TsEdit;
    sButton1: TsButton;
    sButton2: TsButton;
    sButton3: TsButton;
    sButton4: TsButton;
    sButton5: TsButton;
    sProgressBar1: TsProgressBar;
    sLabel3: TsLabel;
    sLabel4: TsLabel;
    sLabel2: TsLabel;
    sLabel5: TsLabel;
    sLabel1: TsLabel;
    sLabel6: TsLabel;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    sLabel7: TsLabel;
    sLabel8: TsLabel;
    sLabel9: TsLabel;
    sLabel10: TsLabel;
    sLabel11: TsLabel;
    sLabel12: TsLabel;
    sLabel13: TsLabel;
    sLabel14: TsLabel;
    sLabel15: TsLabel;
    sLabel16: TsLabel;
    procedure N2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  type
   TPrecinct=record    // Структурный массив
   iNumPrecinct: integer;
   countZone : integer;
   unk1 : integer;
   tagin : integer;
   tagout : integer;
   unk2  : integer;
   x    : single;
    y   : single;
    z   : single;
    xZone : single;
    yZone :single;
    zZone : single;
   end;


var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.N2Click(Sender: TObject);
var
S: TFileStream;
v: Byte;
i: integer;
st:string;
r : array of byte;
Begin
if sOpenDialog1.Execute then    //Открываем файл
S:= TFileStream.Create(sOpenDialog1.FileName, fmOpenRead);   //Создание потока
  S.Position := 4;    //Вывод колличество точек
  S.Read(i, 2);
  S.Position := 0;    //Вывод версии файла
  S.Read(v, 1);

  SetLength(r,S.Size);  //Изменяем размер строки
  S.Write(r[0], S.Size); // Запись из потока в массив



  S.Free;          //Закрытие потока
  sLabel4.Caption := IntToStr(i);  //Вывод версии файла
  sLabel1.Caption := IntToStr(v);  //Вывод колличество точек

  for i := 1 to 1 do  sprogressbar1.Position:=Round(100*i/1); //Прогресс бар
slabel2.Caption:=sopendialog1.FileName;                 //Вывод пути загрузки


End;

end.
Заранее спасибо.

Последний раз редактировалось nefakt; 01.12.2012 в 08:26.
nefakt вне форума Ответить с цитированием
Старый 01.12.2012, 14:34   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

во первых record - это не массив...
насколько я понял есть файл с записями такого типа и надо их считать...

Код:
type
  TPrecinct=record
    iNumPrecinct: integer;
    countZone : integer;
    unk1 : integer;
    tagin, tagout : integer;
    unk2  : integer;
    x,y,z: single;
    xZone, yZone, zZone : single;
  end;

  THeader=packed record
    ver:byte;
    dummy:array[1..3] of byte;
    Count:word;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  S: TFileStream;
  Head: THeader;
  i: integer;
  r : array of TPrecinct;
Begin
  if not sOpenDialog1.Execute then exit;
  slabel2.Caption:=sOpenDialog1.FileName;
  S:= TFileStream.Create(sOpenDialog1.FileName, fmOpenRead);
  try
    s.ReadBuffer(Head,SizeOf(Head));
    sLabel4.Caption := IntToStr(Head.ver);
    sLabel1.Caption := IntToStr(Head.Count);
    SetLength(r,Head.Count);
    for i:=0 to Head.Count-1 do
    begin
      s.ReadBuffer(r[i],SizeOf(TPrecinct));
    end;
  finally
    S.Free;
  end;

  ListBox1.Items.Clear;
  for i:=0 to Length(r)-1 do
  begin
    ListBox1.Items.Add(IntToStr(r[i].iNumPrecinct))
  end;
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 02.12.2012, 15:06   #3
nefakt
Форумчанин
 
Регистрация: 25.10.2012
Сообщений: 161
По умолчанию

Спасибо, но есть проблема он ListBox заполняет криво тоесть выводится не как должно
1
2
3
4
5
и т.д.
а просто -380549888 из-за чего проблема?
nefakt вне форума Ответить с цитированием
Старый 02.12.2012, 15:57   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вероятно читаешь не оттуда(не то смещение).
или неверный тип(знаковый/беззнаковый например)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.12.2012, 18:37   #5
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

можед рекорд упакован packed record? ты сам файл делаешь?
сам файл сюда приложи для тестов, а то в слепую телепатор барахлит
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 03.12.2012, 11:04   #6
nefakt
Форумчанин
 
Регистрация: 25.10.2012
Сообщений: 161
По умолчанию

Вот файл http://rghost.ru/41972238
nefakt вне форума Ответить с цитированием
Старый 03.12.2012, 11:51   #7
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

файл никак не соответствует структуре TPrecinct - размер 48 байт
в самом начале файла видна повторяющаяся структура в 92 байта (10 раз)
потом длинна структуры резко вырастает больше чем до 300 байт

не видна зависимость 1,2,3,4,5,6 и т.д.

сколько записей в этом файле?
у меня показывает 296 (по заголовку), размер файла 63256, 63256/296 примерно= 215 байт на запись, а это никак не 48 как в твоей структуре
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 03.12.2012 в 12:07.
Slym вне форума Ответить с цитированием
Старый 03.12.2012, 12:13   #8
nefakt
Форумчанин
 
Регистрация: 25.10.2012
Сообщений: 161
По умолчанию

да всего там 296 , подскажи тогда пожалуйста как лучше написать. Вот тоже есть программа открывающая данный файл Я делаю такую же программку так как на той он ошибки иногда выдает ну и для повышения в программирование для меня.
nefakt вне форума Ответить с цитированием
Старый 03.12.2012, 12:16   #9
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

исходник этой проги есть? или бинарник на худой конец
судя по скриншоту зон у точки может быть несколько...
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 03.12.2012 в 12:20.
Slym вне форума Ответить с цитированием
Старый 03.12.2012, 12:23   #10
nefakt
Форумчанин
 
Регистрация: 25.10.2012
Сообщений: 161
По умолчанию

Да исходник есть вот
Код:
type = class PRECINCTFILEHEADER {
public:
unsigned int dwVersion;
int iNumPrecinct;
}
type = class PRECINCTFILEHEADER5 {
public:
unsigned int dwVersion;
int iNumPrecinct;
unsigned int dwTimeStamp;
}
Это два заголовка
А это структура но она так на шарпе выглядет
Код:
  {
                        public int countZone;
                        public int unk1;
                        public int tagin;
                        public int tagout;
                        public int unk2;
                        public float x;
                        public float y;
                        public float z;
                        public float[] xZone;
                        public float[] yZone;
                        public float[] zZone;
                   
                }
nefakt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
загрузка из ListBox в StringGrid waka2ebawer Общие вопросы Delphi 2 21.08.2012 22:07
Загрузка в ListBox и интегрированный WMP Elementery Компоненты Delphi 25 10.06.2010 19:58
Загрузка file.txt в ListBox Shift-stels Общие вопросы C/C++ 1 29.04.2010 21:59
Загрузка списка в ListBox aval Microsoft Office Excel 4 09.06.2009 11:14
Загрузка списка в ListBox reyn90 Помощь студентам 2 31.05.2009 04:17