Я подозреваю, что реальная проблема здесь - то, что Ваш исполнитель тестов копирует Ваш блок в различное местоположение. Нет никакого пути во времени выполнения для сообщения, где блок был скопирован с, но можно, вероятно, зеркально отразить переключатель, чтобы сказать исполнителю тестов выполнять блок от того, где это а не скопировать его в теневой каталог.
Такой переключатель, вероятно, будет отличаться для каждого исполнителя тестов, конечно.
Вы рассмотрели встраивание Ваших данных XML как ресурсы в Вашей опытной сборке?
Строки начинаются с 1:
if not (myString[1] in ['0'..'9']) then // Do something
Строки Delphi используют индекс с отсчетом от 1, так что просто перепишите на
if not(myString[1] in ['0'..'9']) then //Do something
Также обратите внимание на кавычки вокруг 0..9
, иначе вы бы сравнивали символы с целыми числами.
Паскаль и Delphi индексируют строку, начиная с 1. Это наследие тех времен, когда нулевой байт содержал длину, а следующие 255 (индексы от 1 до 255) содержали фактические символы.
Джоэл Спольски написал неплохую статью о проблемах со строками:
http://www.joelonsoftware.com/articles/fog0000000319.html
Самый простой способ проверить, является ли первый символ строки целым числом, и затем отправить:
var
iResult : integer;
begin
if TryStrToInt( mySTring[1], iResult) then
begin
// handle number logic here iResult = number
end
else
begin
// handle non number logic here
end;
end;
если нет (myString [0] в [0..9]), то // Сделайте что-нибудь
Если вы используете Delphi 2009, класс TCharacter в Character.pas имеет функции например, IsDigit, чтобы упростить подобные операции.
Конечно, после исправления индексации. :)
Я использую служебную функцию для проверки всей строки:
function IsNumeric(const Value: string): Boolean;
var
i: Integer;
begin
Result := True;
for i := 1 to Length(Value) do
if not (Value[i] in ['0'..'9','.','+','-']) then
begin
Result := False;
Break;
end;
end;
Приведенный выше код предназначен для версий Delphi до 2007 года. В 2007 и 2009 годах вы могли изменить целочисленную переменную i на символ c и использовать вместо c в Вместо этого значение.
Чтобы проверить только целые числа, удалите символ '.' из набора символов для тестирования.
Это неверно. Строки ISO и более старые версии Паскаля также начинались с одного. Это просто общее соглашение, и, как правило, s [0] является результатом того, что он пуст и дешев для кодирования в интерпретаторе байт-кода UCSD. Но этот последний бит был раньше моего времени, так что только мои предположения.
Это результат способности Паскаля иметь произвольные верхние и нижние границы, что обеспечивает большую безопасность типов при доступе к массивам.
Действительно старые строки Паскаля (до начала восьмидесятых) ) струны были даже хуже, чем Си, кстати. Использовалось несколько соглашений, но все они основывались на статических массивах (как в раннем C), но обычно они были заполнены пробелами, поэтому вам нужно было сканировать от конца до конца пробелов.
(удален устаревший тег, поскольку основание на 1 не является устаревшим. Доступ к s [0] как длина IS устаревший,