Los caracteres permitidos son de la A a la Z, de la a a la z, de 0 a 9. La menor cantidad de código o una sola función sería mejor ya que el sistema es crítico en el tiempo en la respuesta a la entrada.¿Cuál es la forma más rápida de eliminar caracteres no alfanuméricos de una cadena en Delphi7?
Respuesta
uses JclStrings;
S := StrKeepChars('mystring', ['A'..'Z', 'a'..'z', '0'..'9']);
Nota: En la última biblioteca de JCL, diría: 'usa JclAnsiStrings' –
caso onkeypress
comienzan si no (clave en [ 'a' .. 'Z', 'a' .. 'z', '0' .. '9']), entonces clave: = # 0; final;
Usted tiene que validar el texto antes de utilizar de todos modos. Puede omitir este control utilizando el portapapeles o texto arrastrando y soltando. – DiGi
El OP quiere quitar una cadena, sin mencionar el teclado. –
Solo para añadir una observación.
La solución que usa un conjunto está bien en Delphi 7, pero puede causar algunos problemas en Delphi 2009 porque los conjuntos no pueden ser de char (se convierten a ansichar).
Una solución que puede utilizar es:
case key of
'A'..'Z', 'a'..'z', '0'..'9' : begin end; // No action
else
Key := #0;
end;
Pero la forma más versátil es por supuesto:
if not ValidChar(key) then
Key := #0;
En ese caso se puede utilizar ValidChar en varias ubicaciones y si necesita estar cambiado, solo tiene que cambiarlo una vez.
Si he entendido bien se puede utilizar una función como esta:
function StripNonAlphaNumeric(const AValue: string): string;
var
SrcPtr, DestPtr: PChar;
begin
SrcPtr := PChar(AValue);
SetLength(Result, Length(AValue));
DestPtr := PChar(Result);
while SrcPtr <> #0 do begin
if SrcPtr[0] in ['a'..'z', 'A'..'Z', '0'..'9'] then begin
DestPtr[0] := SrcPtr[0];
Inc(DestPtr);
end;
Inc(SrcPtr);
end;
SetLength(Result, DestPtr - PChar(Result));
end;
Esto utilizará PChar de alta velocidad (a costa de menos legibilidad).
Editar: Re el comentario de gabr sobre el uso de DestPtr [0] en lugar de DestPtr^: Esto debe compilar a los mismos bytes de todos modos, pero hay buenas aplicaciones en código similar, donde es necesario mirar hacia el futuro. Supongamos que desea reemplazar las líneas nuevas, entonces podría hacer algo como
function ReplaceNewlines(const AValue: string): string;
var
SrcPtr, DestPtr: PChar;
begin
SrcPtr := PChar(AValue);
SetLength(Result, Length(AValue));
DestPtr := PChar(Result);
while SrcPtr <> #0 do begin
if (SrcPtr[0] = #13) and (SrcPtr[1] = #10) then begin
DestPtr[0] := '\';
DestPtr[1] := 't';
Inc(SrcPtr);
Inc(DestPtr);
end else
DestPtr[0] := SrcPtr[0];
Inc(SrcPtr);
Inc(DestPtr);
end;
SetLength(Result, DestPtr - PChar(Result));
end;
y por lo tanto no suelo utilizar el ^.
BTW, ¿alguien tiene una idea de cómo formatear esto de forma que el resaltado funcione correctamente?
Encuentro el uso de SrcPtr [0] aquí muy interesante, nunca antes había visto tal enfoque. Una forma más canónica sería usar SrcPtr^y DestPtr ^. – gabr
Re: Formateo - tal vez si se pone el punto y coma que falta después de "DestPtr [0]: = 't'" el resaltado funcionaría. :-) –
Gracias Ken, corregido, pero todavía no está funcionando :-(El resaltador trata las cadenas de Delphi como cadenas de C desafortunadamente. – mghie
- 1. La forma más rápida de eliminar caracteres de la cadena
- 2. La forma más rápida de comprobar una cadena es alfanumérica en Java
- 3. ¿Cuál sería la forma más rápida de eliminar las Nuevas líneas de una Cadena en C#?
- 4. ¿Cuál es la forma más rápida de convertir una matriz de flotadores en una cadena?
- 5. ¿Cuál es la forma más rápida de analizar una cadena JSON en una tabla SQLite?
- 6. ¿Cuál es la forma más rápida de eliminar una carpeta grande en Windows?
- 7. La forma más rápida de eliminar caracteres no numéricos de un VARCHAR en SQL Server
- 8. ¿Cuál es la forma más fácil de eliminar el primer carácter de una cadena?
- 9. ¿Cuál es la forma más rápida de verificar si una palabra de una cadena está en otra cadena?
- 10. ¿Cuál es la forma más clojuresca de comparar caracteres y cuerdas? (cadena de caracteres única)
- 11. La forma más rápida de implementar la eliminación de caracteres duplicados en cadena (C#)
- 12. ¿Cómo elimino caracteres no alfanuméricos (espacios incluidos) de una cadena?
- 13. Eliminación de caracteres no alfanuméricos de una cadena
- 14. ¿Cuál es la forma más rápida de eliminar páginas web HTML en Android?
- 15. ¿Cuál es la forma más rápida de grabar varios archivos?
- 16. ¿Cuál es la forma más rápida de enviar una cadena al sistema?
- 17. ¿Manera elegante de contar caracteres alfanuméricos en una cadena?
- 18. Regex para eliminar caracteres no alfanuméricos de cadenas UTF8
- 19. ¿Cuál es la forma más rápida de eliminar elementos secundarios del DOM en IE?
- 20. ¿Cómo eliminar todos los caracteres no alfanuméricos y sin espacio de una cadena en PHP?
- 21. R eliminar símbolos no alfanuméricos de una cadena
- 22. (Ancho) Cadena - almacenamiento en TFileStream, Delphi 7. ¿Cuál es la manera más rápida?
- 23. Eliminar todos los caracteres no alfanuméricos mediante preg_replace
- 24. ¿Cómo determinar si una cadena tiene caracteres no alfanuméricos?
- 25. Forma más rápida de eliminar duplicados en listas Python
- 26. ¿Cuál es la forma más rápida de saltar a un constructor (es) en una clase?
- 27. La forma más rápida de encontrar una Cadena en una matriz de cadena
- 28. En ASP.NET, ¿cuál es la forma más rápida de obtener la URL base para una solicitud?
- 29. caracteres cheque alfanuméricos en cadena en C#
- 30. ¿Cuál es la forma más rápida de encontrar todas las apariciones de una subcadena?
Niza etiquetado allí;) – AdrianoKF