2015-12-23 2 views
-2
function Trim_emo(SL: TStringList): TStringList; 
var 
    I:Integer; 
    S:string; 
begin 
    Result := TStringList.Create; 
    if (SL.Text='') then 
    begin 
    Exit; 
    end; 
    try 
    Result.Clear; 
    for I := 0 to SL.Count-1 do 
    begin 
     S := SL[I]; 
     S := Trim(S); 
     if (S<>'') then 
     Result.Add(ANSIUpperCase(S)); 
    end; 
    except 
    on E : exception do 
     ShowMessage(E.Message); 
    end; 
end; 

Будет ли эта функция работать нормально, если StringList содержит символы UTF-8?Правильная функция Delphi XE-8 ниже?

+0

Что об освобождении результата? – RepeatUntil

+1

@RepeatUntil Ответственность этого звонящего –

+2

Было ли это хорошо, когда вы * тестировали * его с символами UTF-8? –

ответ

3

Ваш код никогда не будет иметь дело с символами UTF-8, потому что он никогда не столкнется с ними. Строки Delphi кодируются UTF-16. Если вам интересно, как код будет работать с входом Unicode, тогда проблем нет. UTF-16 - это полная кодировка Unicode.

Есть несколько проблем с кодом:

  • Если возбуждается исключение, то код будет просачиваться экземпляр списка строк.
  • Исключена обработка исключений. Если возникает и обрабатывается исключение, отображается сообщение об ошибке. Однако исполнение продолжается, как будто ничего не произошло. Просто удалите обработку исключений и пусть исключение поплавится вверх.
  • Нецелесообразно оценивать Text, чтобы проверить, пуст ли вход. Если вход не пуст, вы можете создать очень длинную строку, которую вы сразу же выбросите. Этот тест просто бесполезен и может быть удален.

Это было бы лучше:

function Trim_emo(SL: TStringList): TStringList; 
var 
    I: Integer; 
    S: string; 
begin 
    Result := TStringList.Create; 
    try 
    for I := 0 to SL.Count-1 do 
    begin 
     S := Trim(ANSIUpperCase(SL[I]));  
     if S<>'' then 
     Result.Add(S); 
    end; 
    except 
    Result.Free; 
    raise; 
    end; 
end; 
Смежные вопросы