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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2013, 23:10   #1
SeregaVili
Пользователь
 
Регистрация: 07.01.2013
Сообщений: 45
По умолчанию Считать запись из типизированного файла в динамическую очередь ( Delphi )

Здравствуйте.Подскажите как считать из типизированного файла записей запись в динамическую структуру очередь?
SeregaVili вне форума Ответить с цитированием
Старый 15.05.2013, 23:26   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а где описание вашей очереди?
Просто процедура добавления значения в очередь есть?
Так вот, вызывайте в цикле чтение из файла и добавление записей в очередь, это ничего от обычного добавления не отличается!



p.s. я перенёс вашу тему в раздел "Помощь студентам", имхо, именно в этом разделе теме самое место!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.05.2013, 23:36   #3
SeregaVili
Пользователь
 
Регистрация: 07.01.2013
Сообщений: 45
По умолчанию

Не получается даже считать из файла.Вот как я записываю в файл...может тут что то не так.
Код:
procedure TForm1.btn5Click(Sender: TObject);
var
p:uk;
st:string;
begin
{$I-}
AssignFile(f,'C:/kurs/BD.dat');
{Seek(f,FileSize(f));}
Reset(f);
{$i+}
if IOResult<>0 then begin
                     ShowMessage('Файла с базой данных не существует,будет создан новый');
                     Rewrite(f);
                      end;

p:=h;
if p=nil then ShowMessage('Вы не добавили ни одной записи')
  else
    begin
    repeat
    write(f, p^.data);
    p:=p^.next;
    {Writeln; }
    until p=nil;
    end;
CloseFile(f);
end;
SeregaVili вне форума Ответить с цитированием
Старый 15.05.2013, 23:42   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Лучше покажите весь код, так как из этого куска непонятно:
что такое uk
какого типа f
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.05.2013, 23:47   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы думаете, что тут на форуме фашисты, а Вы - партизан?..
И свою военную тайну Вы никому не скажете, да?!..

Где описание типа f ?!
Где описание типов uk ?!

p.s. чтобы проверить наличие файла в Delphi совсем не обязательно пользоваться древнейшим механизмой с отключением обработки ошибок ввода/вывода и анализа IOResult - используйте функцию FileExists:
Код:
const BDFileName = 'C:\kurs\BD.dat';
...

AssignFile(f, BDFileName);
if FileExists(BDFileName) then Reset(f) 
else begin
        ShowMessage('Файла с базой данных '+BDFileName+' не существует, создан новый файл.');
        Rewrite(f);
end; 
....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.05.2013, 23:52   #6
SeregaVili
Пользователь
 
Регистрация: 07.01.2013
Сообщений: 45
По умолчанию

Вот весь код Delphi. При компиляции ошибок вроде нет...подскажите я правильно начал записывать считывание?
Код:
unit ochered;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan, Grids;

type
  uk=^elem;
     dannie=packed record
              FIO:string[40];
              nomer_telefona:integer;
              addres:string[40];
              avto:string[20];
              gos_nomer:string[10];
              narushenie:string[40];
              nakazanie:string[40];
              end;


     elem=packed record
                data:dannie;
                next:uk;
                end;
  TForm1 = class(TForm)
    grp1: TGroupBox;
    edt1: TEdit;
    btn1: TButton;
    xpmnfst1: TXPManifest;
    btn2: TButton;
    lbl1: TLabel;
    lbl2: TLabel;
    edt2: TEdit;
    btn3: TButton;
    strngrd1: TStringGrid;
    btn4: TButton;
    edt3: TEdit;
    edt4: TEdit;
    lbl3: TLabel;
    lbl4: TLabel;
    edt5: TEdit;
    lbl5: TLabel;
    edt6: TEdit;
    lbl6: TLabel;
    lbl7: TLabel;
    edt7: TEdit;
    btn5: TButton;
    grp2: TGroupBox;
    btn6: TButton;
    mmo1: TMemo;
    btn7: TButton;
    procedure btn1Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btn4Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn5Click(Sender: TObject);
    procedure btn6Click(Sender: TObject);
    procedure btn7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
procedure add_element(var h,t:uk);
{procedure out(var t,h:uk);}
procedure out2( var t,h:uk; var a,b:integer);

var
  f:file of dannie;
  Form1: TForm1;
  h,t:uk;
  a,b,c,e:Integer;

implementation

{$R *.dfm}
procedure add_element(var h,t:uk);
var p:uk;
begin
new(p);
if h=nil then
begin
p^.data.FIO:=Form1.edt1.Text;
p^.data.nomer_telefona:=StrToInt(Form1.edt2.Text);
p^.data.addres:=Form1.edt3.Text;
p^.data.avto:=Form1.edt4.Text;
p^.data.gos_nomer:=Form1.edt5.Text;
p^.data.narushenie:=form1.edt6.Text;
p^.data.nakazanie:=Form1.edt7.Text;
p^.next:=nil;
t:=p;
h:=p;
end
   else
       begin
       p^.data.FIO:=Form1.edt1.Text;
       p^.data.nomer_telefona:=StrToInt(Form1.edt2.Text);;
       p^.data.addres:=Form1.edt3.Text;
       p^.data.avto:=Form1.edt4.Text;
       p^.data.gos_nomer:=form1.edt5.Text;
       p^.data.narushenie:=Form1.edt6.Text;
       p^.data.nakazanie:=Form1.edt7.Text;
       p^.next:=nil;
       t^.next:=p;
       t:=p;
       end;
end;

{procedure out( var t,h:uk);
var p:uk;
begin
p:=h;
repeat
mmo1.text
p:=p^.next;
until p=nil;
end; }

procedure out2( var t,h:uk; var a,b:integer);
var p:uk;
begin
p:=h;
repeat
Form1.strngrd1.Cells[0,a]:=p^.data.FIO;
Form1.strngrd1.Cells[1,a]:=IntToStr(p^.data.nomer_telefona);
form1.strngrd1.Cells[2,a]:=p^.data.addres;
Form1.strngrd1.Cells[3,a]:=p^.data.avto;
form1.strngrd1.Cells[4,a]:=p^.data.gos_nomer;
Form1.strngrd1.Cells[5,a]:=p^.data.narushenie;
form1.strngrd1.Cells[6,a]:=p^.data.nakazanie;
Inc(a);
p:=p^.next;
until p=nil;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
add_element(h,t);
ShowMessage('Добавлено');
btn3.Visible:=True;
end;

procedure TForm1.btn3Click(Sender: TObject);
begin
a:=1;
b:=1;
out2(t,h,a,b);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
h:=nil;
t:=nil;
strngrd1.Cells[0,0]:='Фамилия';
strngrd1.Cells[1,0]:='Телефон';
strngrd1.Cells[2,0]:='Место жительства';
strngrd1.Cells[3,0]:='Автомобиль';
strngrd1.Cells[4,0]:='Номер авто';
strngrd1.Cells[5,0]:='Нарушение';
strngrd1.Cells[6,0]:='Наказание';
end;

procedure TForm1.btn4Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
edt1.Text:='';
edt2.Text:='';
edt3.Text:='';
edt4.Text:='';
edt5.Text:='';
edt6.Text:='';
edt7.Text:='';
end;

procedure TForm1.btn5Click(Sender: TObject);
var
p:uk;
st:string;
begin
{$I-}
AssignFile(f,'C:/kurs/BD.dat');
{Seek(f,FileSize(f));}
Reset(f);
{$i+}
if IOResult<>0 then begin
                     ShowMessage('Файла с базой данных не существует,будет создан новый');
                     Rewrite(f);
                      end;

p:=h;
if p=nil then ShowMessage('Вы не добавили ни одной записи')
  else
    begin
    repeat
    write(f, p^.data);
    p:=p^.next;
    {Writeln; }
    until p=nil;
    end;
Dispose(p);
CloseFile(f);
end;

procedure TForm1.btn6Click(Sender: TObject);
begin
grp1.Visible:=True;
end;

procedure TForm1.btn7Click(Sender: TObject);
var p:uk;
begin
New(p);
AssignFile(f,'C:/kurs/BD.dat');
Reset(f);
while not Eof(f) do
begin
read(f,p^.data);
end;


end;
end.
SeregaVili вне форума Ответить с цитированием
Старый 18.05.2013, 00:07   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Пример (вроде, более менее правильный).
Вложения
Тип файла: rar Очередь пример.rar (8.9 Кб, 36 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.05.2013, 17:01   #8
SeregaVili
Пользователь
 
Регистрация: 07.01.2013
Сообщений: 45
По умолчанию

Спасибо большое)теперь буду разбираться)
SeregaVili вне форума Ответить с цитированием
Старый 20.05.2013, 17:14   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Пожалуйста.
Учтите, что функция сохранения очереди в файл одновременно и удаляет саму очередь. Функция загрузки очереди добавляет в очередь элементы, но не очищает предварительно очередь от старых элементов.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 22.05.2013, 11:02   #10
SeregaVili
Пользователь
 
Регистрация: 07.01.2013
Сообщений: 45
По умолчанию

а можно ли считывать не в memo а в stringrid? вернее можно ли сделать так чтобы stringrid была не фиксированного размера а в программе бы добавлялись строки?
SeregaVili вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись и чтение типизированного файла (Паскаль). Учёт заказов мебели Jlovenpk1 Помощь студентам 1 29.11.2012 09:30
Запись типизированного файла из текстового. Lubawa Паскаль, Turbo Pascal, PascalABC.NET 18 05.11.2011 11:27
КАК считать динамическую ячейку??? andre25 Microsoft Office Excel 1 13.07.2011 19:40
Считать MFT запись указанного файла FatalLight Общие вопросы C/C++ 0 10.04.2011 14:27
Как из типизированного файла считать первый компонент? Екатерина Козлова Помощь студентам 0 18.05.2010 19:10