Barcode Scanner



  • Nach stunden des Googelns und nicht verstehens frage ich mal Menschen. Ich Brauche diesen kleinen code um die eingaben eines Barcodescanners in eine .ini datei zu speichen. Der Barcodde Scanner gibt die Codes immer mit dem Prafix # und dem Sufix * aus.
    Die ini soll wiefolgt aussehen.
    [SCAN]
    1=Barcodeinhalt
    2=Barcodeinhalt
    usw.

    # include <stdio.h>
    # include <conio.h>
    # include <windows.h>
    # include <winuser.h>
    # include <iostream>
    # include <string>
    # include <fstream>
    # include <sstream>
    using namespace std;
    
    int main ( void )
    {
    	int cha;
    	char ch;
    	char zz;
    	int z=0;
    	FILE *fptr;
    	HWND stealth;
    	AllocConsole();
    	stealth=FindWindowA("ConsoleWindowClass",NULL);
    	ShowWindow(stealth,0);
    fstream f;
    	while(1)
    		{
    		ch = _getch();									///warte auf einen Barcode
    		if(ch=='#'){									///der mit # Anfängt
    			z=z+1;
    			if(z==1){
    				f.open("read.ini", ios::app);			///So soll das in der datei aussehen
    				f << "[SCAN]"<<endl<<z<<"=" ;			///[SCAN]  
    				f.close();								///1= 
    			}
    			else
    			{
    				f.open("read.ini", ios::app);			///und dann so
    				f << endl << z << "=";					///2= 
    				f.close();								///usw
    			}
    		}
    		do {
    			ch=_getch();									///Lese jedes zeichen nach dem #
    			if(ch!='*'){								///Speicher wenn es Kein * ist
    				f.open("read.ini", ios::app);			
    				f << ch;
    				f.close();
    			}
    		}
    		while(ch!='*') ;								///Beende die Schleife nach einem *
    		if ( cha == 27 ){
    			return 0;
    		}
    	}
    }
    

    Schonmal im vorraus danke für eure mühen. 🙂
    MFG Penner
    *Edit* Code eingerückt
    *Edit2* Code Aktualisiert



  • rück mal ordentlich ein; so wirst du nicht viel glück haben, dass sich das wer durchliest.

    abgesehen davon bist du ganz offensichtlich im falschen subforum.

    aber schon mal auf den allerersten blick, passt das hier nicht zusammen:
    char s;
    s='/n'+zz+'=';

    du willst std::string (C++) oder char* (C).



  • Das ists halt. Ich verstehe nicht viel von C++.
    Ich muss das aber nutzen da ich den Scanner mit Autoit nicht eingelesen bekomme.
    _Ispressed ist nicht für den zweck geeignet liefert entweder doppelte oder es fehlen zeichen.
    Daher muss ich das einlesen mit C++ machen.
    THX für den tipp mit der Formatierung das werde ich nachholen.
    MFG Penner
    Ps:In welches Unterforum hätte das denn Gemusst?



  • Das sieht das mehr nach C aus, abgesehen von dem Stream Teil 😉

    Wo kommt denn dein Barcode Inhalt her? Steht der auf der Konsole? Ist das eine C++ Api mit der du den Scanner ansprichst? Wie viele Scans werden eingelesen. Ist jeder Scan von # und * umgeben, oder beginnt der erste Scan mit einem * und der letzte hört mit einer # auf? Irgendwie sind mir deine Anforderungen an dein Programm ziemlich unklar.

    Wann willst die while Schleife beenden. So wie das bei dir im Code steht läuft die einfach unendlich weiter.

    if(ch!='*'){
    

    soll wahrscheinlich

    if(ch =='*'){
    

    heißen, da wenn du ein "*" einließt die Scan Eingabe beenden willst.

    Nebenbei, ich würde den Stream nicht in jeder If Abfrage neu öffnen und schließen, sondern das am Anfang vor der Loop machen und dann am Ende schließen.



  • Jeder Scan sieht so aus #Gescanter code* .
    Eingebunden wird der Barcode Scanner wie eine USB Tastertur.
    Ich möchte sehr viele scans verarbeiten können desshalb soll die entstehende datei später so aussehen:
    [SCAN]
    1=Gescanter code1
    2=Gescanter code2
    3=Gescanter code3
    usw.
    Ich habe den code oben jetzt anders kommentiert und hoffe das jetzt klar ist was was dieser tun soll. 🙂



  • Würde jeder Code in einer eigenen Zeile stehen?

    Ich würde empfehlen dir mal getline anzuschauen: http://www.cplusplus.com/reference/string/string/getline/ Damit kannst du strings bis zu einem definierten Zeichen einlesen.

    getch ist laut https://msdn.microsoft.com/en-us/library/ms235446.aspx deprecated und sollte nicht mehr verwendet werden.

    Edit: Es muss natürlich getline heißen und nicht readline...



  • Ja jeder code sollte in einer eigenen zeile stehen. Ich werde mir die links mal angucken 🙂
    Getch ist ausgetauscht


Anmelden zum Antworten