Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/51: Рейтинг темы: голосов - 51, средняя оценка - 4.65
Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126
1

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

08.03.2012, 22:28. Просмотров 9566. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2012, 22:28
Ответы с готовыми решениями:

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

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

Свойство типа record
Хочу свойство класса сделать типа record, но возникает ошибка при компиляции: ...

Записать в файл запись типа record
Записать в файл запись типа record, как это произвести в интернете не нашел...

Сохранение, открытие массива типа record
Дана таблица 5х5. Необходимо сохранить её и открыть заново. При сохранении...

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

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

Кстати...у меня проблема-то не в создании файла, а в считывании с него... или Вы имеете ввиду, что нужно создать подобный файл при использовании делфи/паскаля, чтобы потом правильно его считать? Раз так, пожалуй стоит попробовать ввести некоторые данные вручную, а затем сохранить и попробовать открыть, спасибо за идею!
0
Arcor
4900 / 1847 / 387
Регистрация: 20.11.2009
Сообщений: 5,977
Записей в блоге: 1
08.03.2012, 23:11 6
вот пример записи и считывания из типизированного файла, записывал я запись 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  [ТС] 7
А файл primer.dat был создан вручную или же при помощи программы?
И тогда следующий вопрос, подобное действие с текстовыми файлами не возможно?
В принципе мне нужно считывать только типы данных string, больше никаких других не надо.
0
Arcor
4900 / 1847 / 387
Регистрация: 20.11.2009
Сообщений: 5,977
Записей в блоге: 1
08.03.2012, 23:17 8
Цитата Сообщение от Takeshi80 Посмотреть сообщение
А файл primer.dat был создан вручную или же при помощи программы?
файл создался программно, код на первой кнопке
Цитата Сообщение от Takeshi80 Посмотреть сообщение
И тогда следующий вопрос, подобное действие с текстовыми файлами не возможно?
у текстового файла немного другая структура, если записывать в текстовый файл, потом из него труднее вытащить нужные данные, по определенной структуре же проще? не правда ли?
Цитата Сообщение от Takeshi80 Посмотреть сообщение
В принципе мне нужно считывать только типы данных string, больше никаких других не надо.
читай выше
0
Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126
08.03.2012, 23:20  [ТС] 9
До меня таки дошло! Большое спасибо! Для начала попрактикуюсь с типизированными фалами а потом попытаюсь и код своей программы подкорректировать.
0
Arcor
4900 / 1847 / 387
Регистрация: 20.11.2009
Сообщений: 5,977
Записей в блоге: 1
08.03.2012, 23:26 10
почитай статьи, в гугле найдешь много

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

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

«Сведения о памятниках истории и архитектуры»
0
Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126
09.03.2012, 00:54  [ТС] 11
Еще раз спасибо!
0
09.03.2012, 00:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2012, 00:54

Передача типа Record в процедуру в качестве параметра процедуры
Вот такой код не работает: TGraph = Record Graf_Flag : boolean; ...

Как связать поля типа record с компонентом memo
Cуть такова что мне нужно вводить данные в Memo: имя, фамилию, дату рождения в...

Как создать record внутри которого есть динамический массив с record-ами?
Упрощу код, чтоб не писать полные record-ы: type TSec = record vSize...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru