Arbeiten mit EAN13 als Zahl oder als String?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
NoCee
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?

Beitrag von NoCee »

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

Mathias
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?

Beitrag von Mathias »

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

marcov
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?

Beitrag von marcov »

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.

Mathias
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?

Beitrag von Mathias »

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

Nixsager
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?

Beitrag von Nixsager »

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?
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

marcov
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?

Beitrag von marcov »

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)

Socke
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?

Beitrag von Socke »

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.

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

NoCee
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?

Beitrag von NoCee »

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

Mathias
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?

Beitrag von Mathias »

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

marcov
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?

Beitrag von marcov »

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.

marcov
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?

Beitrag von marcov »

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.

Antworten