Здравствуйте, мне был задан вопрос как получить из кавычек такого «»(кавычки вертикальные) — кавычки такого вида <<>>(кавычки в виде перевернутого треугольника).  Точнее в TMemo отображаются кавычки при загрузке страницы такого вида - «»(кавычки вертикальные), хотя на сайте кавычки такого вида <<>>(кавычки в виде перевернутого треугольника). Может как-то можно настроить TMemo, чтобы отображались кавычки такие как на сайте, а можно попробывать вместо TMemo использовать TRichEdit - по крайней мере у него побольше возможностей. Но если и там не получится, то возможно только, наверное, это замена кавычек вида «» на кавычки вида <<>>. Для этого я предлагаю использовать процедуры

  • ord
  • chr

С помощью процедуры ord мы сможем получить код любого нашего символа, а с помощью процедуры chr мы сможем наш, полученный код, преобразовать в нужный символ, то есть в символ, который расположен под данным кодом.

В TMemo вручную не набрать кавычки вида <<>>. Но надо же узнать код и той и другой кавычки данного вида, чтобы потом заменять их на вид такой «». Как всем известно MS WORD эти кавычки (<<>>) отображает нормально, набираем в MS WORD данные кавычки, а затем просто копируем и тот и другой вид кавычек и вставляем в TRichEdit например и Lines[0] TRichEdit мы записываем в строковую переменную, а затем определяем ord(str(1)), ord(str(2)). То есть в str у нас кавычки <<>>. Соответственно под индексом 1 одна кавычка, под индексом 2 вторая. Результат будет целого типа, то есть выведется код данных символов. Нам необходимо их запомнить, так как мы будем на них заменять с помощью процедуры chr. Для этого на TButton событие OnClick я написал следующий код

procedure TForm1.Button1Click(Sender: TObject);
var
 str:string;
 i,j:integer;
begin
   try
    str:='@$#"привет как дела"""""привет нормально""""""';
    i:=1;
    while (i<=length(str)) do
     begin
      if str[i]='"' then
       begin
        str[i]:=chr(171);
        j:=pos('"',str);
        if j<>0 then
         str[j]:=chr(187);
       end;
      inc(i);
     end;
    ShowMessage(str);
   except
    on e:Exception do
   end;
end;

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

Кстати, хочу заметить, что без техники в настоящее время почти невозможно. Человек использую технику каждый день, в наше время без нее уже никуда. Но не забывайте, чтобы купить качественную технику — необходимо знать основные показатели выбора техники.

Исходники можно скачать тут

Автор статьи - Andrey53

Метки: , , ,




К записи “Замена символов в строке” оставлено комментариев: 5.

  1. Keeper:

    А простой StringReplace уже не катит? )

    • ter:

      не совсем прокатит, надо первую кавычку менять на «левую» а вторую на «правую» (:

      для узнавания кода клавиш лучше не издеваться с помощью ворда и подобных манипуляций, а пользоваться стандартной виндовой программой — таблица символов (charmap.exe).

      если уж заменять посимвольно то можно было бы сделать например так: из предположения что каждой открывающей кавычке есть закрывающая, то все нечетные надо поменять на левые, а четные на правые.
      и код получится вида
      function ConvertQuotes(const source_text:string):string;
      const REPLACE_CHARS : array[boolean] of char = (#187,#171);
      var i: cardinal;
      rpl : cardinal;
      begin
      result := source_text;
      rpl := 0;

      for i:=1 to length(result) do begin
      if result[i] = '"' then begin
      inc(rpl);
      result[i] := REPLACE_CHARS[ odd(rpl) ];
      end;
      end;
      end;

      begin
      showMessage(ConvertQuotes('this is "text example". "c" '));
      end.

  2. Andrey53:

    Keeper не пойдет, ter ниже описал проблему, надо менять как на правую так и на левую

  3. Моторокер:

    Кавычки ещё и вложенные могут быть типа фирма «ООО «Успех»», часто в таких случаях вторую закрывающую кавычку пропускают.

    Не совсем ясно по посту, что хотел автор. Можно дать кавычки картинками, либо прямо указать html кодом, например
    & q u o t ;
    для прямых компьютерых кавычек

    & l a q u o ;
    & r a q u o ;
    Соответственно для ёлочки левой и правой.

    Вставил пробелы, чтобы html код не заменился.

    P.S. Рекомендую капчу от Димонинг — с ним не надо вводить дурацкие буквы, достаточно поставить галочку.

Оставить комментарий

Вы можете использовать следующие теги:

*