Delphi-PRAXiS

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.

Nersgatt 12. Jan 2009 10:42

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Wenn Du den Text mit OEMToChar behandeln lässt, dann passen wenigstens die Umlaute.
Was sollte denn nach "ABSCHALT." stehen?

Gruß,
Jens

Jens Hartmann 12. Jan 2009 10:47

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
So sollte der Text aussehen

ABSCHALT. UEE

also eigentlich nur das Sonderzeichen weg.

Ansonsten bin ich wie immer von den Delphi-Foren begeistert.

Ihr seid ein bißchen besser wie Weltklasse.

MFG

Jens

Nersgatt 12. Jan 2009 10:56

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Zitat:

Zitat von Jens Hartmann
So sollte der Text aussehen

ABSCHALT. UEE

also eigentlich nur das Sonderzeichen weg.

Dann würde ich es evtl. einfach nur rausfiltern.

Gruß,
Jens

Jens Hartmann 12. Jan 2009 11:06

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Ja, das mit dem Filtern denke ich auch,

aber wie mache ich das, ohne mir andere ä´s zu löschen etc.

Klaus01 12. Jan 2009 11:08

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Du könntest schauen was nach dem ä kommt.
Aber ich denke du bekommst in erster Linie keine richtigen Umlaute
von der Schnittstelle. Diese sind erst korrekt wenn Du die Konvertierung durchgeführt hast.

Grüße
Klaus

Nersgatt 12. Jan 2009 11:30

Re: Steuerzeichen beim einlesen von der COM-Schnittstelle
 
Zitat:

Zitat von Jens Hartmann
Ja, das mit dem Filtern denke ich auch,

aber wie mache ich das, ohne mir andere ä´s zu löschen etc.

Man könnte z.B. "ABSCHALT. ä" durch "ABSCHALT. " ersetzen.

Gruß,
Jens

Jens Hartmann 13. Jan 2009 09:54

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

habe den Tip von user0815 umgesetzt und es Funktioniert auch wunderbar,

Leider habe ich nur noch eine Problem, da ich die Funktion ja automatisch ausführen lasse über den Eingang von Daten auf der COM-Schnittstelle, wird der Vorgang immer wiederholt und das Ergebnis verdoppelt.

Ich habe schon Probiert am Ende SL.Clear durchzuführen, jedoch ohnen Erfolg.

Das Ergebnis sieht jetzt ungefähr so aus.

1. Ausführung 1. Zeile: ÜEE ABSCHALT.
2. Zeile: ÜEE ABSCHALT.

2. Ausführung 1. Zeile: ÜEE ABSCHALT.
2. Zeile: ÜEE ABSCHALT.
3. Zeile: ÜEE ABSCHALT.
4. Zeile: ÜEE ABSCHALT.

3. Ausführung 1. Zeile: ÜEE ABSCHALT.
2. Zeile: ÜEE ABSCHALT.
3. Zeile: ÜEE ABSCHALT.
4. Zeile: ÜEE ABSCHALT.
5. Zeile: ÜEE ABSCHALT.
6. Zeile: ÜEE ABSCHALT.
7. Zeile: ÜEE ABSCHALT.
8. Zeile: ÜEE ABSCHALT.

usw.

eigendlich sollte nur die 1. Ausführung mit der 1. Zeile gedruckt werden, die Zweite Zeile kommt ja erst bei einem neuen Druckereignis.

Vieleicht kannst du mir ja sagen, wo mein gedanklicher Fehler noch liegt.

MFG

Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 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