Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.10;
Скачать: CL | DM;

Вниз

Как организовать работу case   Найти похожие ветки 

 
ambhtr   (2007-05-18 15:08) [0]

Из строки выбираются поочередно символы и должны проверятся на разрешенные символы. Пытаюсь отработать это таким кодом:
var
 valChar : Char;
...

      for I:=1 to lenS do
        begin
          valChar := Char(copy(S,I,1));
          case valChar of
              "0".."9",
              "a".."z",
              "A".."Z",
              "|",";"       : ;  //Допустимые символы.
          else
           lst_ErrTXT.Add("В файле " + nmFile +
                          " на линии "+ IntToStr(nnRec) +
                          " в колонке под номером " + IntToStr(I) +
                          " имеется недопустимый символ");
          end;

Но не получается в строке:
           valChar := Char(copy(S,I,1));
перевести string -> Char.
Или если можно проверять отдельный строковые символы по другому, подскажите, пожалуйста.


 
Сергей М. ©   (2007-05-18 15:10) [1]

valChar := S[I];


 
ambhtr   (2007-05-18 15:40) [2]

Спасибо :о)! Все сработало. Только теперь другая "проблема":
В "допустимые" символы надо добавить и русские буквы.
          case valChar of
              "0".."9",
              "a".."z",
              "A".."Z",
              "а".."я",
              "А".."Я",

А текст ДОСовский, и кодировка ДОСовская. Как сделать, чтобы учитывать русские "ДОСовские" буквы?


 
clickmaker ©   (2007-05-18 15:46) [3]


> Как сделать, чтобы учитывать русские "ДОСовские" буквы?

OemToChar()


 
Сергей М. ©   (2007-05-18 15:48) [4]

Тогда сначала приведи оригинальную кодировку символов с строке к ANSI-стандарту:

OEMToChar(PChar(s), PChar(s));

А далее все точно так же как сейчас


 
ambhtr   (2007-05-18 16:58) [5]

Вставил строчку:
OEMToChar(PChar(s), PChar(s));
но теперь на какой-то строчке выдает ошибку:
"Access violation at address 77D5ED16 in module "user32.dll". Write of address ..."
И никак не могу пока ни выловить на какой линии, ни почему появляется эта ошибка.
Подскажите, что может быть.


 
clickmaker ©   (2007-05-18 16:59) [6]

терзают смутные сомнения, а выделил ли ты память под s?


 
ambhtr   (2007-05-18 17:06) [7]

Спасибо всем! Удалось выловить пустую строку на которой и происходила ошибка.
Поставил:
      if S<>"" then OEMToChar(PChar(S), PChar(S));
и все пошло.
Еще раз всем СПАСИБО!!! :о)))


 
Anatoly Podgoretsky ©   (2007-05-18 21:01) [8]

if Char in [..] then else


 
Anatoly Podgoretsky ©   (2007-05-18 21:02) [9]


> ambhtr   (18.05.07 17:06) [7]

Про это много писали большевики.



Страницы: 1 вся ветка

Текущий архив: 2007.06.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
3-1174533472
merko$
2007-03-22 06:17
2007.06.10
Копирование записи в IBTable


15-1178804267
Desdechado
2007-05-10 17:37
2007.06.10
Шаблоны документов и их наполнение из БД


15-1179042617
Ravshan
2007-05-13 11:50
2007.06.10
C++ Файловые потоки: read, write. Странные вещи происходят.


2-1179648772
Leon25
2007-05-20 12:12
2007.06.10
TDriveComboBox


2-1179490046
FIL-23
2007-05-18 16:07
2007.06.10
ПЕРЕХВАТ И ОБРАБОТКА ИСКЛЮЧЕНИЙ