![]() |
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:
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
s := mmScan.Text
Delphi-Quellcode:
:gruebel: Wie komme ich nun an mein D1 (hex) ran?
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; Gruß aus dem trüben Braunschweig Carsten |
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:
Mfg
MyString := '12345'$#D1'7890';
MyIndex := Pos(#$D1, MyString); if MyIndex = 6 then ShowMessage('Hurra!'); FAlter |
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 |
Re: String mit erweitertem ASCII Zeichensatz verarbeiten
Delphi-Quellcode:
memo1.text := stringreplace(mmScan.Text,#$D1,'[D1]',[rfReplaceAll]);
|
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:
das gewünschte Zeichen nicht ersetzt werden kann - weil es einfach nicht im Memo steht.
memo1.text := stringreplace(mmScan.Text, #$1D, '[1D]',[rfReplaceAll]);
Scanne ich direkt in einen Hex-Editor, wie z.B Notepad2 von ![]() 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 |
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 ? ;) |
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 |
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 01:44 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 by Thomas Breitkreuz