Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Steuerzeichen beim einlesen von der COM-Schnittstelle (https://www.delphipraxis.net/127366-steuerzeichen-beim-einlesen-von-der-com-schnittstelle.html)

Jens Hartmann 12. Jan 2009 09:21


Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

ich habe ein Programm geschrieben, mit dem ich aus einer Brandmeldeanlage den Ereignisspeicher als Textdatei drucken kann.

ich lese die Daten direkt von der COM-Schnittstelle ein und gebe sie in einem Memo aus.

Leider hat die Datei Steuerzeichen am Anfang jeder Zeile und bei Umlauten. Wie kann ich das ändern.

(siehe Anhang)

MFG

Jens :wall:

Klaus01 12. Jan 2009 09:29

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Guten Morgen,

für die vorderen und hinteren Steuerzeichen würde sich trim(s:String) anbieten.

Die Umlaute willst Du sie nur rauswerfen oder durch darstellbare Zeichen ersetzen.
Zum Prüfen ob ein Zeichen ein alphanumerisches Zeichen oder Steuerzeichen ist,
kannst Du isCharAlpha(c:char) verwenden.

Grüße
Klaus

Nersgatt 12. Jan 2009 09:29

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Schau mal nach, in welchem Format die Anlage die Daten liefert. Wenn sie z.B. in Ascii liefert, musst es nach ANSI konvertieren, damit Dein Programm es richtig anzeigt. Vielleicht die Daten mal in einem Hexeditor anschauen.

SirThornberry 12. Jan 2009 09:30

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Wenn dir die Steuerzeichen nicht gefallen kannst du sie einfach ersetzen (zum Beispiel mit StringReplace)

Jens Hartmann 12. Jan 2009 09:54

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Sorry,

vieleicht stehe ich mir momentan ein bißchen auf der Leitung,

wie kann ich den feststellen ob das Format (ich vermute) ASCII ist.

MFG

Jens

Nersgatt 12. Jan 2009 10:00

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Speicher doch mal einen Auszug aus der Datei als txt ab und häng sie hier an.

Jens Hartmann 12. Jan 2009 10:05

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier der Anhang,

Die Datei als txt

Nersgatt 12. Jan 2009 10:24

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Also am Anfang einer Zeile steht immer #13#10. Das ist ein Linefeed + Zeilenumbruch. Ist unter Windows eigentlich Standard. Ich vermute, dass das Memofeld nur ein Zeichen davon als Zeilenumbruch interpretiert.
Für die Umlaute: Ich denke, es wird die Codepage 852 benutzt: http://de.wikipedia.org/wiki/Codepage_852
Du musst also eine Funktion suchen, die Dir die Codepage umrechnet.

Gruß,
Jens

Klaus01 12. Jan 2009 10:24

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Hallo,

die Schnittstelle sendet vielleicht mit CodePage 437.
hexWert 9A -> Ü

41 6C 6C 65 20 9A 62 65 72 74 72 61 67 75 6E 67 73 65 69 6E 72 2E 0D 0D
Alle šbertragungseinr

Die Zeichen am Zeilenanfang sind 0D0A.

Grüße
Klaus

user0815 12. Jan 2009 10:28

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Die Text Datei in Memo1 kopiert:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sl : TStringList;
  i : Integer;
begin
  sl := TStringList.Create;

  try
    sl.AddStrings(Memo1.Lines);

    for i := 0 to sl.Count -1 do
    begin
      sl[i] := trim(StringReplace(sl[i], #$D, '', [rfReplaceAll]));
      sl[i] := StringReplace(sl[i], #129, 'ü', [rfReplaceAll]);
      sl[i] := StringReplace(sl[i], #132, 'ä', [rfReplaceAll]);
      sl[i] := StringReplace(sl[i], #142, 'Ä', [rfReplaceAll]);
      sl[i] := StringReplace(sl[i], #148, 'ö', [rfReplaceAll]);
      sl[i] := StringReplace(sl[i], #153, 'Ö', [rfReplaceAll]);
      sl[i] := StringReplace(sl[i], #154, 'Ü', [rfReplaceAll]);

      sl[i] := StringReplace(sl[i], #10#13, ' ', [rfReplaceAll]);

      if sl[i] <> ''
       then Memo2.Lines.Append(SL[i]);
    end;

  finally
    sl.Free;
  end;
end;
Ausgabe:

102 01.02.00 21:05 ID: 2
Codebetrieb EIN
Codebetrieb
103 01.02.00 21:05
ABSCHALT. äUEE
Alle Übertragungseinr.
104 01.02.00 21:05
ABSCHALT. äSG
Alle Steuergruppen
105 01.02.00 21:05
ABSCHALT. äZ-TBL

usw.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 Uhr.
Seite 1 von 2  1 2      

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