Necesito escribir un programa que explore cadenas de varias longitudes y seleccione solo aquellas que están escritas usando símbolos del conjunto definido por mí (particularmente letras japonesas). Las cadenas contendrán palabras escritas en diferentes idiomas (alemán, francés, árabe, ruso, inglés, etc.). Obviamente hay una gran cantidad de personajes posibles. No sé qué estructura usar para eso? Estoy usando Delphi 7 ahora mismo. ¿Alguien puede sugerir cómo escribir dicho programa?Trabajando con cadenas Unicode en Delphi 7
Respuesta
Obviamente, estarías mejor con Delphi 2010, ya que la VCL en Delphi 7 no tiene conocimiento de las cadenas Unicode. Puede usar los tipos WideString y WideChar en Delphi 7, y puede instalar un conjunto de componentes como los componentes TNT Unicode para ayudarlo a crear una interfaz de usuario que pueda mostrar sus resultados.
Para un tipo muy grande, considere usar una matriz de bits como TBits. Una matriz de bits de longitud 65536 sería suficiente para contener cada punto de código UTF-16. Verificando Char X es en conjunto Y, sería básicamente:
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;
también recomiendo cambiar a Delphi 2010 (¿por qué molestarse con 2.009 más?)!
Si en el caso improbable de estar atrapado con Delphi 7, el Unicode Library de Mike Lischke puede ser de alguna ayuda.
enlace está roto ahora – CyprUS
@CyprUS, reparado! –
Para el procesamiento simple de cadenas de la manera descrita, no se deje intimidar por las sugerencias de que debe actualizar al último compilador y marco compatible con Unicode. El soporte de Unicode en sí mismo es, por supuesto, proporcionado por la API subyacente de Windows que, por supuesto (directamente), se puede acceder desde versiones "no Unicode" de Delphi tanto como desde "versiones Unicode".
Sospecho que la mayoría, si no la totalidad, del soporte Unicode que necesita para los fines descritos en su pregunta puede obtenerse a partir del soporte Unicode proporcionado en the JEDI JCL.
Para cualquier soporte de componentes visuales que necesite el TNT control set tiene el atractivo de ser gratuito.
+1, excelente argumento. El código en la respuesta aceptada se compila y funciona sin problemas en Delphi 4 incluso. – mghie
Ahora, incluso Delphi se divide en Traddies y las personas actualizadas. –
Prefiero pensar que es "hacer el trabajo con el mínimo de trabajo, molestar y gastar" a las personas y "cambiar por los cambios sin preocuparse por lo que realmente se necesita". :) – Deltics
- 1. WideString de conversión de cadenas en Delphi 7
- 2. Trabajando con cadenas en C++
- 3. Unicode - generalmente trabajando con él en C++
- 4. Delphi 7 tguid compare
- 5. GetStackTrace en Delphi 7?
- 6. Virus en Delphi 7
- 7. Delphi Conversion Unicode Issues
- 8. Delphi 2009 + Unicode + tamaño de char
- 9. Transmitir una aplicación Delphi 2006 unicode a Delphi 2009
- 10. ¿Por qué SetString toma menos memoria en Delphi (con Unicode)?
- 11. Cadenas Unicode en Ruby 1.9
- 12. Lista de cadenas Unicode
- 13. Delphi 7 vista/windows 7 manifiesto
- 14. Python, len y sectores en cadenas Unicode
- 15. Aplicación de consola Unicode en Delphi 2009
- 16. Unicode-aware cadenas (1) programa
- 17. caso Matching cadenas Unicode sensibles con expresiones regulares en Python
- 18. Delphi, instaladores y Windows 7
- 19. Cadenas multiplataforma (y Unicode) en C++
- 20. Fuga de memoria con WMI en Delphi 7
- 21. Redondeado y titulado "TPanel" en Delphi 7
- 22. Delphi 7 GIF en cuadro Dialog
- 23. base64 codificación cadenas unicode en python 2.7
- 24. Normalización de cadenas Unicode en C/C++
- 25. Cómo escribir cadenas unicode en un archivo?
- 26. Cómo comparar cadenas Unicode en Javascript?
- 27. Delphi 7 enciende auto completar
- 28. iterar a través de cadenas Unicode y comparar con Unicode en el diccionario de Python
- 29. Configuración del ícono EXE en Delphi 7
- 30. Comportamiento inesperado de Application.OnActivate en Delphi 7
+1 todos los buenos bits en la respuesta. Bigsets, TNT y recomiendan no hacer esto en D7 en absoluto. –
Escribí un código de código más útil aquí para usted, Tofig –
Una gran característica de la clase Delphi 2010 TStringList es la capacidad de cargar un archivo desde el disco, determinar automáticamente la codificación UTF8 o UTF16 desde los marcadores de bytes, y así sucesivamente. Esa es otra parte de su tarea, Tofig, que será más complicada en la versión de Delphi anterior a 2009/2010. –