Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2009, 19:22   #1
bestlover
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 23
По умолчанию Синтаксис процедуры

Здравствуйте! подскажте пожалуйста как написать эту процедуру! Делфи ругается постоянно

вот сам код
Цитата:
for i:=t to length(str) do
begin
inc(x);
if (str[i]='<') and (str[i+1]='/') and (str[i+2]='m') then exit;
end;
как сделать из нее процедуру чтобы она при выполнении условия еще выходила??? а то без процедуры она у меня вообще выходит из программы!
bestlover вне форума Ответить с цитированием
Старый 27.10.2009, 19:43   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Замените строку
Код:
if (str[i]='<') and (str[i+1]='/') and (str[i+2]='m') then exit;
на
Код:
if (str[i-2]='<') and (str[i-1]='/') and (str[i]='m') then exit;
Вы вообще понимаете логику работы цикла?
mihali4 вне форума Ответить с цитированием
Старый 27.10.2009, 20:54   #3
goblinyara
Форумчанин
 
Аватар для goblinyara
 
Регистрация: 02.01.2009
Сообщений: 340
По умолчанию

Код:
for i:=t to length(str) do
begin
inc(x);
if (str[i]='<') and (str[i+1]='/') and (str[i+2]='m') then exit;
end;
ну смысл этого вообще не понимаю... ну и вообще условие бы увидеть процедуры тоже неплохо было бы
DelphiWorld 6. Скачай, поставь, и будет тебе счастье=)
Программирование, как и любовь -- одно слово, за которым скрывается бесконечное множество занятий.

Последний раз редактировалось goblinyara; 27.10.2009 в 20:57.
goblinyara вне форума Ответить с цитированием
Старый 27.10.2009, 22:33   #4
bestlover
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 23
По умолчанию

Цитата:
Вы вообще понимаете логику работы цикла?
да понимаю) мне просто нужно из этого процедуру сделать! я синтаксис не помню! а исходник слишком большой!

обьясню коротко ! в переменную str добавляются все символы из файла! t-это позиция с которого начинается отчет! мне надо чтобы он посчтиал символы от t и пока не
Цитата:
(str[i]='<') and (str[i+1]='/') and (str[i+2]='m')
! я пробовал из нее процедуру сделать! тоисть
Цитата:
procedure lk;
for i:=t to length(str) do
begin
inc(x);
if (str[i]='<') and (str[i+1]='/') and (str[i+2]='m') then exit;
end;
не получилось ругается делфи! посоветуйте как правильно из нее процедуру сделать
bestlover вне форума Ответить с цитированием
Старый 27.10.2009, 22:59   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

киньте полную вашу попытку сделать процедуру.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.10.2009, 23:15   #6
Proof
Пользователь
 
Регистрация: 20.02.2008
Сообщений: 63
По умолчанию

bestlover

А Вы не когда не думали, что будет, если последним символом окажется '<', ну или что будет если в цикле дойдете до последнего символа и будите сравнивать [i+1]='/'
Proof вне форума Ответить с цитированием
Старый 28.10.2009, 10:40   #7
bestlover
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 23
По умолчанию

Цитата:
var
Form1: TForm1;
i,n,t,t1,k,o,g,e,w,s,kl,l,lp,j,j1,y ,x,x1:integer;
b,p,u,r,u1,u2,u3,u4,u5:real;
h,buf,str,str3,str4,str5:string;
str2:string[2];
a,m:array[1..80] of real;
str1:array[1..30] of string[5];
fName, fname1: String[80];
переменные
bestlover вне форума Ответить с цитированием
Старый 28.10.2009, 10:41   #8
bestlover
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 23
По умолчанию

Цитата:
procedure TForm1.Button5Click(Sender: TObject);
var
f:textfile;
begin
for k:=1 to 29 do //очистка таблицы
for o:=1 to 25 do //
stringgrid1.Cells[k,o]:=''; //
k:=0;
u:=0;
str:='0';
r:=0;
stringgrid1.Cells[0,0]:='Часы\Дни';
stringgrid1.Cells[0,25]:='Итого';
for e:=1 to 31 do stringgrid1.Cells[e,0]:=inttostr(e);
for e:=1 to 24 do stringgrid1.Cells[0,e]:=inttostr(e)+':00';
case ListBox1.ItemIndex of
0: h:='<measuringpoint code="161120002214001" name="Генератор № 4">';
1: h:='<measuringpoint code="161120002214002" name="Генератор № 5">';
2: h:='<measuringpoint code="161120002214003" name="Генератор № 7">';
3: h:='<measuringpoint code="161120002113001" name="Генератор № 8">';
4: h:='<measuringpoint code="163070001107101" name="ВЛ 110 кВ УГРЭС - Туймазы-1">';
5: h:='<measuringpoint code="163070001107202" name="ВЛ 110 кВ УГРЭС - Туймазы-2">';
6: h:='<measuringpoint code="163070001107103" name="ВЛ 110 кВ УГРЭС - Туймазы-3">';
7: h:='<measuringpoint code="163070001107204" name="ВЛ 110 кВ УГРЭС - Туймазы-4">';
8: h:='<measuringpoint code="163070001208101" name="ВЛ 35 кВ УГРЭС - К. Буляк-1">';
9: h:='<measuringpoint code="163070001208202" name="ВЛ 35 кВ УГРЭС - К. Буляк-2">';
10: h:='<measuringpoint code="163070001107102" name="ВЛ 110 кВ Азнакаево-1">';
11: h:='<measuringpoint code="163070001107201" name="ВЛ 110 кВ Азнакаево-2">';
12: h:='<measuringpoint code="163070001107203" name="ВЛ 110 кВ Александровка">';
13: h:='<measuringpoint code="163070001107104" name="ВЛ 110 кВ Каракашлы">';
14: h:='<measuringpoint code="163070001107901" name="ОВ 110 кВ">';
15: h:='<measuringpoint code="161120002214101" name="Ф1 Бемитный завод ЦРП 6 кВ">';
16: h:='<measuringpoint code="161120002214102" name="Ф5 пос. Северный ЦРП 6 кВ">';
17: h:='<measuringpoint code="161120002214103" name="Ф6 Жил. Пос № 2 ЦРП 6 кВ">';
18: h:='<measuringpoint code="161120002214104" name="Ф7 ЗАО УХЗ ЦРП 6 кВ">';
19: h:='<measuringpoint code="161120002214105" name="Ф8 Жил. Пос № 1 ЦРП 6 кВ">';
20: h:='<measuringpoint code="161120002214106" name="Ф9 ООО Бетон+ ЦРП 6 кВ">';
21: h:='<measuringpoint code="161120002214107" name="Ф10 Резерв Водозабор ЦРП 6 кВ">';
22: h:='<measuringpoint code="161120002214108" name="Ф13 Электросоединитель ЦРП 6 кВ">';
23: h:='<measuringpoint code="161120002214201" name="Ф20 Электросоединитель ЦРП 6 кВ">';
24: h:='<measuringpoint code="161120002214202" name="Ф22 ДОК, Башнефтехснаб ЦРП 6 кВ">';
25: h:='<measuringpoint code="161120002214203" name="Ф23 Унипласт ЦРП 6 кВ">';
26: h:='<measuringpoint code="161120002214204" name="Ф24 Водозабор ЦРП 6 кВ">';
27: h:='<measuringpoint code="161120002214205" name="Ф26 Апсалямовский к-т ЦРП 6 кВ">';
28: h:='<measuringpoint code="161120002214301" name="Ф30 ЗАО УХЗ ЦРП 6 кВ">';
29: h:='<measuringpoint code="161120002214302" name="Ф32 Очистные сооружения ЦРП 6 кВ">';
линии которые будут присваиватся h
bestlover вне форума Ответить с цитированием
Старый 28.10.2009, 10:43   #9
bestlover
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 23
По умолчанию

Цитата:
lp:=0;
j:=0;
w:=strtoint(Edit1.Text); //конечная дата для вывода отчета
s:=strtoint(Edit2.Text);
l:=strtoint(edit5.Text); //начальная дата для вывода отчета
str5:='0';
l:=l-1;
str4:= edit3.Text; //ввод даты

for g:=s to w do begin //цикл для перебора файлов для вывода отчета
if g>9 then str5:='' else str5:='0'; //
str2:=str5+inttostr(g);
if g>10 then lp:=l+g+1 else lp:=l+g;
str3:=inttostr(lp);
fname:= 'IKM\80020_1642005075_'+str4+str2+' _'+str3+'_1600000300.xml'; //
if not FileExists(fname) then
repeat
lp:=lp+1;
str3:=inttostr(lp);
fname:= 'IKM\80020_1642005075_'+str4+str2+' _'+str3+'_1600000300.xml';
until FileExists(fname) ;
Assignfile(f,fname); //добавление имени файлу
Reset(f);
k:=0; //открытие файла для чтения
j1:=3050;
while not EOF(f) do
begin
readln(f, buf); //чтение строки из файла в память
str:=str+buf; // добавление все строк файла к переменной str
end;
t:=pos(h,str); //нахождение позиции узла в файле
closefile(f); //закрытие файла
fr(x,t,str);
if (h='<measuringpoint code="161120002214001" name="Генератор № 4">') or (h='<measuringpoint code="161120002214002" name="Генератор № 5">') or (h='<measuringpoint code="161120002214003" name="Генератор № 7">') or (h='<measuringpoint code="161120002113001" name="Генератор № 8">')or (h='<measuringpoint code="163070001208101" name="ВЛ 35 кВ УГРЭС - К. Буляк-1">') or (h='<measuringpoint code="163070001208202" name="ВЛ 35 кВ УГРЭС - К. Буляк-2">') or (h='<measuringpoint code="161120002214101" name="Ф1 Бемитный завод ЦРП 6 кВ">') or (h='<measuringpoint code="161120002214102" name="Ф5 пос. Северный ЦРП 6 кВ">') or (h='<measuringpoint code="161120002214103" name="Ф6 Жил. Пос № 2 ЦРП 6 кВ">') or (h='<measuringpoint code="161120002214104" name="Ф7 ЗАО УХЗ ЦРП 6 кВ">') or (h='<measuringpoint code="161120002214105" name="Ф8 Жил. Пос № 1 ЦРП 6 кВ">') or
(h='<measuringpoint code="161120002214106" name="Ф9 ООО Бетон+ ЦРП 6 кВ">') or (h='<measuringpoint code="161120002214107" name="Ф10 Резерв Водозабор ЦРП 6 кВ">') or (h='<measuringpoint code="161120002214108" name="Ф13 Электросоединитель ЦРП 6 кВ">') or (h='<measuringpoint code="161120002214201" name="Ф20 Электросоединитель ЦРП 6 кВ">') or (h='<measuringpoint code="161120002214202" name="Ф22 ДОК, Башнефтехснаб ЦРП 6 кВ">') or (h='<measuringpoint code="161120002214203" name="Ф23 Унипласт ЦРП 6 кВ">') or (h='<measuringpoint code="161120002214204" name="Ф24 Водозабор ЦРП 6 кВ">') or (h='<measuringpoint code="161120002214205" name="Ф26 Апсалямовский к-т ЦРП 6 кВ">')or (h='<measuringpoint code="161120002214301" name="Ф30 ЗАО УХЗ ЦРП 6 кВ">') or (h='<measuringpoint code="161120002214302" name="Ф32 Очистные сооружения ЦРП 6 кВ">') then t1:=t else t1:=t+j1;
if (h='<measuringpoint code="161120002113001" name="Генератор № 8">') then j1:=3050;
делю код потому что большой
bestlover вне форума Ответить с цитированием
Старый 28.10.2009, 10:44   #10
bestlover
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 23
По умолчанию

Цитата:
for i:=t1 to t1+j1 do //поиск необходимых числовых данных из переменной str
begin
if (str[i]='<') and (str[i+1]='/') and (str[i+2]='v') then
begin k:=k+1;
if (str[i-5]>='0') and (str[i-5]<='9')and (str[i-4]<>'>') and (str[i-3]<>'>') and (str[i-2]<>'>')
then str1[k]:=str[i-5]+str[i-4]+str[i-3]+str[i-2]+str[i-1] else
if (str[i-4]>='0') and (str[i-4]<='9') and (str[i-3]<>'>') and (str[i-2]<>'>')
then str1[k]:=str[i-4]+str[i-3]+str[i-2]+str[i-1] else
if (str[i-3]>='0') and (str[i-3]<='9') and (str[i-2]<>'>')
then str1[k]:=str[i-3]+str[i-2]+str[i-1] else
if (str[i-2]>='0') and (str[i-2]<='9')
then str1[k]:=str[i-2]+str[i-1] else
str1[k]:= str[i-1];
end;


end;
r:=0;
for t:=1 to k do begin a[t]:=strtofloat(str1[t]); end; //перевод чисел из строкового формата в вещественный
for t:=1 to k do begin r:=r+strtofloat(str1[t]);end; //суточное значение
for t:=1 to k do begin o:=t*2; m[t]:=a[o-1]+a[o]; //суммирование получасовых значений
stringgrid1.Cells[g,25]:=floattostr(r); //вывод суточных значений в таблциу
stringgrid1.Cells[g,t]:=floattostr(m[t]); //вывод часовых значений в таблицу
end;
u:=u+r ; //суммирование значений диапазона выбранных дат
str:=''; //очистка переменной

end;
label1.caption:='Общее количество потребленного'+#13+ 'электричества с '+
inttostr(s)+'по '+inttostr(w)+'день'+' = '+ floattostr(u); //вывод в форму
if (h='<measuringpoint code="161120002214001" name="Генератор № 4">') then u1:=u else
if (h='<measuringpoint code="161120002214002" name="Генератор № 5">') then u2:=u else
if (h='<measuringpoint code="161120002214003" name="Генератор № 7">') then u3:=u else
if (h='<measuringpoint code="161120002113001" name="Генератор № 8">') then u4:=u;
end;
procedure fr(j,y:integer;s:string);
var i:integer;
for i:=y to length(s) do
begin
inc(j);
if (str[i]='<') and (str[i+1]='/') and (str[i+2]='m') then exit;
end;







end.

часть кода) ругается на строчку
Цитата:
if (str[i]='<') and (str[i+1]='/') and (str[i+2]='m') then exit;
bestlover вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
синтаксис Range ? kievlyanin Microsoft Office Excel 2 23.04.2009 13:32
синтаксис оператора like Bezdar Microsoft Office Excel 2 26.03.2009 09:27
Синтаксис SQL robert65 SQL, базы данных 0 24.03.2009 16:23