|
#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
|
|||
|
|||
а после запуска программы ,у вас запускается первая кнопка меню "ввод исходных данных? в вашем исправленном варианте ?
|
#7
|
||||
|
||||
Извнт, но не смотрел вашу сборку, времени нет, просто открыл новый проект и в нём немного подправил первопостный код, как оно у вас там работает - неведомо, извнс
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#8
|
|||
|
|||
Извращенцы.
Код:
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; Как-то так. Должно работать... |
#9
|
|||
|
|||
это программа по методичке препода, и он сказал - что нужно делать ровно по методичке. а там примерно тот код который я написал - но где -то происходит ошибка. и оно не считывает ни одной строки из текстового файла.
|
#10
|
|||
|
|||
Известно, что одна и та же деталь может входить в разные изделия и изделие может состоять из разных деталей. Разные цеха могут изготавливать одни и те же детали.
Разработайте алгоритм и программу подсчета количества одноименных деталей, изготовленных всеми цехами для всех изделий. Результаты расчета запишите в новый текстовый файл, содержащий таблицу из двух граф: Наименование детали; Общее количество деталей, шт. |
#11
|
||||
|
||||
Цитата:
Код:
... // kolich[i]:=StrToFloat(s4); ... Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
lam (29.10.2015)
|
#12
|
|||
|
|||
из текстового файла. в котором табуляцией разделены столбцы
|
#13
|
||||
|
||||
т.е. выходит каждой детали по одной шт.? Пустая графа с кол-вом в текстовом файле
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#14
|
|||
|
|||
нет, по заданию из екселевского файла выгружается в текстовый . там много деталей.Изделия.txt
|
#15
|
|||
|
|||
а каким образом можно обойти эту конвертацию
Цитата:
Последний раз редактировалось lam, 29.10.2015 в 18:31. |