Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2017, 01:16   #1
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию Оставить в строке только буквы и цифры, все остальное убрать

Привет.

Необходимо удалить из строки не буквы и не цифры.

Код:
function DeleteSymbol(Text:String):String;
  const
    Sumbols = ['0'..'9','a'..'z','а'..'я','ё'];
  var
    i : Integer;
begin
  Text := AnsiLowerCase(Text);
  for i := Length(Text) downto 1 do begin
    if not (Text[i] in Sumbols) then Delete(Text, i, 1);
  end;
  Result:=Text;
end;
В текущем варианте из строки удаляется кириллица, что противоречит условию задачи.

В чем может быть проблема?
bilibian вне форума Ответить с цитированием
Старый 11.08.2017, 04:48   #2
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 273
По умолчанию

Код:
function MyTrim(const S: string): string;
var
  Sp, Rp: PChar;
begin
  SetLength(Result, Length(S));
  Sp := PChar(S);
  Rp := PChar(Result);
  while Sp^ <> #0 do
  begin
    if not (Sp^ <= ' ') then
    begin
      Rp^ := Sp^;
      Inc(Rp);
    end;
    Inc(Sp);
  end;
  SetLength(Result, Rp - PChar(Result));
end;
?
Filka вне форума Ответить с цитированием
Старый 11.08.2017, 09:18   #3
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Из строки необходимо удалять все, кроме букв и цифр, а не только пробелы.
bilibian вне форума Ответить с цитированием
Старый 11.08.2017, 09:23   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
В чем может быть проблема?
unicode ?
я же использую AnsiLowerCase .
А это только приведение "размера", но не перекодировка.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 11.08.2017, 09:30   #5
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Вы имеете ввиду перевести строку в utf8?! Не работает в случае с AnsiToUtf8
bilibian вне форума Ответить с цитированием
Старый 11.08.2017, 09:33   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Вы имеете ввиду перевести строку в utf8?
нет, я имею в виду, что исходная строка имеет кодировку отличную от ANSI.
и надо наоборот Utf8ToAnsi.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 11.08.2017 в 09:35.
evg_m вне форума Ответить с цитированием
Старый 11.08.2017, 09:34   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от bilibian Посмотреть сообщение
Из строки необходимо удалять все, кроме букв
И каких именно букв? Английский (латиница), кириллица, французский, вьетнамский, китайский, японский?

дальше, допустим, речь идёт только о русских и английских буквах.
Тогда вопрос - строчный и прописные буквы различать?

следующий вопрос - какая у Вас версия Delphi ?
если Unicode (это все версии Delphi >= 2009), тогда ваш код некорректнет -
множества использовать нельзя, они не работают с уникодом.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.08.2017, 09:47   #8
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
надо наоборот Utf8ToAnsi.
Увы, но не работает!


Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
И каких именно букв? Английский (латиница), кириллица, французский, вьетнамский, китайский, японский?
Так ведь я вроде изначально указал.
Цитата:
Сообщение от bilibian Посмотреть сообщение
Sumbols = ['0'..'9','a'..'z','а'..'я','ё'];
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Тогда вопрос - строчный и прописные буквы различать?
По идее нужны только строчные, но на всякий случай предусмотрен вариант с
Цитата:
Сообщение от bilibian Посмотреть сообщение
Text := AnsiLowerCase(Text);
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
следующий вопрос - какая у Вас версия Delphi ?
Delphi 10.1 Berlin
bilibian вне форума Ответить с цитированием
Старый 11.08.2017, 09:50   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

попробуйте такой код:
Код:
function DeleteSymbol(sText:String):String;
  const
    Symbols = ['0'..'9','a'..'z','а'..'я','ё'];
  var
    i : Integer;
begin
  sText := AnsiLowerCase(sText);
  Result := ''; 
  for i :=  1 to Length(sText) do begin
     if CharInSet(AnsiChar(sText[i]), Symbols) then Result := Result + sText[i];
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.08.2017, 10:15   #10
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
попробуйте такой код:
Код:
DeleteSymbol('привет.'); // Результат: иве
Работает не совсем так, как планировалось

Последний раз редактировалось bilibian; 11.08.2017 в 10:35.
bilibian вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оставить в числе только первые вхождения каждой цифры. Saratow Помощь студентам 4 14.05.2015 19:07
Оставить Только Первые Буквы Слов В Предложении PDiddy Microsoft Office Excel 5 30.04.2013 07:17
Строки. Преобразовать строку: оставить слова, содержащие буквы и цифры, остальные удалить Ленка ленка Паскаль, Turbo Pascal, PascalABC.NET 1 23.04.2012 11:51
Оставить в переменной только латинские буквы Delphinchik PHP 2 31.03.2011 14:41