Arbeiten mit EAN13 als Zahl oder als String?
-
- Beiträge: 170
- Registriert: Do 3. Mär 2011, 21:34
- OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
- CPU-Target: Intel 32/64Bit, ARM9
- Wohnort: Ulm
Arbeiten mit EAN13 als Zahl oder als String?
Hallo zusammen,
ich möchte ein kleines Tool basteln mit dem ich relativ einfache Statistiken von gelesenen Barcodes
führen will. Der Barcode kommt über eine RS232 Schnittstelle als Asciifolge.
Jetzt habe ich noch keine einzige Zeile programmiert und versuche abzuwägen was besser ist
um mit den EAN Nummern zu arbeiten.
Da ein EAN13 konvertiert in eine Int64 paßt, hab ich die Wahl entweder alles mit Strings zu machen
oder beim Einlesen des Strings gleich in eine Int64 zu wandeln und im Programm mit Integer zu arbeiten.
Es wird im Programm z.B. bei jedem neuen Artikel eine Variable angelegt und die Anzahl gleicher Artikel gezählt.
Ebenfalls werden die Artikel der Reihe nach Sortiert usw.
Besonders performant muß das nicht sein auch ist der Speicherverbrauch irrelevant.
Ich möchte aber nicht mitten im Programm feststellen, daß ich schon an der ersten Kreuzung schon falsch abgebogen bin.
Vielleicht hätte ja einer von euch eine gute Entscheidungshilfe für mich.
Gruß
NoCee
ich möchte ein kleines Tool basteln mit dem ich relativ einfache Statistiken von gelesenen Barcodes
führen will. Der Barcode kommt über eine RS232 Schnittstelle als Asciifolge.
Jetzt habe ich noch keine einzige Zeile programmiert und versuche abzuwägen was besser ist
um mit den EAN Nummern zu arbeiten.
Da ein EAN13 konvertiert in eine Int64 paßt, hab ich die Wahl entweder alles mit Strings zu machen
oder beim Einlesen des Strings gleich in eine Int64 zu wandeln und im Programm mit Integer zu arbeiten.
Es wird im Programm z.B. bei jedem neuen Artikel eine Variable angelegt und die Anzahl gleicher Artikel gezählt.
Ebenfalls werden die Artikel der Reihe nach Sortiert usw.
Besonders performant muß das nicht sein auch ist der Speicherverbrauch irrelevant.
Ich möchte aber nicht mitten im Programm feststellen, daß ich schon an der ersten Kreuzung schon falsch abgebogen bin.
Vielleicht hätte ja einer von euch eine gute Entscheidungshilfe für mich.
Gruß
NoCee
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Arbeiten mit EAN13 als Zahl oder als String?
Ich würde dies alles mit String lösen und den Umweg über int64 vergessen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 1100
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Arbeiten mit EAN13 als Zahl oder als String?
Immer alle input normalizieren bis eine Zahl. Stringly typing ist für Amateurs.
Oder array of byte wenn's sein muss. Aber nie eine String Repräsentation von etwas was kein String ist.
Oder array of byte wenn's sein muss. Aber nie eine String Repräsentation von etwas was kein String ist.
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Arbeiten mit EAN13 als Zahl oder als String?
Oder array of byte wenn's sein muss. Aber nie eine String Repräsentation von etwas was kein String ist.
Da hast du recht, eine Array of Byte oder Char ist am besten, da die Länge immer gleich ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 168
- Registriert: Sa 8. Okt 2016, 08:38
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Polska
Re: Arbeiten mit EAN13 als Zahl oder als String?
Da hätte ich mal eine Frage.
Ist ein String nicht eigentlich ein Array vom Typ Char, außer das beim String das Array bei 1 beginnt, da auf 0 die Länge des Strings bzw. die Anzahl der Zeichen steht.
Das war ja ursprünglich bei Pascal so. Aber wie ist das heute?
Ist ein String nicht eigentlich ein Array vom Typ Char, außer das beim String das Array bei 1 beginnt, da auf 0 die Länge des Strings bzw. die Anzahl der Zeichen steht.
Das war ja ursprünglich bei Pascal so. Aber wie ist das heute?
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!
-
- Beiträge: 1100
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Arbeiten mit EAN13 als Zahl oder als String?
Nixsager hat geschrieben:Da hätte ich mal eine Frage.
Ist ein String nicht eigentlich ein Array vom Typ Char, außer das beim String das Array bei 1 beginnt, da auf 0 die Länge des Strings bzw. die Anzahl der Zeichen steht.
Nein, das ist nur bei TP Strings so, in eine der Spaeteren (Tp3?) Versionen eingebracht, bis D1. D2 (1996) hat ansistrings, wo die Länge abstrahiert ist (nur Zugang über Length() und Setlength)
TP hat den Typ von UCSD.
Das war ja ursprünglich bei Pascal so. Aber wie ist das heute?
Nein, ursprünglich nutzte Pascal wie C statische Arrays of char. Es gab mehrere Konventionen, aber auf Pascal war die populärsten Weise rückwärtse Padding mit Leerzeichen glaube ich. (bis 1980 UCSD Strings Konzepiert würde)
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Arbeiten mit EAN13 als Zahl oder als String?
Da eine GTIN auch mit Nullen beginnen darf, wäre ein Integer grundsätzlich falsch.
Ich schlage vor, den Grundtyp des Arrays auf den Gültigkeitsbereich einzuschränken.
Ich schlage vor, den Grundtyp des Arrays auf den Gültigkeitsbereich einzuschränken.
Code: Alles auswählen
// als Zeichen
TGTINDigitC = '0'..'9';
TGTINC = array[0..13] of TGTINDigitC;
// nummerische Repräsentation
TGITNDigitN = 0..9;
TGTINN = array[0..13] of TGITNDigitN;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 170
- Registriert: Do 3. Mär 2011, 21:34
- OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
- CPU-Target: Intel 32/64Bit, ARM9
- Wohnort: Ulm
Re: Arbeiten mit EAN13 als Zahl oder als String?
Danke für die Antworten.
Daß ein gelesener Code mit Nullen beginnen kann hab ich noch gar nicht betrachtet.
Beim Lesen der Antworten ist mir dann aufgefallen, daß mir gar nicht klar ist,
wie man Zahlen in Strings oder wie vorgeschlagen in Arrays dem Zahlenwert nach so einfach
sortieren kann (vergleichen auf > oder <). Wenn ich das in Integer mache, geht das
problemlos auch wenn da führende Nullen stehen. Die Stellenzahl ist ja fix.
Geht ein Vergleich von 2 Zahlen in Stringvariablen oder Arrays ohne dann sowieso in Integer wandeln zu müssen?
Sonst hätte sich die Frage ja gleich erledigt.
Gruß
NoCee
Daß ein gelesener Code mit Nullen beginnen kann hab ich noch gar nicht betrachtet.
Beim Lesen der Antworten ist mir dann aufgefallen, daß mir gar nicht klar ist,
wie man Zahlen in Strings oder wie vorgeschlagen in Arrays dem Zahlenwert nach so einfach
sortieren kann (vergleichen auf > oder <). Wenn ich das in Integer mache, geht das
problemlos auch wenn da führende Nullen stehen. Die Stellenzahl ist ja fix.
Geht ein Vergleich von 2 Zahlen in Stringvariablen oder Arrays ohne dann sowieso in Integer wandeln zu müssen?
Sonst hätte sich die Frage ja gleich erledigt.
Gruß
NoCee
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Arbeiten mit EAN13 als Zahl oder als String?
Strings kann man sortieren. Vieleicht kannst du deine Codes in eine TStringList packen, somit geht das sortieren sogar sehr einfach.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 1100
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Arbeiten mit EAN13 als Zahl oder als String?
Socke hat geschrieben:Da eine GTIN auch mit Nullen beginnen darf, wäre ein Integer grundsätzlich falsch.
Dann ein Int64 und ein Enum fuer die 5 unterschiedliche Typen (GTIN 8,12,13,14) und eine Array mit Zahl der Dezimalen für Druckzwecken.
Einfach vergleichen (GTIN.typ=gtin2.typ) und (gtin.code=gtin2.code) usw.
-
- Beiträge: 1100
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Arbeiten mit EAN13 als Zahl oder als String?
Mathias hat geschrieben:Strings kann man sortieren. Vieleicht kannst du deine Codes in eine TStringList packen, somit geht das sortieren sogar sehr einfach.
Integers kann man auch sortieren und viel schneller.