AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Steuerzeichen

Ein Thema von Guido R. · begonnen am 2. Sep 2011 · letzter Beitrag vom 2. Sep 2011
Antwort Antwort
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
137 Beiträge
 
Delphi 11 Alexandria
 
#1

Steuerzeichen

  Alt 2. Sep 2011, 13:46
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:
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;
Auch der direkte Aufruf mit
Delphi-Quellcode:
 {...}
 S:=StringReplace(S,CHAR(#0),'',[rfReplaceAll]);
 S:=StringReplace(S,CHAR(#4),'',[rfReplaceAll]);
 S:=StringReplace(S,CHAR(#20),'',[rfReplaceAll]);
 {...}
bzw.
Delphi-Quellcode:
 {...}
 S:=StringReplace(S,#0,'',[rfReplaceAll]);
 S:=StringReplace(S,#4,'',[rfReplaceAll]);
 S:=StringReplace(S,#20,'',[rfReplaceAll]);
 {...}
erbrachte nicht das gewünschte Ergebnis.

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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Steuerzeichen

  Alt 2. Sep 2011, 13:55
Es ist zwar kein großer Unterschied zu Deiner 1. Version, aber versuch doch mal (ungetestet):
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);
end;
[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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH ( 2. Sep 2011 um 14:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
137 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Steuerzeichen

  Alt 2. Sep 2011, 14:32
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

S := ParadoxTable.FieldByName('BLOEDESMEMO').AsString;

Ich probiere Deine Methode gleich mal aus...

Gruß
Guido R.
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
137 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Steuerzeichen

  Alt 2. Sep 2011, 17:14
Ich hab Deinen Vorschlag leicht abgewandelt, aber so funktioniert es tatsächlich ...

Delphi-Quellcode:
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;
Thx !
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Steuerzeichen

  Alt 2. Sep 2011, 17:24
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Steuerzeichen

  Alt 2. Sep 2011, 17:36
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Steuerzeichen

  Alt 2. Sep 2011, 19:52
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:
function RemoveControlChars(const S: String): String;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz