Как получить первый элемент в строке?

Я подозреваю, что реальная проблема здесь - то, что Ваш исполнитель тестов копирует Ваш блок в различное местоположение. Нет никакого пути во времени выполнения для сообщения, где блок был скопирован с, но можно, вероятно, зеркально отразить переключатель, чтобы сказать исполнителю тестов выполнять блок от того, где это а не скопировать его в теневой каталог.

Такой переключатель, вероятно, будет отличаться для каждого исполнителя тестов, конечно.

Вы рассмотрели встраивание Ваших данных XML как ресурсы в Вашей опытной сборке?

16
задан Marco van de Voort 17 July 2009 в 19:54
поделиться

7 ответов

Строки начинаются с 1:

if not (myString[1] in ['0'..'9']) then // Do something
40
ответ дан 30 November 2019 в 15:09
поделиться

Строки Delphi используют индекс с отсчетом от 1, так что просто перепишите на

if not(myString[1] in ['0'..'9']) then //Do something

Также обратите внимание на кавычки вокруг 0..9 , иначе вы бы сравнивали символы с целыми числами.

8
ответ дан 30 November 2019 в 15:09
поделиться

Паскаль и Delphi индексируют строку, начиная с 1. Это наследие тех времен, когда нулевой байт содержал длину, а следующие 255 (индексы от 1 до 255) содержали фактические символы. Джоэл Спольски написал неплохую статью о проблемах со строками:
http://www.joelonsoftware.com/articles/fog0000000319.html

16
ответ дан 30 November 2019 в 15:09
поделиться

Самый простой способ проверить, является ли первый символ строки целым числом, и затем отправить:

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;    
0
ответ дан 30 November 2019 в 15:09
поделиться

если нет (myString [0] в [0..9]), то // Сделайте что-нибудь

Если вы используете Delphi 2009, класс TCharacter в Character.pas имеет функции например, IsDigit, чтобы упростить подобные операции.

Конечно, после исправления индексации. :)

1
ответ дан 30 November 2019 в 15:09
поделиться

Я использую служебную функцию для проверки всей строки:

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 в Вместо этого значение.

Чтобы проверить только целые числа, удалите символ '.' из набора символов для тестирования.

0
ответ дан 30 November 2019 в 15:09
поделиться

Это неверно. Строки ISO и более старые версии Паскаля также начинались с одного. Это просто общее соглашение, и, как правило, s [0] является результатом того, что он пуст и дешев для кодирования в интерпретаторе байт-кода UCSD. Но этот последний бит был раньше моего времени, так что только мои предположения.

Это результат способности Паскаля иметь произвольные верхние и нижние границы, что обеспечивает большую безопасность типов при доступе к массивам.

Действительно старые строки Паскаля (до начала восьмидесятых) ) струны были даже хуже, чем Си, кстати. Использовалось несколько соглашений, но все они основывались на статических массивах (как в раннем C), но обычно они были заполнены пробелами, поэтому вам нужно было сканировать от конца до конца пробелов.

(удален устаревший тег, поскольку основание на 1 не является устаревшим. Доступ к s [0] как длина IS устаревший,

0
ответ дан 30 November 2019 в 15:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: