![]() |
Steuerzeichen
Hallo !
Ich schreibe derzeit an einem Programm, dass anhand einer Paradox-Datenbank ein SQL-Scrip für den Import in ein anderes Programm erzeugen soll. An wenigen Stellen werden aus der Paradox-DB Steuerzeichen aus einem (vermutlich defekten) Memo-Feld importiert. Ich habe versucht diese Steuerzeichen ( [NUL], [SI], [DC4], [EOT] ... ) aus dem Text auszufiltern. Leider ohne großen Erfolg. Zunächst habe ich versucht, alle Steuerzeichen mit Hilfe einer Funktion herauszufiltern :
Delphi-Quellcode:
Auch der direkte Aufruf mit
function TMain.CleanText(S: String): String;
var i:Integer; begin for i := 0 to 31 do if (i<>10) AND (i<>13) then S:=StringReplace(S,CHR(i),'',[rfReplaceAll]); Result := S; End;
Delphi-Quellcode:
bzw.
{...}
S:=StringReplace(S,CHAR(#0),'',[rfReplaceAll]); S:=StringReplace(S,CHAR(#4),'',[rfReplaceAll]); S:=StringReplace(S,CHAR(#20),'',[rfReplaceAll]); {...}
Delphi-Quellcode:
erbrachte nicht das gewünschte Ergebnis.
{...}
S:=StringReplace(S,#0,'',[rfReplaceAll]); S:=StringReplace(S,#4,'',[rfReplaceAll]); S:=StringReplace(S,#20,'',[rfReplaceAll]); {...} Einzig der Trim-Befehl brachte einen kleinen Erfolg. Dieser entfernte die Steuerzeichen, die sich am Anfang oder Ende des Strings befanden. Befinden sich jedoch Steuerzeichen inmitten des Strings, so werden diese nicht entfernt. Hat jemand eine Idee, wie ich ALLE Steuerzeichen entfernen kann ? Gruß Guido R. |
AW: Steuerzeichen
Es ist zwar kein großer Unterschied zu Deiner 1. Version, aber versuch doch mal (ungetestet):
Delphi-Quellcode:
[edit] Ich sehe gerade: Delphi 2010. AFAIK kann Paradox kein Unicode, könnte es damit zusammenhängen? Hast Du es auch einmal mit AnsiStrings probiert? [/edit]
function TMain.CleanText(const S: String): String;
var i, j: integer; begin SetLength(Result, Length(S)); j := 0; for i := 1 to Length(S) do if (Ord(S[i]) > 31) or (S[i] in [#10, #13]) then begin inc(j); Result[j] := S[i]; end; SetLength(Result, j); end; |
AW: Steuerzeichen
Dieses Projekt führe ich noch mit D2007 durch. Somit sollte Unicode eigentlich kein Problem sein...
Die Daten habe ich mir vorher in ein String gelesen
Delphi-Quellcode:
S := ParadoxTable.FieldByName('BLOEDESMEMO').AsString;
Ich probiere Deine Methode gleich mal aus... Gruß Guido R. |
AW: Steuerzeichen
Ich hab Deinen Vorschlag leicht abgewandelt, aber so funktioniert es tatsächlich ...
Delphi-Quellcode:
Thx !
function TMain.CleanText(S: String): String;
var i:Integer; begin Result := ''; if Length(S)>0 then for i := 1 to Length(S) do if (Ord(S[i]) > 31) or (S[i] in [#10, #13]) then Result := Result+S[i]; Result:=Trim(StringReplace(Result,'"','´´',[rfReplaceAll])); end; |
AW: Steuerzeichen
Würdest du bitte deinem Thema noch einen aussagekräftigen Namen geben? Und für die Zukunft ein kleiner Hinweis: Titel aus nur einem Wort sind in den seltensten Fällen aussagekräftig.
|
AW: Steuerzeichen
Und eine Kombination unserer beiden Codes dürfte schneller sein. Noch flotter ginge es dann wohl nur noch über Pointer.
Delphi-Quellcode:
function TMain.CleanText(const S: String): String;
var i, j: integer; begin SetLength(Result, Length(S)); j := 0; for i := 1 to Length(S) do if (Ord(S[i]) > 31) or (S[i] in [#10, #13]) then begin inc(j); Result[j] := S[i]; end; SetLength(Result, j); Result:=Trim(StringReplace(Result,'"','´´',[rfReplaceAll])); end; |
AW: Steuerzeichen
Ich würde aus der Methode TMain.CleanText() dann noch eine normale Funktion machen,
da sie ja in keinen Zusammenhang mit der Klasse TMain steht. Namensvorschlag:
Delphi-Quellcode:
function RemoveControlChars(const S: String): String;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz