2 CSV Dateien Datensätze Vergleichen und auf Konsole ausgeben



  • @apussaih
    Ne, du gibst ´ne Fehlermeldung aus und machst dann fröhlich weiter als ob nichts passiert wäre.



  • @apussaih sagte in 2 CSV Dateien Datensätze Vergleichen und auf Konsole ausgeben:

    @It0101 soll ich das Prüfen, ob die Daeti existiert in eine eigene Methode legen?
    Und wenn es ie gibt, dann eine neue Methode um sie aufzurufen und dann mit ihr weiter arbeiten?

    Dein Quellcode wird aber von anderen geprüft und deren Checkliste wird etwas länger sein und die werden nicht nur darauf schauen ob der Quellcode tut was er soll, was vielleicht durch Zufall sogar passieren könnte.



  • Hier zum Beispiel liest du Daten aus einem String aus. Und das machst du mehrmals hintereinander. Jedes mal fast genau das gleiche mit minimalen Unterschieden. Da wäre es aus meiner Sicht angebracht, wenn du diesen Block in eine Funktion auslagerst und diese dann mehrmals mit jeweils unterschiedlichen Parametern aufrufst.

    		//Hole Ref
    		end = line.find(';', start);
    		int stringlaenge = end - start;
    		std::string ref = line.substr(start, stringlaenge);
    		//std::cout << "Ref BOM: " << ref << std::endl;
    		bom[i].setRef(ref);
    		start = end + 1;
    

    warum kopierst du hier jedes mal zwei komplette Vectoren?

    void compare(std::vector<dataset> bom, std::vector<dataset> lager)
    

    Was ich übrigens gut finde ist, dass du Kommentare schreibst, was viele Anfänger nicht tun.



  • Dieser Beitrag wurde gelöscht!


  • Zunächst mal nimmst du dir deine "parse"-Blöcke schaust sie dir an und überlegst, was die Unterschiede zwischen

    //Hole Ref
    //Hole Partname
    // Hole Value
    // Hole Footprint

    sind und was die gemeinsamkeiten sind.



  • Dieser Beitrag wurde gelöscht!


  • @apussaih
    Die Gemeinsamkeit ist doch, dass du jedes mal in einem String nach einem Semikolon suchst und daraufhin einen Teilstring rausliest und irgendwo abspeicherst. Und diese Funktionalität könnte in eine eigene Funktion. Z.B. könntest du dieser Funktion die "line" übergeben und den Startpunkt ab wo er suchen soll. Und die Rückgabe ist dann quasi der Teilstring, den du extrahiert hast.



  • @apussaih Eine Frage zu der Datei „MGC3130_BOM.csv“

    Ref	Part Name	Value	Footprint
    BU1	CON_BLY6_7p	BLY 6 SMD/ 20	BLY6_7p
    C1	Capacitor_IDT	100nF	0402_IDT
    

    Zeile 2: Was ist da was?
    BU1 ist die Ref, CON_BLY6_7p ist der „Part“ oder „Part Name“? (Ok, ich sehe ist „Part Name“)
    Was ist dann „BLY“? Also was ist der Value und was der Footprint?

    bei den anderen ist das ersichtlich, bei Zeile 2 allerdings nicht.

    Ich sehe gerade das du versuchst anhand von Semikolons zu trennen. Daher noch die Frage: Ist die obige BOM-Datei die Datei „MGC3130_BOM.csv“?

    Editt: Du ja gestern ein fast gleiches Post. Waren da andere Dateien dabei? Vorhin war das gelöscht...



  • Dieser Beitrag wurde gelöscht!


  • Dieser Beitrag wurde gelöscht!


  • @apussaih Ja, aber in der Datei die du zeigst wird nichts durch Semikolon getrennt. Ist da was bei C&Paste schief gelaufen?



  • Dieser Beitrag wurde gelöscht!


  • @apussaih sagte in 2 CSV Dateien Datensätze Vergleichen und auf Konsole ausgeben:

    @dirkski scheint so, ist noch gar nicht aufgefallen. Tut mir leid dann, wenn ihr deswegen Probleme habt.

    Ok...

    ...und std::exit brauchst du um das Programm zu beenden. #include <cstdlib> dann nicht vergessen..

    Edit:

    	// Prüfen, ob Datei existiert
    	if (if_bom.fail()) {
    		std::cout << "Konnte: " << path << " nicht oeffnen\n";
    	        // hier exit aufrufen mit entsprechender passender Fehlernummer. 
                    // Weiß aber nicht was man da bei Windows nimmt...
            }
    

    und bei der anderen auch...



  • Dieser Beitrag wurde gelöscht!


  • @apussaih Weiß nicht. Hab mir das alles noch nicht richtig angeguckt. Ich esse jetzt erstmal...

    Du solltest aber oben erstmal die BOM-Datei mit der korrekten ersetzen. Sonst kommen wir hier eh nicht weiter....

    Du bist jetzt aber nicht unter Zeitdruck, oder? Sowas wie: Muss morgen/nächste Woche abgegeben werden? Ich würde vorschlagen es erstmal so zum laufen zu bekommen und dann kann man das Schritt für Schritt umbauen. Ist vom Lerneffekt auch besser... Ich will das Projekt hier gleich in den QtCreator einpflegen, dafür brauche ich (und alle anderen) die korrekte Datenbasis. Wie gesagt, bis jetzt nur überflogen...



  • @apussaih sagte in 2 CSV Dateien Datensätze Vergleichen und auf Konsole ausgeben:

    @It0101

    void getData(std::string line)
    {
    	int start = 0;
    	int end = 0;
            int i = 0;
    
    	end = line.find(';', start + 1);
    	int stringlaenge = end - start;
    	std::string daten = line.substr(start, stringlaenge);
    	std::cout << daten << " BOM: " << daten << std::endl;
    	bom[i].setDaten(daten);
    	start = end + 1;
    }
    

    Das ist meine Version der Funktion die Du meintest?

    Warum übergibst du die "line" als kopie?
    "start" wird sich nur innerhalb dieser funktion ändern. Du musst das veränderte Start, bzw. die Anzahl an Zeichen, die du in der Funktion gelesen hast, an die aufrufende Funktion ( deine while-Schleife ) zurückgeben, damit nicht mit jedem aufruf wieder von vorn angefangen wird zu lesen....



  • @dirkski
    Kein Zeitdruck bis jetzt. Kann man auch als schlechtes Beispiel hernehmen. Daraus lern ich ja auch was. Wie man es nicht! machen sollte. Guten Appetit!
    Und danke erstmal für die Hilfe an alle!



  • Dieser Beitrag wurde gelöscht!


  • @apussaih sagte in 2 CSV Dateien Datensätze Vergleichen und auf Konsole ausgeben:

    	std::cout << " Liste: " << daten << std::endl;
    	bom[i].getDaten();
    	start = end + 1;
    }
    

    In deiner letzten geposteten void getData()-Funktion kommt eine Fehlermeldung:

    ../main.cpp: In Funktion »void getData(std::__cxx11::string)«:
    ../main.cpp:171:12: Fehler: »__gnu_cxx::__alloc_traits<std::allocator<dataset>, dataset>::value_type« {aka »class dataset«} hat kein Element namens »getDaten«; meinten Sie »getName«?
         bom[i].getDaten();
                ^~~~~~~~
    

    Der besagt das deine Klasse dataset (Besser wäre Dataset weil die meisten bei Klassen Großschreibung bevorzugen, ist Geschmacksache) keine member-function getDaten besitzt. Hast Du die evtl. schon geschrieben und die Klasse ganz oben ist nicht mehr aktuell?

    Ich habe heute nicht so viel Zeit werde mich aber die Tage mehr mit beschäftigen...



  • @apussaih Was bedeutet Gesellenprüfung? Machst Du irgendwas im Handwerk und das Programmieren ist ein Zusatz (Sieht ja nach irgendwas mit Elektonik aus)?
    Aber Elektronik ist ja auch Industrie. Mechatroniker?

    Oder bist du Azubi als Fachinformatiker und machst hauptsächlich programmieren?

    Also welchen Stellenwert hat das Programmieren in deiner Ausbildung?
    Ist das evtl. nur ein Nebenfach? Hilft uns evtl. wie weit wir bei der Hilfe ausholen müssen und wie „gut“ das Ergebnis am Ende ist.


Anmelden zum Antworten