|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
RichardSeifensieder
Anmeldungsdatum: 04.03.2020 Beiträge: 3
|
Verfasst am: 04.03.2020, 10:38 Titel: EAN Check-Digit ergänzen |
|
|
Hallo, für eine CSV-Exportierte Datei brauche ich ein Programm, welches alle 12-stelligen EAN-Ziffern für die Barcode-Erzeugung ergänzt um die 13. Ziffer, den sogenannten Check-Digit. Dabei sind so 5000 bis 7000 Datensätze (Zeilen) kommagetrennte Felder, möglichst flott zu verarbeiten.
Für Excel heisst die Formel
=C4&(ROUNDUP(((MID(C4,2,1)+MID(C4,4,1)
+MID(C4,6,1)+MID(C4,8,1)+MID(C4,10,1)+MID(C4,12,1))*3)
+(MID(C4,1,1)+MID(C4,3,1)+MID(C4,5,1)+MID(C4,7,1)
+MID(C4,9,1)+MID(C4,11,1)),-1)-(((MID(C4,2,1)+MID(C4,4,1)
+MID(C4,6,1)+MID(C4,8,1)+MID(C4,10,1)+MID(C4,12,1))*3)
+(MID(C4,1,1)+MID(C4,3,1)+MID(C4,5,1)+MID(C4,7,1)
+MID(C4,9,1)+MID(C4,11,1)))).
Wenn es glatt gehen soll, findet das Programm in jeder Zeile an definierter Stellen die 12 Ziffern, und schreibt an dieselbe oder eine andere Stelle die auf 13 STellen aufgebaute Zahlenfolge.
Diese Roundup-Funktion habe ich auf FB nicht gefunden. Wenn das garnicht mit FB geht, womit dann? Möglichst automatisch, per Batch-Datei aufgerufen.
Danke für Hilfe. Funktionierende Vorschläge honoriere ich auch gerne! |
|
Nach oben |
|
|
HorstD
Anmeldungsdatum: 01.11.2007 Beiträge: 107
|
Verfasst am: 04.03.2020, 13:34 Titel: |
|
|
Zeig mal ein paar Zeilen der csv.
Hier ein Code zur Berechnung der Prüfziffer:
Code: |
DIM i AS INTEGER
DIM z AS INTEGER
DIM pruefziffer AS STRING
DIM c4 AS STRING
c4 = "400330101839"
c4 = TRIM$(c4)
FOR i = 1 TO 11 STEP 2
z = z + VAL(MID$(c4,i,1))
NEXT
FOR i = 2 TO 12 STEP 2
z= z +VAL(MID$(c4,i,1)) * 3
NEXT
PRINT STR$(z)
IF z MOD 10 = 0 THEN
pruefziffer = TRIM$(STR$(z))
ELSE
pruefziffer = TRIM$(STR$(10 -(z MOD 10)))
END IF
PRINT pruefziffer
PRINT "EAN 13 = "; c4 & pruefziffer
|
|
|
Nach oben |
|
|
RichardSeifensieder
Anmeldungsdatum: 04.03.2020 Beiträge: 3
|
Verfasst am: 04.03.2020, 16:04 Titel: Beispieldaten |
|
|
Sowas ist das: die vielen Kommas/leeren Felder werden beim Export nie bedient, in eines davob könnte man den neuen Inhalt schreiben. Die EANs sind ja zu erkennen am reinen 12stelligen Ziffercode:
"Garucha Matcha 3","P104009029","Garucha Matcha 30 g",",N,,,,,,,,",11.5,401983809029,",,N,Y,,,,Y,,,"
"Gem³setofu 200 g","P106112845","Gem³setofu 200 g",",N,,,,,,,,",2.45,402995600020,",,N,Y,,,,Y,,,"
"Gew³rzadventkale","P205000703","Gew³rzadventkalender (24 Beutel) 116 g",",N,,,,,,,,",12.99,900414500703,",,N,Y,,,,Y,,,"
"Gr³ner Smoothiew","P152000994","Gr³ner Smoothiew³rfel 70 g",",N,,,,,,,,",9.99,403850700457,",,N,Y,,,,Y,,,"
"Gula Java Brut K","P229064283","Gula Java Brut Kokosbl³ten Zucker 310 g",",N,,,,,,,,",8.95,542501364283,",,N,Y,,,,Y,,,"
"Haferdrink 1 ","P189003209","Haferdrink 1 l",",N,,,,,,,,",2.09,541118811625,",,N,Y,,,,Y,,,"
"Hanfdrink Zucker","P104010296","Hanfdrink Zuckerfrei Calcium 1 l",",N,,,,,,,,",2.79,842853223011,",,N,Y,,,,Y,,,"
"Hefe Bio 9 g","P104211604","Hefe Bio 9 g",",N,,,,,,,,",.69,400539411604,",,N,Y,,,,Y,,,"
"Heisser Hirsch F","P105000038","Heisser Hirsch Familienpunsch 750 ml",",N,,,,,,,,",2.99,426016624024,",,N,Y,,,,Y,,,"
"Holztray Lippenb","P186093286","Holztray Lippenbalsam leer 1 St.",",N,,,,,,,,",0,408690093286,",,N,Y,,,,Y,,,"
"Jog.Beeren-Mix 4","P157001168","Jog.Beeren-Mix 400 g",",N,,,,,,,,",1.09,401031801168,",,N,Y,,,,Y,,,"
"Jog.Erdbeere 150","P115001735","Jog.Erdbeere 150 g",",N,,,,,,,,",1.09,410406002725,",,N,Y,,,,Y,,,"
"Jogh.Heidelbeere","P157001053","Jogh.Heidelbeere 150 G",",N,,,,,,,,",.79,401031801053,",,N,Y,,,,Y,,,"
"Jungpflanzen Tom","W123005","Jungpflanzen Tomaten - Mix ",",N,,,,,,,,",0,248,",,N,Y,,,,Y,,,"
"K÷nigskõse Keil ","P223038013","K÷nigskõse Keil 150 g",",N,,,,,,,,",3.48,402833238013,",,N,Y,,,,Y,,,"
"Kakaobutter 100 ","P214000931","Kakaobutter 100 % 80 g",",N,,,,,,,,",2.98,1240103,",,N,Y,,,,Y,,,"
"Kala Namak Schwe","P213004062","Kala Namak Schwefelsalz 100 g",",N,,,,,,,,",2.19,401143704062,",,N,Y,,,,Y,,,"
Am besten wäre, das Basic-Teil würde die Datei öffnen, die Sache durchspielen und mit neuem Namen abspeichern. |
|
Nach oben |
|
|
HorstD
Anmeldungsdatum: 01.11.2007 Beiträge: 107
|
Verfasst am: 04.03.2020, 20:54 Titel: |
|
|
Ich habe einen VBS code erstellt.
Einfach unter einem beliebigen Namen z. B. test.vbs speichern
Wichtig:
Die csv-Datei muss gleich in der ersten Zeile mit den Daten anfangen.
Zeilen mit EAN -Nummern <> 12 werden in einer Fehler.txt gespeichert.
Zeilen, die nicht deinem Beispiel entsprechen führen zum Crash!
Code: |
Option Explicit
Dim FSO, File, FileNeu, FileFehler
Dim Datei, DateiNeu, FehlerDat, Pfad
Dim t, tmp, z, i, pruef,x
Datei = "alt.csv" '<--- anpassen
DateiNeu = "Neu.csv" '<--- anpassen
FehlerDat = "Fehler.txt"
Pfad = "d:\###\" '<--- dein Pfad "\" am Ende!
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.OpenTextFile(Pfad & datei, 1)
Set FileNeu = FSO.OpenTextFile(Pfad & DateiNeu, 2, True)
Set FileFehler = FSO.OpenTextFile(Pfad & FehlerDat, 2, True)
Do Until File.AtEndOfStream
x= x+1
t = File.ReadLine
If Len(t) Then
tmp = Split(t,",")
tmp(14)=Trim(tmp(14))
If Len(tmp(14)) <> 12 Then
FileFehler.WriteLine "Zeile " & CStr(x)
FileFehler.writeline Join(tmp, ",")
Else
For i = 1 To 11 Step 2
z = z + CInt(Mid(tmp(14),i,1))
Next
For i = 2 To 12 Step 2
z= z + CInt(Mid(tmp(14),i,1)) * 3
Next
If z MOD 10 = 0 Then
pruef = "0"
Else
pruef = CStr(10 -(z MOD 10))
End If
tmp(14) = tmp(14) & pruef
fileneu.Writeline Join(tmp, ",")
End If
End If
Loop
MsgBox "Fertig"
fileNeu.Close
file.Close
FileFehler.close
|
|
|
Nach oben |
|
|
RichardSeifensieder
Anmeldungsdatum: 04.03.2020 Beiträge: 3
|
Verfasst am: 04.03.2020, 23:38 Titel: VBS mit Windows98? |
|
|
Danke, das sieht ja toll aus, kriege ich so nicht hin. Aber ich erkenne diese spezielle Berechnung der Prüfziffer nicht, die ist ja nicht so einfach, wenn ich die Excel-Formel so sehe.
Mit FreeBasic habe ich schon einmal etwas gemacht, das geht ja gut unter w98. Aber VBS?
Ich brauche das Windows98, weil meine Spezialsoftware nur da läuft. |
|
Nach oben |
|
|
HorstD
Anmeldungsdatum: 01.11.2007 Beiträge: 107
|
Verfasst am: 05.03.2020, 03:15 Titel: |
|
|
Datei einfach unter NAME.VBS speichern und mit Doppelklick starten.
Allerdings enthält der Code noch einen Fehler.
Code: |
...
If Len(tmp(14)) <> 12 Then
FileFehler.WriteLine "Zeile " & CStr(x)
FileFehler.writeline Join(tmp, ",")
Else
z=0 ' <<<<<< z = 0 einfügen
For i = 1 To 11 Step 2
z = z + CInt(Mid(tmp(14),i,1))
...
|
Jetzt noch ein Basic-Code:
Code: |
DIM i%, z%, p%,p2%, j%, x%
DIM t$,t1$, t2$, t3$, PZ$
OPEN "d:\###\alt.csv" FOR INPUT AS #1
OPEN "d:\###\neu.csv" FOR OUTPUT AS #2
OPEN "d:\###\fehler.txt" FOR OUTPUT AS #3
WHILE NOT EOF(1)
z=z+1
LINE INPUT #1, t
IF LEN(t) THEN
p=0
FOR i = 1 TO 14
j=p+1
p = INSTR(j,t,",")
NEXT
p2= INSTR(p+1,t,",")
t1 = LEFT$(t,p)
t2 = MID$(t,p+1,p2-p-1)
t3 = MID$(t,p2)
t2= TRIM$(t2)
IF LEN(t2) <> 12 THEN
PRINT #3, "Fehler in Zeile"; STR$(z)
PRINT #3, t
ELSE
x=0
FOR i = 1 TO 11 STEP 2
x = x + VAL(MID$(t2,i,1))
NEXT
FOR i = 2 TO 12 STEP 2
x = x + VAL(MID$(t2,i,1)) * 3
NEXT
IF x MOD 10 = 0 THEN
PZ = "0"
ELSE
PZ = TRIM$(STR$(10 -(x MOD 10)))
END IF
PRINT #2, t1 + t2 + PZ + t3
END IF
END IF
WEND
CLOSE
|
|
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 05.03.2020, 11:25 Titel: Re: VBS mit Windows98? |
|
|
RichardSeifensieder hat Folgendes geschrieben: | Mit FreeBasic habe ich schon einmal etwas gemacht, das geht ja gut unter w98. Aber VBS?
Ich brauche das Windows98, weil meine Spezialsoftware nur da läuft. |
Übrigens, VBScript müsstest du auch unter Windows 98 nutzen können.
Zumindest, wenn ein Internet Explorer ab 4 oder 5 installiert ist (weiß nicht mehr genau, welcher das Minimum war). _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 05.03.2020, 13:41 Titel: Re: VBS mit Windows98? |
|
|
Sebastian hat Folgendes geschrieben: | Übrigens, VBScript müsstest du auch unter Windows 98 nutzen können. :)
Zumindest, wenn ein Internet Explorer ab 4 oder 5 installiert ist (weiß nicht mehr genau, welcher das Minimum war). |
Das stimmt, aber: Microsoft hat inzwischen viele alte Downloads komplett weggeräumt, d.h. Windows Update ist mittlerweile in Windows 98 nicht mehr ausführbar.
Auch bei Windows 2000 geht dies nicht mehr, dagegen bei Windows XP ist dies (zumindest letztes Jahr) noch möglich.
Somit wäre also ein Offline-Archiv gefragt für den Internet Explorer 6, falls dies jemand seinerzeit noch rechtzeitig gezogen hatte. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 05.03.2020, 14:54 Titel: Re: VBS mit Windows98? |
|
|
RichardSeifensieder hat Folgendes geschrieben: | Ich brauche das Windows98, weil meine Spezialsoftware nur da läuft. |
Mit DosBox kriegt man (fast) alle älteren Programme auch unter den neueren Windows - Versionen zum Laufen.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 05.03.2020, 16:02 Titel: |
|
|
Hi,
die csv-Datei hat die Strings in Anführungszeichen gesetzt und
die Sätze mit Komma getrennt. Pro Zeile gibt es 7 Sätze.
Die Programm von HorstD übernimmt dieses Format teilweise nicht und
kürzt auch die fehlerhaften EAN Zeilen aus.
Die Orginaldatei hat LF als Zeilenende, unter Window kann ich nur
das übliche CR/LF setzen.
Code: | 'als 'Windows Console' starten
Dim As Long i, x, j
Dim As String satz
Open "test1.csv" For Input As #1
Open "neu.csv" For Output As #2
Do
For i = 1 To 7 '7 Datensätze pro Zeile
Select Case i
Case 1, 2, 3, 4
Input #1, satz
write #2, satz,'in Anführungszeichen
Case 5
Input #1, satz
Print #2, satz;",";'ohne Anführungszeichen, mit Komma
Case 6 'EAN?
Input #1, satz
If Len(satz) = 12 Then 'ist EAN
x = 0
For j = 0 To 10 Step 2
x += (satz[j] - 48)
x += (satz[j+1] - 48) * 3
Next
If x Mod 10 = 0 Then
satz += "0"
Else
satz += Str(10 -(x Mod 10))
End If
EndIf
Print #2, satz ;",";'ohne Anführungszeichen, mit Komma
Print satz
Case 7
Input #1, satz
write #2, satz 'kein Komma anhängen
End Select
Next
Loop Until EOF(1)
Close
GetKey 'warte auf Taste |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 05.03.2020, 17:47 Titel: |
|
|
Noch als Tipp: In Google einmal nach
Code: | windows 98 update pack |
suchen, es gibt diverse Dritte, welche die damaligen .CABs und was es alles so gegeben hat, in Offline-Archive/Installer gepackt haben. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|