Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

EAN Check-Digit ergänzen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
RichardSeifensieder



Anmeldungsdatum: 04.03.2020
Beiträge: 3

BeitragVerfasst am: 04.03.2020, 09:38    Titel: EAN Check-Digit ergänzen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 107

BeitragVerfasst am: 04.03.2020, 12:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
RichardSeifensieder



Anmeldungsdatum: 04.03.2020
Beiträge: 3

BeitragVerfasst am: 04.03.2020, 15:04    Titel: Beispieldaten Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 107

BeitragVerfasst am: 04.03.2020, 19:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
RichardSeifensieder



Anmeldungsdatum: 04.03.2020
Beiträge: 3

BeitragVerfasst am: 04.03.2020, 22:38    Titel: VBS mit Windows98? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
HorstD



Anmeldungsdatum: 01.11.2007
Beiträge: 107

BeitragVerfasst am: 05.03.2020, 02:15    Titel: Antworten mit Zitat

Zitat:
Aber VBS?


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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 05.03.2020, 10:25    Titel: Re: VBS mit Windows98? Antworten mit Zitat

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. lächeln
Zumindest, wenn ein Internet Explorer ab 4 oder 5 installiert ist (weiß nicht mehr genau, welcher das Minimum war).
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 05.03.2020, 12:41    Titel: Re: VBS mit Windows98? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 05.03.2020, 13:54    Titel: Re: VBS mit Windows98? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 05.03.2020, 15:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 05.03.2020, 16:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz