+113
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
function FUNC(XD: TXMLDocument; L: ShortString): IXMLNode;
var
c: integer;
ln: IXMLNode;
s: ShortString;
begin
c:=0;
while c <> XD.DocumentElement.ChildNodes.Count-1 do
begin
if VarToStr(XD.DocumentElement.ChildNodes[c].Attributes['id']) = L then
begin
ln:=XD.DocumentElement.ChildNodes[c];
c:=XD.DocumentElement.ChildNodes.Count-1
end else
begin
c:=c+1; {DEBUG(VarToStr(XD.DocumentElement.ChildNodes[c].Attributes['id'],L) }
end
end;
result:=ln
end;
К слову о невнимательности и "непримеченных слонах". Итак задачка: перебором найти в наборе данных нужную строку и вернуть в итоговый результате элемент набора данных. Используем код (выше). По невнимательности своей я допустил в алгоритме ошибку и функция работала несколько некорректно. Перед Вами её изначальный вариант, до исправления. Если вкратце, то баг заключался в том, что функция не читала последний элемент XML-документа. Называется, нефиг было мудрить с алгоритмом. По сути там надо убрать из двух мест "-1". Но пока я докапывался до сути ошибки, я написал тестовую функцию, сравнивающую две строки и выводящую результат сравнения в окно сообщения. Назовём её DEBUG. И... Началось непонятное. Функция выдавала сообщение, значит результаты, как видно по алгоритму, не равны, но она выдавала РАВЕНСТВО! Мозг взрывается, ломаются представления о математике и рациональности вообще!
Xander_Bass,
18 Декабря 2010
+154
- 1
- 2
- 3
- 4
- 5
- 6
$src = fopen("0.txt", 'r');
while(!feof($src))
{
$line[] = fgets($src);
$line++;
}
Интересно чему в конце будет равно $line? :)
Xander_Bass,
17 Декабря 2010