- Beiträge: 132
Dezimalwerte in Hexadezimalwerte
- Ralf Birk
- Autor
- Offline
- Benutzer
Weniger
Mehr
8 Jahre 3 Monate her #2837
von Ralf Birk
Dezimalwerte in Hexadezimalwerte wurde erstellt von Ralf Birk
Hallo Herr Stark,
mit Interesse habe habe ich letzte Woche den Thread zun Konvertierung von Ansi in Hex gelesen.
Ich habe seit längerem eine Aufgabe am laufen, die eine ähnliche Aufgabenstellung hat.
In einem Readfeld sind 126 Zeihen (Dezimalcodes zu 42 Stellen). Diese brauche ich im Write als Hexadezimalcode.
Ich habe mir vor einem Jahr folgende Lösung zusammengebastelt:
1. Mit Substring die 42 Stellen an den entsprechenden Stellen auslesen.
2. Mit Replace aus einer erstellten Tabelle (im Anhang) die Dec.Werte in Hex.-Werte ersetzen.
3. Mit Append wieder zusammenfügen und in eine Writespalte schreiben.
Bei zum Teil über 1 Mio. Datensätze ist dies z.T. eine Zeitraubende Angelegenheit.
Liese sich dies nicht auch über ein kurzes Netscript einfacher erledigen?
Danke schon einmal für Ihre Antwort
Ralf B.
mit Interesse habe habe ich letzte Woche den Thread zun Konvertierung von Ansi in Hex gelesen.
Ich habe seit längerem eine Aufgabe am laufen, die eine ähnliche Aufgabenstellung hat.
In einem Readfeld sind 126 Zeihen (Dezimalcodes zu 42 Stellen). Diese brauche ich im Write als Hexadezimalcode.
Ich habe mir vor einem Jahr folgende Lösung zusammengebastelt:
1. Mit Substring die 42 Stellen an den entsprechenden Stellen auslesen.
2. Mit Replace aus einer erstellten Tabelle (im Anhang) die Dec.Werte in Hex.-Werte ersetzen.
3. Mit Append wieder zusammenfügen und in eine Writespalte schreiben.
Bei zum Teil über 1 Mio. Datensätze ist dies z.T. eine Zeitraubende Angelegenheit.
Liese sich dies nicht auch über ein kurzes Netscript einfacher erledigen?
Danke schon einmal für Ihre Antwort
Ralf B.
Anhänge:
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
8 Jahre 2 Monate her - 8 Jahre 2 Monate her #2838
von FlowHeater-Team
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.
FlowHeater-Team antwortete auf Dezimalwerte in Hexadezimalwerte
Hallo Herr Birk,
ja, mit dem .NET Script Heater geht „fast“ alles
Ich habe Ihnen mal ein kleines Beispiel Skript erstellt, das aus dem Feldinhalt alle 3 Zeichen den vorhandenen Dezimalwert in einen als Hexadezimal formatierte Zeichenkette wieder ausgibt. Das Sie geschrieben haben, dass In Ihrem Feldinhalt auch Zeilenumbrüche vorhanden sein können, unterstützt das Skript das auch und gibt in dem Fall natürlich auch die vorhanden Zeilenumbrüche wieder mit aus.
Beispiel Skript
Im Anhang finden Sie das Beispiel dazu.
PS: Sie können den Wust an Heatern und Verbindungen recht einfach und übersichtlich über Layer anordnen. Gehen Sie z.B. mal auf dem String Append Heater mit der rechten Maustaste und wählen aus dem Kontextmenü den Eintrag „Auf neuen Layer verschieben“ und schauen Sie sich an was passiert
ja, mit dem .NET Script Heater geht „fast“ alles
Ich habe Ihnen mal ein kleines Beispiel Skript erstellt, das aus dem Feldinhalt alle 3 Zeichen den vorhandenen Dezimalwert in einen als Hexadezimal formatierte Zeichenkette wieder ausgibt. Das Sie geschrieben haben, dass In Ihrem Feldinhalt auch Zeilenumbrüche vorhanden sein können, unterstützt das Skript das auch und gibt in dem Fall natürlich auch die vorhanden Zeilenumbrüche wieder mit aus.
Beispiel Skript
Code:
public object DoWork()
{
if (InValues.Length != 1)
throw new Exception("1 Eingangsparameter erwartet!");
string content = (string)InValues[0].GetString();
StringBuilder sb = new StringBuilder();
// über alle Zeilen des Feldinhaltes
foreach(string line in content.Split('\n'))
{
// evtl. Zeilenumbruch glätten (Windows/Unix)
string s = line.Replace("\r", "");
// falls mehrere Zeilen im Feldinhalt pro Zeile wieder einen Zeilenumbruch ausgeben.
if (sb.Length != 0)
sb.Append(Environment.NewLine);
int pos = 0;
while (pos < s.Length)
{
string dec = String.Empty;
// die nächste 3 Stellen bzw. den Rest aus der Zeichenkette holen
if (s.Length - pos >= 3)
dec = s.Substring(pos, 3);
else
dec = s.Substring(pos);
// Zeichenfolge in eine Zahl umwandeln
int i = Convert.ToInt32(dec);
// Zahl als HEX formatierte Zeichenkette ausgeben.
string hex = i.ToString("X");
// evtl. führende 0 an den HEX Wert anfügen
sb.Append(hex.PadLeft(2, '0'));
// pos um drei stellen weiter setzen
pos += 3;
}
}
// Hexadezimal formatierte Zeichenkette zurückgeben
return sb.ToString();
}
Im Anhang finden Sie das Beispiel dazu.
PS: Sie können den Wust an Heatern und Verbindungen recht einfach und übersichtlich über Layer anordnen. Gehen Sie z.B. mal auf dem String Append Heater mit der rechten Maustaste und wählen aus dem Kontextmenü den Eintrag „Auf neuen Layer verschieben“ und schauen Sie sich an was passiert
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.
Anhänge:
Letzte Änderung: 8 Jahre 2 Monate her von FlowHeater-Team.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Ralf Birk
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 132
8 Jahre 2 Monate her #2839
von Ralf Birk
Ralf Birk antwortete auf Dezimalwerte in Hexadezimalwerte
Hallo Herr Stark,
das ganze sieht in der Tat relativ unübersichtlich aus, ist aber schon ca 2 Jahre alt und stammt noch aus meinen ersten Versuchen mit dem Flowheater.
Mittlerweile verwende ich zur Übersichtlichkeit natürlich Layers.
Ich werde versuchen, ob ich am Wochenende dazu komme, den .fhd auf Ihre Lösung umzustellen.
Vielen Dank nochmal und ein sonniges Wochenende
Gruß Ralf B.
das ganze sieht in der Tat relativ unübersichtlich aus, ist aber schon ca 2 Jahre alt und stammt noch aus meinen ersten Versuchen mit dem Flowheater.
Mittlerweile verwende ich zur Übersichtlichkeit natürlich Layers.
Ich werde versuchen, ob ich am Wochenende dazu komme, den .fhd auf Ihre Lösung umzustellen.
Vielen Dank nochmal und ein sonniges Wochenende
Gruß Ralf B.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 0.270 Sekunden