Здравствуйте, мне был задан вопрос как получить из кавычек такого «»(кавычки вертикальные) — кавычки такого вида <<>>(кавычки в виде перевернутого треугольника). Точнее в 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
Метки: chr, ord, замена символов в строке, символы
А простой StringReplace уже не катит? )
не совсем прокатит, надо первую кавычку менять на «левую» а вторую на «правую» (:
для узнавания кода клавиш лучше не издеваться с помощью ворда и подобных манипуляций, а пользоваться стандартной виндовой программой — таблица символов (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.
шляпа, все форматирование сбилось (:
Keeper не пойдет, ter ниже описал проблему, надо менять как на правую так и на левую
Кавычки ещё и вложенные могут быть типа фирма «ООО «Успех»», часто в таких случаях вторую закрывающую кавычку пропускают.
Не совсем ясно по посту, что хотел автор. Можно дать кавычки картинками, либо прямо указать html кодом, например
& q u o t ;
для прямых компьютерых кавычек
& l a q u o ;
& r a q u o ;
Соответственно для ёлочки левой и правой.
Вставил пробелы, чтобы html код не заменился.
P.S. Рекомендую капчу от Димонинг — с ним не надо вводить дурацкие буквы, достаточно поставить галочку.