Работа со строками Юникода в Delphi 7 - PullRequest
7 голосов
/ 17 февраля 2010

Мне нужно написать программу, которая будет просматривать строки различной длины и выбирать только те, которые написаны с использованием символов из набора, определенного мной (в частности, японские буквы). Строки будут содержать слова, написанные на разных языках (немецкий, французский, арабский, русский, английский и т. Д.). Очевидно, существует огромное количество возможных персонажей. Я не знаю, какую структуру использовать для этого? Я использую Delphi 7 прямо сейчас. Кто-нибудь может подсказать, как написать такую ​​программу?

Ответы [ 3 ]

12 голосов
/ 17 февраля 2010

Очевидно, что было бы лучше с Delphi 2010, так как VCL в Delphi 7 не знает о строках Unicode.Вы можете использовать типы WideString и WideChar в Delphi 7 и установить набор компонентов, например, компоненты TNT Unicode, чтобы помочь вам создать пользовательский интерфейс, который может отображать ваши результаты.

Для типа с очень большим набором рассмотрите возможность использования битового массива, такого как TBits.Битовый массив длиной 65536 будет вмещать достаточно, чтобы содержать каждую кодовую точку UTF-16.Проверка, если Char X находится в наборе Y, будет в основном:

function WideCharsInSet( wcstr:WideString; wcset:TBits):Boolean;
var
 n:Integer;
 wc:WideChar;
begin
result := false;
for n := 1 to Length(wcstr) do begin
  wc := wcstr[n];
  if wcset[Ord(wc)] then
      result := true;
end;
end;

procedure Demo;
var
 wcset1:TBits;
 s:WideString;
begin
 wcset1 := TBits.Create;
 try
  // 1157 - Hangul Korean codepoint I found with Char Map
    wcset1[1157] := true;         
    // go get a string value s:
    s := WideChar(1157);
// return true if at least one element in set wcset is found in string s:
    if WideCharsInSet(s,wcset1) then begin
        Application.MessageBox('Found it','found it',MB_OK);
    end;

 finally
  wcset1.Free;
 end;

end;
5 голосов
/ 17 февраля 2010

Для простой обработки строк способом, который вы описываете, не откладывайте на предложения, что вам следует обновить систему до последней версии с поддержкой Unicode. Сама поддержка Unicode, конечно же, обеспечивается базовым API-интерфейсом Windows, который, конечно, (напрямую) доступен из версий Delphi, не относящихся к Unicode, так же, как из версий Unicode.

Я подозреваю, что большую часть, если не всю поддержку Unicode, которая вам нужна для целей, указанных в вашем вопросе, можно получить из поддержки Unicode, предоставленной в JEDI JCL .

Для поддержки любого визуального компонента вам может потребоваться, чтобы набор управления TNT имел привлекательность быть свободным.

5 голосов
/ 17 февраля 2010

Я также рекомендую перейти на Delphi 2010 (зачем беспокоиться о 2009 году?)!

Если в маловероятном случае, если вы застряли с Delphi 7, Библиотека Unicode от Майка Лишке может быть несколько полезной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...