Уважаемые, столкнулся с такой непростой задачкой, как работа с текстовым файлом сложной структуры. Нужно считать с него коды станций, номера платежей, суммы и коды статей. И дату. Желательно в табличку запихнуть для удобства работы. Единственный вариант, который приходит в голову, это построчное считывание и анализ. Подскажите какими методами такое можно провернуть?
procedure TForm4.Button5Click(Sender: TObject); var F:TextFile; //файл fName: String[100]; // имя файла buf: String[127]; //буфер для чтения строк i:integer; //шагалка stroka:string; //строка year,mounth:string; //месяц и год введение пользователем data1,data2:string; //дата считываемая и отображаемая name_stat:string;
{ begin if Form4.Edit3.Text=null then ShowMessage('Не указан год загрузки!!!'); exit; if Form4.ComboBox1.Text=null then ShowMessage('Не выбран месяц загрузки'); exit; }
begin fName:=Form4.Edit1.Text; //забираем путь AssignFile(f,fName); try Reset(F); // открыть для чтения except on EInOutError do begin ShowMessage('Ошибка доступа к файлу'+fName); exit; end end; i:=1; while not EOF(f) do
begin readln(f,buf); // прочитать строку из файла // длина строки в образце фиксированная.
if buf[27]='З' then Form4.Edit2.Text:=copy(buf,30,20);
if POS(':',buf[1])>0 then continue else begin if POS('(',buf[1])>0 then continue else begin if POS(' ',buf[1])>0 then continue;
if buf[1]='|' then begin if POS('ЕЛЕНИЕ',buf)>0 then continue else begin if POS('СТАНЦИИ',buf)>0 then continue else begin if POS('ГО ПО ОТДЕ',buf)>0 then continue else begin if POS('ГО ПО ДОРО',buf)>0 then continue else begin Form4.StringGrid1.Cells[0,i]:=copy(buf,7,10); Form4.StringGrid1.Cells[1,i]:=copy(buf,20,3); Form4.StringGrid1.Cells[2,i]:=copy(buf,26,79); Form4.StringGrid1.Cells[3,i]:=copy(buf,106,13); Form4.StringGrid1.Cells[4,i]:=copy(buf,121,4); if Form4.StringGrid1.Cells[0,i]<>' ' then name_stat:=Form4.StringGrid1.Cells[0,i]; if Form4.StringGrid1.Cells[0,i]=' ' then Form4.StringGrid1.Cells[0,i]:=name_stat; inc(i); end; end; end; end; end; end; end; end;
CloseFile(f); // закрыть файл
begin mounth:=Form4.ComboBox1.Text; //месяц клиента year:=Form4.Edit3.Text; // год клиента data1:=mounth + ' ' + year + ' Г.';// дата клиента data2:=Form4.Edit2.Text; // дата из файла Form4.Edit4.Text:=data1; if data1<>data2 then begin ShowMessage('Дата загрузки не соответствует указанной дате'); Form4.Button6.Enabled:=False; end; if data1=data2 then begin ShowMessage('Дата ввода корректна'); Form4.Button6.Enabled:=True; Form4.ComboBox1.Enabled:=False; Form4.Edit3.Enabled:=False; end;
for i := 1 to StringGrid1.RowCount - 1 do begin if Form4.StringGrid1.Cells[1,i]<>'147' then if Form4.StringGrid1.Cells[1,i]<>'163' then if Form4.StringGrid1.Cells[1,i]<>'143' then if Form4.StringGrid1.Cells[1,i]<>'150' then if Form4.StringGrid1.Cells[1,i]<>'166' then if Form4.StringGrid1.Cells[1,i]<>'149' then if Form4.StringGrid1.Cells[1,i]<>'154' then if Form4.StringGrid1.Cells[1,i]<>'144' then if Form4.StringGrid1.Cells[1,i]<>'145' then if Form4.StringGrid1.Cells[1,i]<>'169' then if Form4.StringGrid1.Cells[1,i]<>'158' then if Form4.StringGrid1.Cells[1,i]<>'161' then if Form4.StringGrid1.Cells[1,i]<>'151' then if Form4.StringGrid1.Cells[1,i]<>'162' then if Form4.StringGrid1.Cells[1,i]<>'171' then if Form4.StringGrid1.Cells[1,i]<>'124' then if Form4.StringGrid1.Cells[1,i]<>'160' then
begin Form4.StringGrid2.Cells[0,i]:=Form4.StringGrid1.Cells[0,i]; Form4.StringGrid2.Cells[1,i]:=Form4.StringGrid1.Cells[1,i]; Form4.StringGrid2.Cells[2,i]:=Form4.StringGrid1.Cells[2,i]; Form4.StringGrid2.Cells[3,i]:=Form4.StringGrid1.Cells[3,i]; Form4.StringGrid2.Cells[4,i]:=Form4.StringGrid1.Cells[4,i];
begin if Form4.StringGrid2.Cells[0,i]<>' ' then name_stat:=Form4.StringGrid2.Cells[0,i]; if Form4.StringGrid2.Cells[0,i]=' ' then Form4.StringGrid2.Cells[0,i]:=name_stat;
{ if Form4.StringGrid1.Cells[0,i]<>' ' then name_stat:=Form4.StringGrid1.Cells[0,i]; if Form4.StringGrid1.Cells[0,i]=' ' then Form4.StringGrid1.Cells[0,i]:=name_stat; } end; end; end;
end; end;
Один вопрос, как маску наложить на Едит в 4 символа цифровых. И организовать его проверку на корректный ввод?