![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите в чем ошибка
гость © (2004-12-31 12:26:00)Посмотрите пожалуйста код 0 записывает, а если exp существует
то значение не записывает
var
ex,a,b:word;
w:string;
f1:textfile;
begin
ex:=pos('exp',sOld);
if ex=1 then
begin
a:=pos('(',sOld);
a:=2;
b:=a+1;
while ((sOld[b]>='0')and(sOld[b]<='9'))do
begin
w:='' ;
w:=sOld[b]+w;
end;
AssignFile(F1,'c:\Razbor.txt');
Rewrite(F1);
Writeln(F1,w);
CloseFile(F1) ;
end
else
begin
AssignFile(F1,'c:\Razbor.txt');
Rewrite(F1);
Writeln(F1,'0');
CloseFile(F1) ;
end;
end;
begin...end (2004-12-31 13:41:00) [1]> [13] Digitman © (31.12.04 13:33)
> строка может содержать ПРОИЗВОЛЬНОЕ арифм.выр-е
А, ну если там может быть что угодно, в том числе и со своими скобками, и т.д., тогда, конечно, [11] не подойдёт.
Вообще, гостьзациклился на разборе арифметических выражений :-), напр.: http://www.delphimaster.ru/cgi-bin/forum.pl?id=1104053154&n=0
> с НГ !
Аналогично! :-) И гостя- тоже :-)
Digitman (2004-12-31 13:33:00) [2]
> begin...end
если я правильнго понял, то строка может содержать ПРОИЗВОЛЬНОЕ арифм.выр-е .. первым членом которого обязательно явл-ся ф-ция exp()
а это попахивает полноценным интерпретатором ..
дело худо)
с НГ !
begin...end (2004-12-31 13:24:00) [3]Ну и перед тем, как записывать, следует проверить, является ли sValue действительно строковым представлением числа.
begin...end (2004-12-31 13:21:00) [4]> [7] гость (31.12.04 12:49)
var
P: Integer;
sOld, sValue: String;
begin
P := Pos('exp(', sOld);
if P = 1 then
begin
P := Pos(')', sOld);
P := P - 5;
if P > 0 then
begin
sValue := Copy(sOld, 5, P);
// Записываем sValue в файл
end
end
end.
А ещё можно было сделать с использованием PosEx.
Digitman (2004-12-31 13:09:00) [5]т.е. строка, где в нач.позициях присутствует exp(), являет собой не иначе как арифметическое выражение ?
гость (2004-12-31 13:03:00) [6]да может быть но exp должна быть первой.
например
exp(54)*(.............)
Digitman (2004-12-31 12:57:00) [7]
> есть строка в которой на первой позиции exp(какое-то число)
кроме "exp(какое-то число)" (неважно в какой позиции) в этой строке еще что-то может быть
гость (2004-12-31 12:49:00) [8]
> А что этот код ДОЛЖЕН делать?
есть строка в которой на первой позиции exp(какое-то число)
надо сделать следующее записать в файл это самое число если оно существует иди 0 если числа нет
DiamondShark (2004-12-31 12:44:00) [9]
> while ((sOld[b]>='0')and(sOld[b]<='9'))do
> begin
> w:='' ;
> w:=sOld[b]+w;
> end;
Эта... Можно русскими словами пересказать условие завершения этого цикла?
"бред какой-то .." (ц)
begin...end (2004-12-31 12:42:00) [10]> [2] гость (31.12.04 12:36)
А что этот код ДОЛЖЕН делать?
гость (2004-12-31 12:41:00) [11]если убрать a:=2 прога вообще виснет
Digitman (2004-12-31 12:40:00) [12]
> a:=pos('(',sOld);
> a:=2;
бред какой-то ..
с НГ !
гость (2004-12-31 12:36:00) [13]подскажите как можно исправить
begin...end (2004-12-31 12:33:00) [14]> гость (31.12.04 12:26)
Значение, наверное, записывается, но пустое? Ну тогда, значит, цикл while ни разу не выполняется, т.е. не выполняется условие sOld[b] in ['0'..'9'].