Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 25.01.2011
Сообщений: 7
1

Типизированный файл с разной структурой

25.01.2011, 22:24. Показов 2123. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем.

Нужно решить проблему с загрузкой типизированного файла который имеет несколько разных структур.
Delphi
1
2
3
4
5
6
7
8
9
Page1 = ^TFile1;
  TFile1 = record
    id: integer;
    Name: array[0..63] of Char;
    TagValue1: integer;
    TagValue2: integer;
    TagValue3: real;
    TagValue4: integer;
  end;
эту структуру прочитать из файла допустим 100 раз, следом за ней будет другая структура.
Примерно:

Delphi
1
2
3
4
5
6
7
Page2 = ^TFile2;
  TFile2 = record
    id: integer;
    Name: array[0..63] of Char;
    TagValue1: real;
    TagValue2: integer;
  end;
допустим тоже 100 раз.

и работать с этими страницами с приминением, допустим:

combobox для выбора уже загруженной структуры которая выдаст в listview все 100 значений с именем
id, и при выборе определенного, его записи вывести в edit1..edit.N
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2011, 22:24
Ответы с готовыми решениями:

Дан типизированный файл целых чисел. Переписать содержимое файла в новый типизированный файл
Дан типизированный файл целых чисел. Переписать содержимое файла в новый типизированный...

Типизированный файл
Задание: Даны два файла: справочник и основной. Записи справочника имеют структуру: 1)номер...

Типизированный файл
Информация о сотрудниках фирмы включает: Ф.И.О., табельный номер, количество проработанных часов за...

Типизированный файл
Проблема заключается в том, что файл не хочет считываться. Я поставил брейкпойнт, пролистал, файл...

18
3218 / 2361 / 540
Регистрация: 11.09.2009
Сообщений: 8,604
26.01.2011, 02:31 2
Nikolaybar, у вас структуры практически идентичны, так что можно привести структуры к единообразной форме, дополнив разницу пустыми полями, а для идентификации добавить в структуру запись "тип структуры", по которой и определять, какие поля значимые.
Как вариант, записью "тип структуры" может быть массив меток "поле используется/не используется".
0
47 / 47 / 2
Регистрация: 21.01.2011
Сообщений: 151
26.01.2011, 06:21 3
Нужно решить проблему с загрузкой типизированного файла который имеет несколько разных структур
"Типизированный файл" и "несколько разных структур" - это всё равно что квадратный круг.

Либо первое, либо второе, но не одновременно.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.01.2011, 07:20 4
Цитата Сообщение от CodeMonkey Посмотреть сообщение
"Типизированный файл" и "несколько разных структур" - это всё равно что квадратный круг.
Ну что ж сделать, если круг у него треугольный, а нужен квадратный? Только объяснить терминологию, другого выхода не вижу.
0
0 / 0 / 0
Регистрация: 25.01.2011
Сообщений: 7
26.01.2011, 10:38  [ТС] 5
Очень остроумно на счет квадрато-треугольников.

Наверно я плохо объяснил суть.

Я привел всего две различные структуры, но суть такова:

первые 4-ыре байта типа integer указано количество элементов с первой структурой, после сразу же идет первая структура N-ое количество раз котрое указано в первых 4-ырех байтах, сразу же после последнего элемента, идет также 4-ыре байта с количеством следующих элементов с другой структурой.

А структуры нельзя привести к одной, так как в одной может быть 2-е записи, а в другой 250, и этих различных структур более 50 штук
0
47 / 47 / 2
Регистрация: 21.01.2011
Сообщений: 151
26.01.2011, 10:41 6
Так вам и говорят, что работать с таким файлом надо НЕ через типизированный файл.

Открыли файл, прочитали 4 байта, прочитали первые N структур и так далее.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.01.2011, 10:44 7
Цитата Сообщение от Nikolaybar Посмотреть сообщение
Наверно я плохо объяснил суть.
Типизированный файл не может быть связан с двумя типами одновременно. А ты явно хотел из одного слепить другое, а получил вовсе третье: и не типизированный файл и не не типизированный, а просто полпроекта.

Добавлено через 2 минуты
Цитата Сообщение от Nikolaybar Посмотреть сообщение
Очень остроумно на счет квадрато-треугольников.
Наверно я плохо объяснил суть.
Я привел всего две различные структуры, но суть такова:
первые 4-ыре байта типа integer указано количество элементов с первой структурой, после сразу же идет первая структура N-ое количество раз котрое указано в первых 4-ырех байтах, сразу же после последнего элемента, идет также 4-ыре байта с количеством следующих элементов с другой структурой.
А структуры нельзя привести к одной, так как в одной может быть 2-е записи, а в другой 250, и этих различных структур более 50 штук
Тогда тебе нужен не типизированный файл.
1
0 / 0 / 0
Регистрация: 25.01.2011
Сообщений: 7
26.01.2011, 10:49  [ТС] 8
Цитата Сообщение от taras atavin Посмотреть сообщение
Типизированный файл не может быть связан с двумя типами одновременно. А ты явно хотел из одного слепить другое, а получил вовсе третье: и не типизированный файл и не не типизированный, а просто полпроекта.
всетаки вы запутали вы меня, а как называть такой файл?

В котором находиться 100 различных структур, наподобие нескольких баз данныз слеплены воедино, но все они взаимосвязаны, например:

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

и мне надо их отредактировать-добавлять записи, на счет именно марки,отца и сына, это был образный пример

Добавлено через 2 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
Добавлено через 2 минуты
Тогда тебе нужен не типизированный файл.
просто получилось как, я и расчитывал что это будет нетипизированный файл, но я задал вопрос человеку, который знал как открывать этот файл, не дав ответа, он указал на мою ошибку в слове нетипизированный, и заявил, что этот файл типизированный
0
47 / 47 / 2
Регистрация: 21.01.2011
Сообщений: 151
26.01.2011, 10:57 9
Цитата Сообщение от Nikolaybar Посмотреть сообщение
всетаки вы запутали вы меня, а как называть такой файл?
Бинарный, двоичный, нетипизированный - как угодно.

Цитата Сообщение от Nikolaybar Посмотреть сообщение
и заявил, что этот файл типизированный
Видимо, он имел ввиду другое. Это не типизированный файл в смысле Паскаля/Delphi. Это можно рассматривать как типизированный файл в том смысле, что в файле лежит набор записей друг за другом.

Добавлено через 1 минуту
P.S. Ты сказал
Нужно решить проблему
, но не указал, в чём состоит проблема.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.01.2011, 11:04 10
Цитата Сообщение от Nikolaybar Посмотреть сообщение
в слове нетипизированный, и заявил, что этот файл типизированный
Типизированный файл - это только
Delphi
1
:file of
, а просто
Delphi
1
:file;
- не типизированный. Хотя, если у тебя всё взаимосвязано, то можно рассматривать такой файл как одну запись более сложного и одного типа, что соответствует понятию типизированного файла, но только на уровне приложения, а не языка.
0
0 / 0 / 0
Регистрация: 25.01.2011
Сообщений: 7
26.01.2011, 11:08  [ТС] 11
Цитата Сообщение от CodeMonkey Посмотреть сообщение
Добавлено через 1 минуту
P.S. Ты сказал , но не указал, в чём состоит проблема.
Проблема в его загрузке, как его открыть, тоетсть первые 4-ыре байта типа integer и это количество раз загрузить структуру, после опять получить количество структур и также загружать уже другой. Сделать наподобие редактора каждой структуры, точнее той записи по структуре.

В combobox будет список загруженых, можно называть это как каждая новая структура это новый лист.

пре выборе листа, показывается весь список элементов листа в listview, и при выборе определенного элемента из listview выводились бы данные для редактирования содержания этого элемента.


Просто я нигде ненашел примера именно такого типа файлов.

А этот файл не один, имеется полностью разные файлы с разной структурой, но понять бы как его загрузить и редактировать его элементы
0
47 / 47 / 2
Регистрация: 21.01.2011
Сообщений: 151
26.01.2011, 11:16 12
Так или так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var
  FS: TFileStream;
  I: Integer;
  X: Integer;
begin
  FS := TFileStream.Create('C:\data.bin', fmOpenRead);
  try
 
    FS.ReadBuffer(I, SizeOf(i));
    for X := 0 to I - 1 do
    begin
      FS.ReadBuffer(RecType1, SizeOf(RectType1));
      // ...
    end;
 
    FS.ReadBuffer(I, SizeOf(i));
    for X := 0 to I - 1 do
    begin
      FS.ReadBuffer(RecType2, SizeOf(RectType2));
      // ...
    end;
 
  finally
    FreeAndNil(FS);
  end;
end;
1
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.01.2011, 11:20 13
Ну можешь побайтно читать (
Delphi
1
:file of byte;
), но это, кажется, извращение.
Delphi
1
2
3
4
5
6
7
var f:file;
d:integer;
l:integer;
begin
     assignfile(f,'1');
     reset(f);
     BlockRead(f, d, sizeof(d), l); // При успешном чтении l=sizeof(d)
0
0 / 0 / 0
Регистрация: 25.01.2011
Сообщений: 7
26.01.2011, 11:28  [ТС] 14
Цитата Сообщение от taras atavin Посмотреть сообщение
Ну можешь побайтно читать (
Delphi
1
:file of byte;
), но это, кажется, извращение.
Delphi
1
2
3
4
5
6
7
var f:file;
d:integer;
l:integer;
begin
     assignfile(f,'1');
     reset(f);
     BlockRead(f, d, sizeof(d), l); // При успешном чтении l=sizeof(d)

Не побайтно будет очнь долго, и да, это извращение.

а на счет варианта повыше, попробую, а как структуру(запись указывать):

Delphi
1
2
3
4
5
6
7
8
9
Page1 = ^TFile1;
  TFile1 = record
    id: integer;
    Name: array[0..63] of Char;
    TagValue1: integer;
    TagValue2: integer;
    TagValue3: real;
    TagValue4: integer;
  end;
или packed record.
и Name: array[0..63] of Char;
как указать чтоб он считывал именно 64 байта
0
47 / 47 / 2
Регистрация: 21.01.2011
Сообщений: 151
26.01.2011, 11:30 15
Цитата Сообщение от Nikolaybar Посмотреть сообщение
а как структуру(запись указывать)
Почему ты нас об этом спрашиваешь? Мы твоего файла не видели.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.01.2011, 11:36 16
Цитата Сообщение от Nikolaybar Посмотреть сообщение
а на счет варианта повыше, попробую, а как структуру(запись указывать):
Подставляй на место d свои переменные-записи (не типы, хотя, в sizeof можно и тип написать).
0
0 / 0 / 0
Регистрация: 25.01.2011
Сообщений: 7
26.01.2011, 19:08  [ТС] 17
а не подскажите как в записи задать чтобы считывало 64 байта unicode.
именно фиксированно 64 байта

41 00 5F 00 41 00 31 00 31 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Delphi
1
2
3
4
5
6
7
// Name: array[0..63] of UnicodeString;
// Name: array[0..63] of Char;
//Name: array[0..63] of wideChar;
//Name: string[64];
// name: widechar;
// Name: widestring;
// name:UnicodeString;
0
47 / 47 / 2
Регистрация: 21.01.2011
Сообщений: 151
26.01.2011, 19:11 18
Unicode-символ WideChar занимает 2 байта. Сколько раз нужно взять по два байта, чтобы получилось 64? Наверное 32:

Delphi
1
Name: array[0..31] of WideChar;
1
0 / 0 / 0
Регистрация: 25.01.2011
Сообщений: 7
26.01.2011, 19:31  [ТС] 19
Цитата Сообщение от CodeMonkey Посмотреть сообщение
Unicode-символ WideChar занимает 2 байта. Сколько раз нужно взять по два байта, чтобы получилось 64? Наверное 32:
Блин, а ведь и вправду.
0
26.01.2011, 19:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2011, 19:31
Помогаю со студенческими работами здесь

Типизированный файл
Дан типизированный файл F, элементы которого являются целыми числами, вывести первый и последний...

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

Вывод в типизированный файл
скажите пожайлуста как из memo вывести данные в файл f:file of real

Вывод в типизированный файл
Столкнулся с такой проблемой: Есть некоторая программа, данные считывает из текстового файла,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru