Переменная типа CHAR

Модераторы: Duncon, Naeel Maqsudov, Хыиуду, Игорь Акопян

Ответить
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

26 июл 2007, 12:18

Всем привет! Помогите разобраться
вот есть переменная x:Char
делаем For x:='1' do 'Z' do
ShowMessage(x);

и она выдает все от 1 до Z и еще в добавок ':;<=>?@'

Я хочу увеличить x на 1 символ, так сказать...
Т.е. если в переменной х был 1 то нужно чтоб стал 2, если 9 то А, если А то В...

Каким способом такое сделать? х:=х+1 не канает :D

И как исключить этот самый "в добавок" т.е. чтоб эти символы не выдавала...

Суть в том что я хочу встроить этот алгоритм при создании файла, мне нужно чтоб в конце имени файла приписывался индекс от 1 до Z.
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

26 июл 2007, 12:48

Сделай проверку и все, неужели так сложно?

Код: Выделить всё

if x='9' then x := 'A';
В других случаях проканает
X := Chr(ord(x)+1); или
inc(byte(x));
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

26 июл 2007, 12:55

Char - символ, и ты просишь вывести промежуток символов от 1 до Z.
Нужно же перегнать Char в integer к примеру.. И с ним работатью
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

26 июл 2007, 15:48

somewhere писал(а):В других случаях проканает ....
inc(byte(x));
Проканает даже без приведения к byte:
Inc (x); { где x - переменная типа char }

Так как пр-ра Inc (это даже и в Паскале) применяется к любому "ordinal-type".
Проагмент из паскалевкого хелпа:

Inc (procedure)
=============
Increments a variable.
Declaration:
procedure Inc(var X [ ; N: Longint ] );
Target:
Windows, Real, Protected
Remarks:
X is an ordinal-type variable or a variable of type PChar if the extended
syntax is enabled and N is an integer-type expression.
......
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

26 июл 2007, 15:51

Либо можно завести массив символов, где будут записаны лишь нужные символы, пользоваться не номером сиимвола (от ord('0') до ord('Z')), а номером ячейки масива (от 1 до 36):

Код: Выделить всё

const MY_CHARS : array [1..36] of char = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

29 июл 2007, 11:09

Сенькс! Все ништяк! Робит как надо!
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Ответить