Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

В цикле последовательно обратиться к полям записи.


Страницы:   1 2

AlexanderMS ©   (2007-12-26 16:03:00) 

Скажите, пожалуйста, как в цикле последовательно обратиться к полям записи, зная их размер?
Есть переменная типа record. Необходимо в цикле последовательно прочитать из текстового файла значения полей (каждой поле - 1 байт). То есть не так ( var F: TextFile):

Readln(F, S);
MyRec.Field1 := strtoint(S);
Readln(F, S);
MyRec.Field2 := strtoint(S);
Readln(F, S);
MyRec.Field3 := strtoint(S);
...


А вот так:


for Line := 0 to RecCount - 1 do
begin
 Readln(F, S);
//  MyRec.Fields[Line] := strtoint(S); тут нужен трюк
end;


Как можно осуществить сабж?


AlexanderMS   (2007-12-26 16:39:00) [21]


> Но тогда объясни, зачем тебе цикл ?

Чтобы не писать:
Readln(F, S);
MyRec.FieldX := strtoint(S);

много раз...
А запись нужна для удобства обращения.


> И какое отношение декларатор TextFile имеет к TMyRec = packed
> record ?

Никакого, просто для примера.


Сергей М.   (2007-12-26 16:36:00) [22]


> Palladin ©   (26.12.07 16:33) [9]
>
>


> Судя по первому посту, у него текстовый файл


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


Sapersky   (2007-12-26 16:34:00) [23]

AlexanderMS ©   (26.12.07 16:03)

Можно использовать вариантные поля в записях (см. хелп, Variant parts in records).
 TRecord = record
   Case integer of
     0 : (Field1, Field2, Field3 : Byte);
     1 : (Fields : array [0..2] of Byte);
   end;
Само собой, правильно оно будет работать только в том случае, если поля Field1 - Field3 имеют одинаковый размер.


Anatoly Podgoretsky   (2007-12-26 16:33:00) [24]

> Palladin  (26.12.2007 16:23:07)  [7]

Вообще то у него байты, но это несущественно


Palladin   (2007-12-26 16:33:00) [25]


> [8] Сергей М. ©   (26.12.07 16:26)

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


Palladin   (2007-12-26 16:33:00) [26]

вот я и говорю нафик запись то нужна... массив чем не устраивает?


Сергей М.   (2007-12-26 16:26:00) [27]


> можно приписать


Да не не можно, а нужно!

Но тогда объясни, зачем тебе цикл ?
И какое отношение декларатор TextFile имеет к TMyRec = packed record ?


Palladin   (2007-12-26 16:23:00) [28]


> [3] Anatoly Podgoretsky ©   (26.12.07 16:15)

умею, если трудности с восприятием информации, то я предлагал следующее

TMyRecord=Record
Fields:Array of String;
End;


AlexanderMS   (2007-12-26 16:22:00) [29]


> Сергей М. ©   (26.12.07 16:21) [5]
> т.е. объявление записи у тебя выглядит так:


Да, только без packed. :) Но можно приписать.


Сергей М.   (2007-12-26 16:21:00) [30]

т.е. объявление записи у тебя выглядит так:

TMyRec = packed record
 Field1: Byte;
 Field2: Byte;
..
 FieldN: Byte;
end;

??


AlexanderMS   (2007-12-26 16:19:00) [31]

Я имел ввиду обратиться к полям записи, используя, если возможно, обращение к памяти: начальный адрес записи и смещение по одному байту. Это можно сделать? Если можно, то как?

> Это вообще абсурд, цикл по записям, а обращение к массиву
> полей.
> И у записей нет никакого массива! У него есть только имена.

//  MyRec.Fields[Line] := strtoint(S); тут нужен трюк
Здесь комментарий стоит, и никакого массива не планируется: я думал, так легче понять. Оказалось, наоборот.


Anatoly Podgoretsky   (2007-12-26 16:15:00) [32]

Ты читать умеешь?

> И у записей нет никакого массива! У него есть только имена.


Palladin   (2007-12-26 16:11:00) [33]

хочешь в цикле, сделай внутри записи массив, только нафик тогда нужна запись?


Anatoly Podgoretsky   (2007-12-26 16:08:00) [34]

Это вообще абсурд, цикл по записям, а обращение к массиву полей.
И у записей нет никакого массива! У него есть только имена.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо