![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Пишу программу чтоб себе жизнь упростить...
...есть гору документов excel все они созданы с помощью какой то программы у всех одинаковые таблицы - мне нужно искать внутри таблицы нужное мне строку взять его параметр... и т.д. у меня две проблемы возникли - из за того что в программе точнее на одной процедуре содержится много операторов for - приводит к зависанию программы Код:
begin
files:=0;
for lst := 0 to FileListBox1.Items.Count-1 do
begin
cleartable;
label3.Caption:='';
label4.Caption:='';
label6.Caption:='';
files:=files+1;
if Xls_To_StringGrid(StringGrid1, DirectoryListBox1.Directory+'\'+FileListBox1.Items[lst]) then //загрузка документов excel
/////////////////////////////////////
s1:=DirectoryListBox1.Directory+'\'+FileListBox1.Items[lst]; //берем путь к файлу
len:=length(s1); //удаляем с него ненужное
for i3 := 0 to Len do //оставляем только дату и название
begin
c_pos:=Pos('\', s1);
Delete(s1, 1, c_pos);
s2:=s1;
len:=length(s1);
c_pos:=Pos('_', s1);
Delete(s1, c_pos, len);
label3.Caption:=s1;
Delete(s2, 1, c_pos);
c_pos:=pos('.', s2);
Delete(s2, c_pos, len);
year:=copy(s2, 1, 4);
month:=copy(s2, 5, 2);
day:=copy(s2, 7, len);
label4.Caption:=year+'/'+month+'/'+day;
label6.Caption:=inttostr(StringGrid1.RowCount);
end;
/////////////////////////////////////
x_vbp:=0;
x_vap:=0;
x_vnp:=0;
for i:=1 to StringGrid1.RowCount-1 do
begin
if (StringGrid1.Cells[4,i]='VNOP') or
(StringGrid1.Cells[4,i]='VNP') then
begin
x_vnp:=x_vnp+strtofloat(StringGrid1.Cells[9,i]);
end;
if (StringGrid1.Cells[4,i]='VBP') or
(StringGrid1.Cells[4,i]='VBOP') then
begin
x_vbp:=x_vbp+strtofloat(StringGrid1.Cells[9,i]);
end;
if (StringGrid1.Cells[4,i]='VAP') or
(StringGrid1.Cells[4,i]='VAOP') then
begin
x_vap:=x_vap+strtofloat(StringGrid1.Cells[9,i]);
end;
StringGrid2.Cells[0,files]:=label3.Caption;
StringGrid2.Cells[1,files]:='';//NAME
StringGrid2.Cells[2,files]:=FloatToStrF(x_vbp, ffFixed, 18, 3);
StringGrid2.Cells[3,files]:=FloatToStrF(x_vnp, ffFixed, 18, 3);
StringGrid2.Cells[4,files]:=FloatToStrF(x_vap, ffFixed, 18, 3);
stringGrid2.RowCount:=StringGrid2.RowCount+1;
end;
end;
for i2 := 0 to StringGrid2.RowCount-1 do //удаляем пустые сроки с вроторой таблицы
begin
if StringGrid2.Cells[0,i2]='' then
begin
TDeleteGrid(StringGrid2).DeleteRow(i2);
end;
end;
end;как то можно сделать чтоб программа работала не зависая? и второй вопрос... можно ли внутри StringGrid искать не методом сравнения как я это сделал Код:
StringGrid1.Cells[4,i]='VBP' допустим в таблице есть много строк все которые начинаются с VBP Код:
VBP VBP intnl VBP extnl VBP outnl и. т.д. искать их не методом сравнения полной имени а по маске VBP* ??? - если честно у нем есть одна идея - выбрать каждую строку отделить начальные три буквы и сравнивать с VBP - но это гора дополнительных операций Что посоветуете??? |
|
#2
|
||||
|
||||
|
Цитата:
Код:
Application.ProcessMessages; |
|
#3
|
||||
|
||||
|
Я так понял Application.ProcessMessages чередует выполнение кода? или как?
Создал дополнительный поток добавил туда Код:
for i3 := 0 to Len do //оставляем только дату и название
begin
c_pos:=Pos('\', s1);
Delete(s1, 1, c_pos);
s2:=s1;
len:=length(s1);
c_pos:=Pos('_', s1);
Delete(s1, c_pos, len);
label3.Caption:=s1;
Delete(s2, 1, c_pos);
c_pos:=pos('.', s2);
Delete(s2, c_pos, len);
year:=copy(s2, 1, 4);
month:=copy(s2, 5, 2);
day:=copy(s2, 7, len);
label4.Caption:=year+'/'+month+'/'+day;
label6.Caption:=inttostr(StringGrid1.RowCount);
end; |
|
#4
|
||||
|
||||
|
Цитата:
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Electronic_Arts (26.04.2013)
| ||
|
#5
|
||||
|
||||
|
И снова та-же ошибка, что была буквально пару дней назад. Цикл с удалением строк переверните. Обход строк надо делать с конца, а не с начала.
|
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Electronic_Arts (26.04.2013)
| ||
|
#6
|
||||
|
||||
|
Цитата:
Application.ProcessMessages() ??? |
|
#7
|
||||
|
||||
|
Цитата:
|