![]() |
|
|
|
|
#1
|
|||
|
|||
|
проблема в том что при считывании из текстового файла - каждый раз ошибка
Код:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm2 = class(TForm)
Label1: TLabel;
StringGrid1: TStringGrid;
Button1: TButton;
procedure Form2Activate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
uses Unit1, Unit3, Unit4, Unit5;
procedure TForm2.Form2Activate(Sender: TObject);
var
fv1:TextFile;
s,s1,s2,s3,s4:string[255];
s5:string[2];
i,k:integer;
begin
StringGrid1.Cells[0,0]:='Цех';
StringGrid1.Cells[1,0]:='Наименование изделия';
StringGrid1.Cells[2,0]:='Наименование детали';
StringGrid1.Cells[3,0]:='Количество деталей, шт.';
AssignFile(fv1,'Изделия.txt');
if not(FileExists('Изделия.txt'))
then
ShowMessage('Файла с указанным именем не сущетсвует')
else
begin
Reset(fv1);
Readln(fv1,s);
i:=-1;
while not(SeekEof(fv1)) do
begin
i:=i+1;
Str(i:2,s5);
Readln(fv1,s);
k:=Pos(Chr($09),s);
if k=0
then
ShowMessage('Строка №'+s5+' содержит ошибку')
else
begin
s2:=Copy(s,1,k-1);
Delete(s,1,k);
k:=Pos(Chr($09),s);
if (k=0) or (s1='')
then
ShowMessage('Строка №'+s5+'содержит ошибку')
else
begin
s3:=Copy(s,1,k-1);
Delete(s,1,k);
k:=Pos(Chr($09),s);
if (k=0) or (s3='')
then
ShowMessage('Строка №'+s5+'содержит ошибку')
else
begin
s4:=Copy(s,1,k-1);
Delete(s,1,k);
k:=Pos(Chr($09),s);
if (s3='')
then
ShowMessage('Строка №'+s5+'содержит ошибку')
else
begin
ceh[i]:=s1;
StringGrid1.Cells[0,i]:=s1;
naim[i]:=s2;
StringGrid1.Cells[1,i]:=s2;
det[i]:=s3;
StringGrid1.Cells[2,i]:=s3;
kolich[i]:=StrToFloat(s4);
StringGrid1.Cells[4,i]:=s4;
end;
end;
end;
end;
end;
end;
n:=i;
CloseFile(fv1);
W1:=True;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
Close
end;
end. |
|
#2
|
||||
|
||||
|
Ну и, что за ошибка? Недостаточно инфы для экстрасенсорики, да и текстовый файл покажите пжлст
|
|
#3
|
|||
|
|||
|
|
|
#4
|
||||
|
||||
|
Так это не табуляция, это мусор в первой строковой переменной s1, поскольку она не заполняется ничем, просто невнимательность, вот так вроде сетка наполняется правильно
Код:
procedure TForm1.FormActivate(Sender: TObject);
var
fv1:TextFile;
s,s1,s2,s3,s4:string[255];
s5:string[2];
i,k:integer;
begin
StringGrid1.Cells[0,0]:='Цех';
StringGrid1.Cells[1,0]:='Наименование изделия';
StringGrid1.Cells[2,0]:='Наименование детали';
StringGrid1.Cells[3,0]:='Количество деталей, шт.';
AssignFile(fv1,'Изделия.txt');
if not(FileExists('Изделия.txt'))
then
ShowMessage('Файла с указанным именем не сущетсвует')
else
begin
Reset(fv1);
Readln(fv1,s);
i:=0;
while not(SeekEof(fv1)) do
begin
inc(i);
Readln(fv1,s);
k:=Pos(#9,s);
if k=0
then
ShowMessage('Строка №'+s5+' содержит ошибку')
else
begin
s1:=Copy(s,1,k-1);
Delete(s,1,k);
k:=Pos(#9,s);
if (k=0) or (s1='')
then
ShowMessage('Строка №'+s5+'содержит ошибку')
else
begin
s2:=Copy(s,1,k-1);
Delete(s,1,k);
k:=Pos(#9,s);
if (k=0) or (s2='')
then
ShowMessage('Строка №'+s5+'содержит ошибку')
else
begin
s3:=Copy(s,1,k-1);
Delete(s,1,k);
k:=Pos(#9,s);
if (s3='')
then
ShowMessage('Строка №'+s5+'содержит ошибку')
else
begin
ceh[i]:=s1;
StringGrid1.Cells[0,i]:=s1;
naim[i]:=s2;
StringGrid1.Cells[1,i]:=s2;
det[i]:=s3;
StringGrid1.Cells[2,i]:=s3;
kolich[i]:=StrToFloat(s4);
StringGrid1.Cells[4,i]:=s4;
end;
end;
end;
end;
end;
end;
n:=i;
CloseFile(fv1);
W1:=True;
end; |
|
#6
|
||||
|
||||
|
Цитата:
Код:
... // kolich[i]:=StrToFloat(s4); ... |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
lam (29.10.2015)
| ||
|
#7
|
|||
|
|||
|
а после запуска программы ,у вас запускается первая кнопка меню "ввод исходных данных? в вашем исправленном варианте ?
|
|
#8
|
||||
|
||||
|
Извнт, но не смотрел вашу сборку, времени нет, просто открыл новый проект и в нём немного подправил первопостный код, как оно у вас там работает - неведомо, извнс
|
|
#9
|
|||
|
|||
|
Извращенцы.
Код:
procedure LoadGridFromFile(AFileName : String; AGrid : TStringGrid);
var
I, C : Integer;
L, S : String;
Lst : TStringList;
begin
If Not FileExists(AFileName) Then
Raise Exception.CreateFmt('File does not exist (%s).',[AFileName]);
Lst := TStringList.Create;
Try
Lst.LoadFromFile(AFileName);
AGrid.Rows := Lst.Count;
AGrid.Cols := 1;
For I := 0 To Lst.Count-1 Do
Begin
L := Lst[i];
C := 0;
While S <> '' Do
Begin
L : = Copy(S,1,Pos(#8,S)-1);
Inc(C);
If AGrid.Cols < C Then AGrid.Cols := C;
AGrid.Cells[I,C] := L;
S := Copy(S,Pos(#8,S),Length(S));
End;
End;
Finally
Lst.Free;
End;
end;Как-то так. Должно работать... |
|
#10
|
|||
|
|||
|
это программа по методичке препода, и он сказал - что нужно делать ровно по методичке. а там примерно тот код который я написал - но где -то происходит ошибка. и оно не считывает ни одной строки из текстового файла.
|