Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/106: Рейтинг темы: голосов - 106, средняя оценка - 4.91
 Аватар для Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126

Переменная типа record и её правильное использвание.

08.03.2012, 22:28. Показов 22545. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет и сразу к делу.
Прописываю перед implementation следующее:
Delphi
1
2
3
4
5
6
7
8
9
10
info=record
  prizv,imja:string[20];
  adresa:string[100];
  tel:string[15];
  end;
var
  Form1: TForm1;
  F:file of info;
  r:info;
  N:integer;
Затем из файла в каждую переменную record(prizv,imja,adresa,tel) подгружаю нужные данные.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.N2Click(Sender: TObject);
var i:integer;
begin
if dlgOpen1.Execute then
begin
AssignFile(F,dlgOpen1.FileName);
Reset(F); N:=0;
while not eof(F) do
begin
Read(F,r);
strngrd1.Cells[0,N+1]:=r.prizv;
strngrd1.Cells[1,N+1]:=r.imja;
strngrd1.Cells[2,N+1]:=r.adresa;
strngrd1.Cells[3,N+1]:=r.tel;
N:=N+1;
end;
CloseFile(F);
NewEdit(cbb1);
NewComboBox;
end;
end;
После чего нужные мне данные вывожу в edit.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.NewEdit(Sender: TObject);
var i: integer;
begin
i:=cbb1.ItemIndex+1;
if i>0 then
begin
edt1.Text:=strngrd1.Cells[0,i];
edt2.Text:=strngrd1.Cells[1,i];
edt3.Text:=strngrd1.Cells[2,i];
edt4.Text:=strngrd1.Cells[3,i];
end;
end;
Выходит кракозябра, типа:
Имя: Ол
Фамилия: ег ул.
Адресс: СантаК
Телефон: лауса
Не могу понять в чем проблема. Буду очень благодарен, если кто-нибудь поможет.

Добавлено через 1 минуту
Код всей программы, если надо:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ComCtrls, StdCtrls, Grids;
 
type
  TForm1 = class(TForm)
    pgc1: TPageControl;
    ts1: TTabSheet;
    ts2: TTabSheet;
    mm1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    cbb1: TComboBox;
    lbl1: TLabel;
    grp1: TGroupBox;
    lbl2: TLabel;
    edt1: TEdit;
    edt2: TEdit;
    lbl3: TLabel;
    edt3: TEdit;
    lbl4: TLabel;
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    btn4: TButton;
    edt4: TEdit;
    lbl5: TLabel;
    lbl6: TLabel;
    edt5: TEdit;
    lbl7: TLabel;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    strngrd1: TStringGrid;
    dlgOpen1: TOpenDialog;
    dlgSave1: TSaveDialog;
    procedure N7Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure NewComboBox;
    procedure NewEdit(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 info=record
  prizv,imja:string[20];
  adresa:string[100];
  tel:string[15];
  end;
var
  Form1: TForm1;
  F:file of info;
  r:info;
  N:integer;
 
 
 
implementation
 
uses Unit2;
 
{$R *.dfm}
 
procedure TForm1.N7Click(Sender: TObject);
begin
Form2.Show;
end;
 
procedure TForm1.N5Click(Sender: TObject);
begin
Close;
end;
 
procedure TForm1.N2Click(Sender: TObject);
var i:integer;
begin
if dlgOpen1.Execute then
begin
AssignFile(F,dlgOpen1.FileName);
Reset(F); N:=0;
while not eof(F) do
begin
Read(F,r);
strngrd1.Cells[0,N+1]:=r.prizv;
strngrd1.Cells[1,N+1]:=r.imja;
strngrd1.Cells[2,N+1]:=r.adresa;
strngrd1.Cells[3,N+1]:=r.tel;
N:=N+1;
end;
CloseFile(F);
NewEdit(cbb1);
NewComboBox;
end;
end;
 
procedure TForm1.N3Click(Sender: TObject);
var i:integer;
begin
if dlgSave1.Execute then begin
AssignFile(F,dlgSave1.FileName);
Rewrite(F); i:=1;
while strngrd1.Cells[3,i]<>'' do
begin
r.prizv:=strngrd1.Cells[0,i];
r.imja:=strngrd1.Cells[1,i];
r.adresa:=strngrd1.Cells[2,i];
r.tel:=strngrd1.Cells[3,i];
Write(F,r); i:=i+1;
end;
CloseFile(F);
end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
strngrd1.Cells[0,0]:='Прізвище';
strngrd1.Cells[1,0]:='Ім"я';
strngrd1.Cells[2,0]:='Адреса';
strngrd1.Cells[3,0]:='Телефон';
cbb1.Items.Add('');
cbb1.ItemIndex:=0;
end;
 
procedure TForm1.NewComboBox;
var i,j:integer;
begin
j:=cbb1.ItemIndex;
cbb1.Clear;
for i:=i to N do
cbb1.Items.Add(strngrd1.Cells[0,i]);
cbb1.ItemIndex:=j;
end;
 
procedure TForm1.NewEdit(Sender: TObject);
var i: integer;
begin
i:=cbb1.ItemIndex+1;
if i>0 then
begin
edt1.Text:=strngrd1.Cells[0,i];
edt2.Text:=strngrd1.Cells[1,i];
edt3.Text:=strngrd1.Cells[2,i];
edt4.Text:=strngrd1.Cells[3,i];
end;
end;
 
procedure TForm1.btn1Click(Sender: TObject);
begin
if cbb1.ItemIndex=0 then
cbb1.ItemIndex:=N-1 else
cbb1.ItemIndex:=cbb1.ItemIndex-1;
NewEdit(cbb1);
end;
 
procedure TForm1.btn4Click(Sender: TObject);
begin
if cbb1.ItemIndex=0 then
cbb1.ItemIndex:=N+1 else
cbb1.ItemIndex:=cbb1.ItemIndex+1;
NewEdit(cbb1);
end;
 
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.03.2012, 22:28
Ответы с готовыми решениями:

Правильное отображение времени, переменная типа integer
Здравствуйте форумчане ;) Пишу одну забавную...эээ, мини игру, и столкнулся с проблемой отображения времени, поэтому прошу помощи у Вас....

Предположим, что переменная типа CHAR занимает 1 байт, переменная типа INTEGER занимает два байта
Предположим, что переменная типа CHAR занимает 1 байт, переменная типа INTEGER занимает два байта, а переменная типа REAL занимает 4 байта....

Аналог типа Record в С#
Здравствуйте, я вот потихоньку изучаю язык С# и параллельно экспериментирую с кодом. Но вот столкнулся с такой проблемой: есть кусочек кода...

10
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
08.03.2012, 22:32
запись лучше всего записать в типизированный файл, записывать и считывать целую структуру
0
 Аватар для Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126
08.03.2012, 22:35  [ТС]
Цитата Сообщение от Arcor Посмотреть сообщение
запись лучше всего записать в типизированный файл, записывать и считывать целую структуру
а типизированный файл это какой такой файл? Впервые слышу о подобном...можно подробнее?

Добавлено через 1 минуту
я пробовал считывать с файлов в формате .pas, .txt и .doc, постоянно получалась кракозябра
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
08.03.2012, 23:00
типизированный файл - это файл какого-то, какой-то структуры иными словами
например можно файл целых сделать, что у него структура будет записи из целых чисел, числа будут в файл записываться как в массив целых чисел, так же потом под номером можно его будет считать с файла
так же можно любого другого типа создать, например для записи или класса, для записи он будет постоянно писать тоже как в массив, блоками с полями от записи
0
 Аватар для Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126
08.03.2012, 23:11  [ТС]
Цитата Сообщение от Arcor Посмотреть сообщение
типизированный файл - это файл какого-то, какой-то структуры иными словами
например можно файл целых сделать, что у него структура будет записи из целых чисел, числа будут в файл записываться как в массив целых чисел, так же потом под номером можно его будет считать с файла
так же можно любого другого типа создать, например для записи или класса, для записи он будет постоянно писать тоже как в массив, блоками с полями от записи
Можно привести пример подобной процедуры?
В паскале/делфи, буду очень благодарен.

Кстати...у меня проблема-то не в создании файла, а в считывании с него... или Вы имеете ввиду, что нужно создать подобный файл при использовании делфи/паскаля, чтобы потом правильно его считать? Раз так, пожалуй стоит попробовать ввести некоторые данные вручную, а затем сохранить и попробовать открыть, спасибо за идею!
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
08.03.2012, 23:11
вот пример записи и считывания из типизированного файла, записывал я запись record в файл
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
type
  TPrimer = record
    pole1: Integer;
    pole2: String[30];
  end;
var
  Form1: TForm1;
  F: File of TPrimer;
  FPrimer: TPrimer;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
    AssignFile(F, 'primer.dat');
    Rewrite(F);
  for i := 0 to 100 do
    begin
      Seek(F, FileSize(F));
      FPrimer.pole1 := i*20-70;
      FPrimer.pole2 := 'Пример записи строки ' + IntToStr(i);
      Write(F, FPrimer);
    end;
    CloseFile(F);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var i: Integer;
begin
    AssignFile(F, 'primer.dat');
    Reset(F);
    for i := 0 to 100 do
      begin
        Seek(F, i);
        Read(F, FPrimer);
        Memo1.Lines.Add(IntToStr(FPrimer.pole1));
        Memo1.Lines.Add(FPrimer.pole2);
      end;
    CloseFile(F);
end;
 
end.
если потом открыть файл, с которым работа производилась, например текстовым редактором, больше половины не понять будет что там записано и как, половина будет крякозябров всяеких
1
 Аватар для Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126
08.03.2012, 23:16  [ТС]
А файл primer.dat был создан вручную или же при помощи программы?
И тогда следующий вопрос, подобное действие с текстовыми файлами не возможно?
В принципе мне нужно считывать только типы данных string, больше никаких других не надо.
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
08.03.2012, 23:17
Цитата Сообщение от Takeshi80 Посмотреть сообщение
А файл primer.dat был создан вручную или же при помощи программы?
файл создался программно, код на первой кнопке
Цитата Сообщение от Takeshi80 Посмотреть сообщение
И тогда следующий вопрос, подобное действие с текстовыми файлами не возможно?
у текстового файла немного другая структура, если записывать в текстовый файл, потом из него труднее вытащить нужные данные, по определенной структуре же проще? не правда ли?
Цитата Сообщение от Takeshi80 Посмотреть сообщение
В принципе мне нужно считывать только типы данных string, больше никаких других не надо.
читай выше
0
 Аватар для Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126
08.03.2012, 23:20  [ТС]
До меня таки дошло! Большое спасибо! Для начала попрактикуюсь с типизированными фалами а потом попытаюсь и код своей программы подкорректировать.
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
08.03.2012, 23:26
почитай статьи, в гугле найдешь много

Добавлено через 5 минут
вот тут примеры еше есть
Операции с записями в Delphi

Вывести в алфавитном порядке список товаров, хранящихся больше месяца, стоимость которых превышает 1000000 руб.(задача с файлами)

«Сведения о памятниках истории и архитектуры»
0
 Аватар для Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126
09.03.2012, 00:54  [ТС]
Еще раз спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.03.2012, 00:54
Помогаю со студенческими работами здесь

Свойство типа record
Хочу свойство класса сделать типа record, но возникает ошибка при компиляции: Unit1.pas(56): Left side cannot be assigned to ...

Файл типа Record
Здравствуйте. У меня такой вопрос: у меня есть файл типа TMap (TMap = Record), и я пытался сделать поля в записи таким кодом: TMap =...

Ввод данных типа record
Такая проблема: если при описании типа record задаю переменные только числовых или только символьных типов, то можно при выполнении...

Есть переменная типа char содержащая цифру; как записать это значение в переменную типа int?
Пожалуйста, напомните стандартную функцию

Чтение данных из файла типа record
Исходные данные 5 кол-во покупателей Laima Pusyte 4 13 15.5 8 45.4 12 5 31 4 Morka Morkute 1...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru