Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String mit erweitertem ASCII Zeichensatz verarbeiten (https://www.delphipraxis.net/63218-string-mit-erweitertem-ascii-zeichensatz-verarbeiten.html)

Marc Greene 15. Feb 2006 15:09


String mit erweitertem ASCII Zeichensatz verarbeiten
 
Schönen guten Tag!

Ich habe hier einen handelsüblichen USB-Barcodescanner, der einen Barcode mit erweitertem ASCII-Zeichensatz liefert (EAN-128). Dazu habe ich mir eine Testanwendung mit Memofeld gebaut und einen Button, der den Scan in die Variable s schaufeln soll. Nach Scannen des Barcodes landet das Ergebnis im Editfeld und wird nach Klick auf einen Button in die Variabnle s befördert

Delphi-Quellcode:
s := mmScan.Text
Der Barcode enthält nun aber nicht nur Zahlen, sondern z.B. einen Group Separator D1 (Hex). Der wird natürlich im Edit-Feld nicht angezeigt und auch nicht in die Variable s geschrieben. Auch die folgende Funktion hilft da erwartungsgemäß nicht weiter

Delphi-Quellcode:
function WStrToHex(SourceStr: WideString): WideString;
var
  hexstr: string;
  i : integer;
begin
  result := '';
  hexstr := '';
  for i := 1 to Length(SourceStr) do
    hexstr := hexstr + ' ' +IntToHex(Word(SourceStr[i]), 2);
    Result := hexstr;
end;
:gruebel: Wie komme ich nun an mein D1 (hex) ran?

Gruß aus dem trüben Braunschweig
Carsten

FAlter 15. Feb 2006 15:15

Re: String mit erweitertem ASCII Zeichensatz verarbeiten
 
Hi,

ich weiß ja nicht was dein Delphi für Strings hat, aber bei mir ist String ein AnsiString, der den erwetierten ASCII-Zeichensatz (oft als ANSI bezeichnet, wenn auch nicht ganz korrekt), speichern kann.

Delphi-Quellcode:
MyString := '12345'$#D1'7890';
MyIndex := Pos(#$D1, MyString);
if MyIndex = 6 then
  ShowMessage('Hurra!');
Mfg
FAlter

Marc Greene 15. Feb 2006 15:40

Re: String mit erweitertem ASCII Zeichensatz verarbeiten
 
[quote]

Richtig, das mit ANSI und ASCII! Schulligung :drunken:

Jedoch bekomme ich das Ergebnis aus dem Scan im Memofeld nicht vollständig zu sehen. Statt "12345[D1]67890" steht da nur "1234567890". Ich brauche aber die GANZE Wahrheit...

:gruebel:

Gruß, Carsten

retnyg 15. Feb 2006 15:48

Re: String mit erweitertem ASCII Zeichensatz verarbeiten
 
Delphi-Quellcode:
memo1.text := stringreplace(mmScan.Text,#$D1,'[D1]',[rfReplaceAll]);

Marc Greene 16. Feb 2006 11:28

Re: String mit erweitertem ASCII Zeichensatz verarbeiten
 
eine Nacht später...

ich komme Schritt für Schritt weiter...

Das Problem ist offensichtlich die falsche Komponente, die ich verwende. Das Memo- wie auch das Editfeld schluckt einfach das vom Scanner übertragene 1Dh, so dass auch mit

Delphi-Quellcode:
memo1.text := stringreplace(mmScan.Text, #$1D, '[1D]',[rfReplaceAll]);
das gewünschte Zeichen nicht ersetzt werden kann - weil es einfach nicht im Memo steht.

Scanne ich direkt in einen Hex-Editor, wie z.B Notepad2 von http://www.flos-freeware.ch
und kopiere ich dann die Zeile in das Memofeld meiner Anwendung, funktioniert stringreplace einwandfrei.

Gibt es ein Hexeditfeld oder -Memo, das ich in Delphi verwenden kann?

Ich leg' mich jetzt erstmal wieder hin :cyclops:

Gruß, MG

retnyg 16. Feb 2006 16:57

Re: String mit erweitertem ASCII Zeichensatz verarbeiten
 
ich bin davon ausgegangen, das mmScan.text dein scan-objekt ist...
wie wäre es, wenn du den text der vom scanner kommt einfach in einem string speicherst ? ;)

FAlter 17. Feb 2006 19:21

Re: String mit erweitertem ASCII Zeichensatz verarbeiten
 
Hi,

es kann durchaus sein, dass Win-Komponenten Strings abändern. Bei Memo1.Lines.Text := a und später b := Memo1.Lines.Text bekomme ich nur dann a=b, wenn WordWrap auf false gesetzt ist, sonst enthält b die automatischen Zeilenumbruche. Ich gehe mal davon aus, dass es mit einigen Sonderzeichen ähnlich ist.

Daher: ersetze deinen Text schon, bevor du ihn an eine Komponente sendest.

Mfg
FAlter

Marc Greene 18. Feb 2006 12:33

Re: String mit erweitertem ASCII Zeichensatz verarbeiten
 
Moin,

Jepp, das isses! Hätte ich einen seriellen Scanner, würde ich den gesendeten Datenstrom auswerten.

Da das ganze auf einem Handheld mit integriertem Scanner läuft, muss ich ein OnKeyDown-Ereignis (o.ä.) in der Komponente auswerten.

Vielen Dank für das Setzen auf's richtige Gleis! :thumb:

Angenehmes Wochenende!
MG


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