Lazarus utf8tosys
Автор Korti Meiskovich задал вопрос в разделе Другие языки и технологии
вопрос по Lazarus; подсчет символов и получил лучший ответ
Ответ от Капитан Гугл[гуру]
Это кодировка UTF-8 - английские буквы по 1 байту (8 бит, отсюда название), русские - по 2 байта (16 бит).
Используй функцию UTF8Length.
Капитан Гугл
(144871)
Первое, что приходит в голову - UTF8ToAnsi или UTF8ToSys и посчитать количество пробелов в полученной строке.
Ответ от Ўрий Копнин[гуру]
Учитесь работать с юникодом. Есть функции определения длины символа.
Код приведенный ниже перибирает все символы, пропускает пробелы, символы переноса строки и возврата каретки, и считает все остальное.
uses LazUTF8;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
P: PChar;
L: Integer;
begin
S := Memo1.Lines.Text;
L := Length(S);
if L = 0 then Exit;
SetLength(S, L + 1);
S[L + 1] := #0;
P := @S[1];
L := 0;
while P^ <> #0 do
begin
if (P^ <> #32) and (P^ <> #13) and (P^ <> #10) then L := L + 1;
P := P + UTF8CharacterLength(P);
end;
Edit1.Text := IntToStr(L);
end;
Учитесь работать с юникодом. Есть функции определения длины символа.
Код приведенный ниже перибирает все символы, пропускает пробелы, символы переноса строки и возврата каретки, и считает все остальное.
uses LazUTF8;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
P: PChar;
L: Integer;
begin
S := Memo1.Lines.Text;
L := Length(S);
if L = 0 then Exit;
SetLength(S, L + 1);
S[L + 1] := #0;
P := @S[1];
L := 0;
while P^ <> #0 do
begin
if (P^ <> #32) and (P^ <> #13) and (P^ <> #10) then L := L + 1;
P := P + UTF8CharacterLength(P);
end;
Edit1.Text := IntToStr(L);
end;
Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: вопрос по Lazarus; подсчет символов