Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизОшибка при попытке прочитать файл Найти похожие ветки
← →
Женя (2012-04-20 22:35) [0]При попытке открыть файл .dat выдаёт ошибку "Project C:...путь...project1.exe faulted with message:"access violation at 0x3332c30: read of adress 0x3332c30...
Подскажите пожалуйста в чём проблема...unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Panel1: TPanel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit1: TEdit;
Label4: TLabel;
Label3: TLabel;
Label2: TLabel;
Label1: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
FontDialog1: TFontDialog;
procedure Button1Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const MaxRec=10;
Type TSteel=record
Name:string[10];
C:real;
Mn:real;
Si:real;
Cr:real;
end;
var
Form1: TForm1;
Steel:array [1.. MaxRec] of TSteel;
Fr:file of TSteel; //файловая переменная и ее тип
FileRecName:string;
NumRecord:integer;
implementation
{$R *.dfm}
Function ViewRecord(k:integer):string;
begin
with Steel[k] do
begin
ViewRecord:=Name+" - C:"+FloatToStr(C)
+"% Mn:"+FloatToStr(Mn)
+"% Si:"+FloatToStr(Si)
+"% Cr:"+FloatToStr(Cr)+"%";
end;
end;
Procedure ClearAll;
begin
Form1.Edit1.Text:="";
Form1.Edit2.Text:="";
Form1.Edit3.Text:="";
Form1.Edit4.Text:="";
Form1.Edit5.Text:="";
NumRecord:=0;
Form1.Label6.Caption:="";
Form1.Label8.Caption:="";
Form1.ListBox1.Clear;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
NumRecord:=NumRecord+1;
if NumRecord>MaxRec then
MessageDlg("Количество записей больше "+IntToStr
(MaxRec),mtError,[mbOk],0)
else begin
with Steel[NumRecord] do
begin
Name:=Edit1.Text;
C:=StrToFloat(Edit2.Text);
Mn:=StrToFloat(Edit3.Text);
Si:=StrToFloat(Edit4.Text);
Cr:=StrToFloat(Edit5.Text);
ListBox1.Items.Add(ViewRecord(NumRecord));
end;
Label6.Caption:=IntToStr(NumRecord);
Edit1.Text:="";
Edit2.Text:="";
Edit3.Text:="";
Edit4.Text:="";
Edit5.Text:="";
end; end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
with Steel[ListBox1.ItemIndex+1] do
begin
Edit1.Text:=Name;
Edit2.Text:=FloatToStr(C);
Edit3.Text:=FloatToStr(Mn);
Edit4.Text:=FloatToStr(Si);
Edit5.Text:=FloatToStr(Cr);
end;
Label8.Caption:=IntToStr(ListBox1.ItemIndex+1);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if NumRecord >=1 then
begin
with Steel[ListBox1.ItemIndex+1] do
begin
Name:=Edit1.Text;
C:=StrToFloat(Edit2.Text);
Mn:=StrToFloat(Edit3.Text);
Si:=StrToFloat(Edit4.Text);
Cr:=StrToFloat(Edit5.Text);
end;
ListBox1.Items[ListBox1.ItemIndex]:=
ViewRecord(ListBox1.ItemIndex+1);
end;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
ClearAll;
end;
procedure TForm1.N4Click(Sender: TObject);
var i:integer;
begin
if OpenDialog1.Execute then
begin
ClearAll;
FileRecName:=OpenDialog1.FileName;
AssignFile(Fr,FileRecName);
Reset(Fr);
NumRecord:=0;
While not Eof(Fr) do
begin
NumRecord:=NumRecord+1;
read(fr,Steel[NumRecord]);
ListBox1.Items.Add(ViewRecord(NumRecord));
end;
CloseFile(Fr);
Label6.Caption:=IntToStr(NumRecord);
MessageDlg("Файл "+FileRecName+" открыт.",
mtInformation,[mbOk],0);
end;
end;
procedure TForm1.N5Click(Sender: TObject);
var i:integer;
begin
if SaveDialog1.Execute then
begin
FileRecName:=SaveDialog1.FileName;
AssignFile(Fr,FileRecName);
Rewrite(Fr);
for i:=1 to NumRecord do write(Fr,Steel[i]);
CloseFile(Fr);
MessageDlg("Файл "+FileRecName+" сохранен.",
mtInformation,[mbOk],0);
end;
end;
procedure TForm1.N12Click(Sender: TObject);
begin
if FontDialog1.Execute then
ListBox1.Font.Assign(FontDialog1.Font);
end;
procedure TForm1.N11Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ClearAll;
end;
end.
← →
Плохиш © (2012-04-20 23:53) [1]На какой строке выдаёт?
← →
Германн © (2012-04-21 00:02) [2]
> NumRecord:=NumRecord+1;
> if NumRecord>MaxRec then
> MessageDlg("Количество записей больше "+IntToStr
> (MaxRec),mtError,[mbOk],0)
>
Если нажать кнопку Button1 раз двадцать, то каким будет NumRecord?
← →
Женя (2012-04-21 00:17) [3]Оно выдаёт не на строки, а уже при запуске программы, когда я выбираю какой файл загрузить... в некоторых случаях ошибку пишет, а в некоторых загружает файл, но эффекта ноль
← →
Германн © (2012-04-21 00:57) [4]
> в некоторых случаях ошибку пишет, а в некоторых загружает
> файл, но эффекта ноль
Стандартное поведение для таких ошибок. Можешь выложить куда-нибудь файл, который при загрузке "в некоторых случаях ошибку пишет, а в некоторых загружается, но эффекта ноль"?
← →
Женя (2012-04-21 01:18) [5]Так в том то и дело, что я экспериментирую и просто пишу разные данные, чтобы понять как должно быть правильно.
← →
Германн © (2012-04-21 01:45) [6]
> Так в том то и дело, что я экспериментирую и просто пишу
> разные данные, чтобы понять как должно быть правильно.
Ну вот ты экспериментируешь и записываешь файл, а он при чтении даёт ошибку. Так ты дай этот файл нам для проверки. Уточню. Сами данные о значениях Name, C, Mn, Si, Cr меня не интересуют. Интересует только сам файл (а точнее его размеры).
← →
Cobalt © (2012-04-21 11:11) [7]Запускай программу из среды разработки - при возникновении исключительной ситуации (исключения) - встроенный отладчик укажет тебе, в какой строке кода это случилось.
← →
Плохиш © (2012-04-21 11:23) [8]
> Женя (21.04.12 00:17) [3]
> Оно выдаёт не на строки, а уже при запуске программы, когда
> я выбираю какой файл загрузить... в некоторых случаях ошибку
> пишет, а в некоторых загружает файл, но эффекта ноль
Значит надо нанять программиста.
Кстати, чем "начинающим" не угодила?
← →
Нанятый программист (2012-04-21 15:22) [9]> Плохиш © (21.04.12 11:23) [8]
> Значит надо нанять программиста.
:)
← →
Dimka Maslov © (2012-04-25 13:31) [10]Корень зла:
1. Steel : array [1..MaxRec] of TSteel
2. While not Eof(Fr) do
Подумай что здесь не так и почему так нельзя.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.072 c