EConvertError przy wypełnianiu tablicy

0

Chciałem wypełnić pewną 2wymiarowa tablicę CodeArray integerami ale dostaje wyjątek:
Project1.exe raised exception class EConvertError with message ''

procedure CodeGenerate;
var
	n,i:integer; // n-nr znaku w stringu CodeStr  i-index w tablicy
	CodeInt:integer;
	CodeStr:string;
begin
		for CodeInt:=1111 to 8888 do
		begin
			CodeStr:=inttostr(CodeInt);
			for i:=1 to CODE_COUNT do  //4096
      begin
			  if ('0'<> CodeStr[1]) and ('0'<>CodeStr[2]) and ('0'<>CodeStr[3]) and ('0'<>CodeStr[4]) and ('9'<>CodeStr[1]) and ('9'<>CodeStr[2]) and ('9'<>CodeStr[3]) and ('9'<>CodeStr[4]) then
          begin
            for n:=1 to PEG_COUNT-1 do  //4
              begin
                CodeArray[i,n]:=strtoint(CodeStr[n]);
              end
          end
        end
    end
end;

CodeArray:array [1..4096,1..4] of smallint

balica ma być wypełniana cyframi z kolejnych liczb od 1111 do 8888 z pominięciem tych licz w których występuje 0 lub 9.
Czyli ma wygladać mniej wiecej tak:
1,1,1,1
1,1,1,2
1,1,1,3
....
1,1,1,8
1,1,2,1
1,1,2,2
.........
8,8,8,8

Czy ktoś ma pomysł dlaczego wyskakuje mi bład przy konwertowaniu strtoint?</i>

0

to dosc pilne wiec jakby ktos mogl mi odpowiedziec bylbym wdzieczny

0

Jeśli uzywasz StrToInt to parametrem musi być string z liczbą całkowitą, w przeciwnym razie wystąpi błąd.

0

przeciez CodeStr[n] jest liczba całkowitą z zakresu 1..8

0

Nie byłym taki pewny. Sprawdziłeś warunek, gdy poszczególne znaki są cyframi różnymi od 1 i 9, ale NIE SPRAWDZIŁEŚ, czy tekst W OGÓLE JEST liczbą. Tak może być np. na 3 pozycji dajmy na to znak 'A'. I wtedy warunek będzie spełniony, ale funkcja StrToInt() wywoła wyjątek EConvertError (co innego jeśli jest to liczba szesnastkowa, ale wtedy przed całą liczbą musi być znak '$'). Dwa wyjścia:

  1. (mało eleganckie) Obsłużyć generowany wyjątek EConvertError
  2. (zalecane przeze mnie) Użyć procedury standardowej Val().

1 użytkowników online, w tym zalogowanych: 0, gości: 1