Dynamischer Daten Import / Export

datenbank

weil Einfach - produktiver ist
Mit der Freeware Version können bis zu 10.000 Datensätze verarbeitet werden!
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
Willkommen im FlowHeater Support Forum!

Hier werden Fragen zum Umgang mit dem FlowHeater beantwortet.

THEMA: Feldinhalte als ASCII + hexadezimal codier

Feldinhalte als ASCII + hexadezimal codier 3 Monate 3 Wochen her #2797

  • Sascha Heuser
  • Sascha Heusers Avatar
  • Offline
  • New Member
  • Beiträge: 15
Hallo zusammen,
ich habe das Vergnügen einen Matrixcode für eine Presseaussendung zu erstellen.
Erste Hürde die Felder zu separieren - erledigt
Zweite Hürde im Ergebnis muss das ein Feld als Hexadezimal ein anderes als ASCII codiert sein.
Dritte Hürde die hex muss mit Hochkommata und ASCII mit Anführungsstrichen eingeschlossen werden.

Ich sage Danke für eine hilfreiche Antwort B)
Sascha Heuser
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Feldinhalte als ASCII + hexadezimal codier 3 Monate 3 Wochen her #2800

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
Hallo Herr Heuser,

dazu benötigen Sie den .NET Script Heater und zwei kleine Skripte. Im Anhang finden Sie ein kleines Beispiel dazu. Um die Skripte zu verwenden müssen Sie jeweils einen (pro Skript) .NET Script Heater auf den Designer ziehen, per Doppelklick den Konfigurationsdialog öffnen und das vorhanden Skript mit diesem hier ersetzen. Das Skript erfordert einen Eingangsparameter mit der Zeichenfolgen die so ausgebeben werden soll!

Skript um Zeichenfolge als ASCII Werte auszugeben.
public object DoWork()
{
  if (InValues.Length != 1)
    throw new Exception("Es wird ein Eingangsparameter erwartet!");

  // Eingangsparameter holen
  string s = (string)InValues[0].GetString();

  StringBuilder sb = new StringBuilder();

  // ASCII Werte abrufen und im Byte Array speichern
  byte[] bytes = Encoding.ASCII.GetBytes(s);

  bool bFirst = true;

  // Alle ASCII Werte ausgeben
  foreach (byte b in bytes)
  {
    if (bFirst)
      bFirst = false;
    else
      sb.Append(" ");

    sb.Append("'");
    sb.Append(b.ToString());
    sb.Append("'");
  }

  // Rückgabe der so gebildeten Zeichnfolge
  return sb.ToString();     
}

Skript um Zeichenfolge als ASCII (HEX) Werte auszugeben
public object DoWork()
{
  if (InValues.Length != 1)
    throw new Exception("Es wird ein Eingangsparameter erwartet!");

  // Eingangsparameter holen
  string s = (string)InValues[0].GetString();

  StringBuilder sb = new StringBuilder();

  // ASCII Werte abrufen und im Byte Array speichern
  byte[] bytes = Encoding.ASCII.GetBytes(s);

  bool bFirst = true;

  // Alle ASCII Werte als HEX ausgeben
  foreach (byte b in bytes)
  {
    if (bFirst)
      bFirst = false;
    else
      sb.Append(" ");

    sb.Append("\"");
    sb.Append(b.ToString("X"));
    sb.Append("\"");
  }

  // Rückgabe der so gebildeten Zeichnfolge
  return sb.ToString();     
}


Dateianhang:

Dateiname: ascii-hex-code.zip
Dateigröße:2 KB
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Feldinhalte als ASCII + hexadezimal codier 3 Monate 3 Wochen her #2803

  • Sascha Heuser
  • Sascha Heusers Avatar
  • Offline
  • New Member
  • Beiträge: 15
Hallo Herr Stark,
das scheint tatsächlich die Lösung zu sein. Final fehlt noch die Freigabe vom Kunden bzw. der Post :-)
Vielen Dank für die schnelle Hilfe!!!!!
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Feldinhalte als ASCII + hexadezimal codier 3 Monate 3 Wochen her #2804

  • Sascha Heuser
  • Sascha Heusers Avatar
  • Offline
  • New Member
  • Beiträge: 15
Hallo Herr Stark,
wir sind auf dem richtigen Weg.
Allerdings gibt es noch eine kleine Hürde. Es geht im Augenblick noch um die hex Ausgabe.
Die einzelnen Arrays sollen in die Hochkommata und nicht die einzelnen Dateninhalte.
zB. '19 20' statt '19' '20'
Wenn Sie da nochmal ein Auge drauf haben?
Vielen Dank,
Sascha Heuser
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Feldinhalte als ASCII + hexadezimal codier 3 Monate 3 Wochen her #2807

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
hier die angepassten Skripte

Skript um Zeichenfolge als ASCII Werte auszugeben
public object DoWork()
{
  if (InValues.Length != 1)
    throw new Exception("Es wird ein Eingangsparameter erwartet!");

  // Eingangsparameter holen
  string s = (string)InValues[0].GetString();

  StringBuilder sb = new StringBuilder();
  sb.Append("'");

  // ASCII Werte abrufen und im Byte Array speichern
  byte[] bytes = Encoding.ASCII.GetBytes(s);

  bool bFirst = true;

  // Alle ASCII Werte ausgeben
  foreach (byte b in bytes)
  {
    if (bFirst)
      bFirst = false;
    else
      sb.Append(" ");
    
    sb.Append(b.ToString());    
  }

  sb.Append("'");

  // Rückgabe der so gebildeten Zeichnfolge
  return sb.ToString();     
}

Skript um Zeichenfolge als ASCII (HEX) Werte auszugeben
public object DoWork()
{
  if (InValues.Length != 1)
    throw new Exception("Es wird ein Eingangsparameter erwartet!");

  // Eingangsparameter holen
  string s = (string)InValues[0].GetString();

  StringBuilder sb = new StringBuilder();
  sb.Append("\"");

  // ASCII Werte abrufen und im Byte Array speichern
  byte[] bytes = Encoding.ASCII.GetBytes(s);

  bool bFirst = true;

  // Alle ASCII Werte als HEX ausgeben
  foreach (byte b in bytes)
  {
    if (bFirst)
      bFirst = false;
    else
      sb.Append(" ");
    
    sb.Append(b.ToString("X"));
  }

  sb.Append("\"");

  // Rückgabe der so gebildeten Zeichnfolge
  return sb.ToString();     
}
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Feldinhalte als ASCII + hexadezimal codier 3 Monate 3 Wochen her #2808

  • Sascha Heuser
  • Sascha Heusers Avatar
  • Offline
  • New Member
  • Beiträge: 15
Hallo Herr Stark,
ich habe Ihnen ein paar Screenshots per Email geschickt.
Hoffe das ist ok so.
Viele Grüße
Sascha Heuser
Letzte Änderung: 3 Monate 3 Wochen her von Sascha Heuser.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Feldinhalte als ASCII + hexadezimal codier 3 Monate 3 Wochen her #2809

  • Sascha Heuser
  • Sascha Heusers Avatar
  • Offline
  • New Member
  • Beiträge: 15
Hallo Herr Stark,
die Ausgabe als ASCII können wir streichen.
Hier eine genauere Beschreibung der Aufgabe. Ziel ist ein DataMatrix Barcode für die Deutsche Post zu generieren.
Die Werte werden hexadezimal codiert benötigt.
Der erzeugte Code setzt sich aus verschiedenen Teilen zusammen.
Die statischen Elemente werden als x-Value (bereit hex codiert) zugesteuert die variablen Elemente ziehe ich direkt und insgesamt oder als substring aus einem Feld der Quelle.
Für diese Werte müsste auch die Umwandlung in Hexadezimal erfolgen.

Ich habe für jedes Byte vorgegeben was drin stehen soll und für jedes [Feld] eine vorgegebene Länge.
zum Beispiel:
in f1bisf3 [PostUnternehmen] Länge 3 "DEA" = 444541
in f102 bis f131 [Name1] Länge 30, "Deutsche Post AG" = 446575747363686520506f73742041470000000000000000000000000000 aufgefüllt (mit 00 oder 20) auf 30 Byte
Am Ende verbinde ich diese mit dem Append Adapter und gebe den Inhalt aus.
Wenn ich das unverständlich oder unvollständig beschreiben habe bitte Bescheid sagen :-)
Im Anhang finden Sie die Beschreibung der DPAG, hier ist ab Seite 8 der relevante Inhalt zu finden.
Dazu einen Screenshot des FlowHeater Projekts.
Hier fehlen noch die Scrips für die Werte aus dem Feld Datamatrix Code.
Danke und viele Grüße
Sascha Heuser
Anhang:
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Feldinhalte als ASCII + hexadezimal codier 3 Monate 3 Wochen her #2812

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
Hallo Herr Heuser,

im Anhang finden Sie ein angepasstes Beispiel das das widerspiegelt was Sie im letzten Post geschrieben haben. Es werden einmal die einzelnen Zeichen (ASCII codiert) der Zeichenfolge „DEA“ hexadezimal formatiert ausgegeben sowie die Zeichenfolge „Deutsche Post AG“ ebenfalls in ASCII (HEX) auf 30 Bytes mit hex 0x00 aufgefüllt. Letzteres wird zusätzlich pro Byte mit einem Leerzeichen getrennt ausgegeben.

PS: Die 16 Seiten Doku habe ich mir nicht angesehen. Das kann und will ich hier im kostenlosen Support nicht leisten. Falls das nicht ist was Sie wollen/brauchen benötige ich für die weitere Lösungssuche, auf Basis des letzten Beispiels, eine genaue Beschreibung was Sie benötigen. Danke.

Dateianhang:

Dateiname: ascii-hex-code-3.zip
Dateigröße:3 KB
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Feldinhalte als ASCII + hexadezimal codier 3 Monate 3 Wochen her #2813

  • Sascha Heuser
  • Sascha Heusers Avatar
  • Offline
  • New Member
  • Beiträge: 15
Hallo Herr Stark,
das ist definitiv eine Klasse Support Leistung die Sie hier bieten!
Aus dem letzten Beispiel konnte ich die allermeisten der Konvertierungen durchführen.
Mit fehlt jetzt nur noch das Script welches dezimal in hexadezimal wandelt.
Zum Beispiel eine Postleitzahl:
50672 dezimal als hex 00C5F0
77815 dezimal als hex 012FF7
die führende 0 würde ich dann ggf. wieder über den Format Adapter, rechtsbündig auffüllen.
Herzlichen Dank für Ihre Hilfe,
viele Grüße
Sascha Heuser
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Feldinhalte als ASCII + hexadezimal codier 3 Monate 3 Wochen her #2815

  • Sascha Heuser
  • Sascha Heusers Avatar
  • Offline
  • New Member
  • Beiträge: 15
Hallo Herr Stark,
eben noch festgestellt, die Umlaute werden vom Script nicht korrekt in hex umgerechnet
Alles wird in 3F = ? codiert statt richtig:
Ä = c4, ä = e4, Ü = dc, ü = fc, Ö = d6, ö = f6, ß = df
dazu noch die richtige Umrechnung der Dezimalwerte wie zuvor geschrieben und wir sind am Ziel :-)
Danke und viele Grüße
Sascha Heuser
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Feldinhalte als ASCII + hexadezimal codier 3 Monate 3 Wochen her #2816

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
Hallo Herr Heuser,

um Dezimalzahlen als eine HEX formatierte Zeichenkette auszugeben benötigen Sie unten stehendes Skript, im Anhang finden Sie ein kleines Beispiel (dezimal-nach-hex-konvertieren.zip) wie es angewendet wird.

Zu den Umlauten
Im Ursprünglichen DOS ASCII Zeichensatz gab es keine deutschen Umlaute :-) Daher wird hier bei der Umwandlung immer der gleiche HEX Wert ausgegeben. Wenn Umlaute berücksichtigt werden sollen müssen Sie in den zur Verfügung gestellten Skripten die Zeile
byte[] bytes = Encoding.ASCII.GetBytes(s);

austauschen mit
byte[] bytes = Encoding.GetEncoding(850).GetBytes(s);

Hiermit wird dann zur Umwandlung die für Deutschland mit Umlauten aufgebohrte Variante des ASCII Zeichensatzes (Codepage 850) verwendet.

Allerdings sind die von Ihnen aufgezeigten HEX Werte für die Umlaute keine ASCII Werte sondern deuten auf eine Windows ANSI Codepage hin. Hier sind zwar die meisten normalen Zeichen (Buchstaben) gleich, bei Umlauten gibt es aber Abweichungen (siehe weiteres Beispiel "ascii-ansi-vergleich.zip" im Anhang ). Wenn Sie dies benötigen müssen Sie die Zeile wie folgt austauschen und sollten das richtige Ergebnis haben.

byte[] bytes = Encoding.Default.GetBytes(s);


Hier finden Sie weitere Infos zur Umwandlung von ASCII Zeichensatz nach ANSI
MS DOS ASCII CSV zu Windows ANSI FlatFile konvertieren
Windows ANSI FlatFile zu MS DOS ASCII CSV konvertieren

Dateianhang:

Dateiname: ascii-ansi...eich.zip
Dateigröße:2 KB


Dateianhang:

Dateiname: dezimal-na...eren.zip
Dateigröße:2 KB
gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Letzte Änderung: 3 Monate 3 Wochen her von FlowHeater-Team.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Feldinhalte als ASCII + hexadezimal codier 3 Monate 3 Wochen her #2817

  • Sascha Heuser
  • Sascha Heusers Avatar
  • Offline
  • New Member
  • Beiträge: 15
Hallo Herr Stark,
damit komm ich zurecht. An sich darf jetzt nichts mehr passieren.
Herzlichen Dank und ein schönes Wochenende!
Sascha Heuser
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Moderatoren: FlowHeater-Team
Ladezeit der Seite: 0.104 Sekunden