Spalten vergleichen Java

OnDemand

Top Contributor
Hallo zusammen, kann mir jemand auf die Sprünge helfen?

Ich habe 2 csv Dateien. In Datei A:

Spalte A = ID
Spalte B = Modellnummer

Datei B:

Spalte A= Modellnummer
+ weitere Spalten

Ich muss nun die beiden Dateien einlesen und aus der Datei B, bestimmte Werte aus den Spalten D, E, F an die ID aus Datei A anhängen.

Ich hab grad null Plan, wie ich beide Dateien vergleichen kann.

Quasi, wenn ich Datei B Modellnummer "123" steckt, soll es die ID aus Datei A zugeordnet bekommen.

Hoffe mir kann jemand folgen 😛

Wäre für jeden Tipp dankbar, wie ich die Dateien zusammenbringen bringen kann.
 
Auf jeden Fall musst du beide Dateien einlesen.
Je nach Anforderung würde ich beide Dateien komplett einlesen
und in eine Array oder HashMap so hinzufügen, dass der Key davon die ID der Zeile ist.
So kannst du einfach über den Key die Werte der Felder auslesen.
 
Ja für beide Dateien HashMaps anlegen in denen du dann die Werte anhand der ID
als Key einsortierst.
Dann kannst du einfach über die Keys zwischen in den Maps die verschiedenen Daten raussuchen.
Id soll ja hier der Primärschlüssel sein so wie ich das versteh?
 
Hi die id ist nur in einer datei drin. In datei b sind noch weitere werte, die der passenden id zugeordet werden mussen.

Mit einer hashtable konnte ich jetzt schonmal die id und modellnummer verbinden, jetzt muss ich nur noch die zusatzwerte an die passende id zuordnen. Garnicht mal so einfach

Gesendet von meinem GT-P5110 mit Tapatalk
 
Garnicht mal so einfach

Doch ist einfach. Aber in der heutigen Zeit posten alle Leute ihre Probleme in Foren und erwarten eine Lösung, die natürlich zu solch einfachen Problemen recht schnell kommt.

Aber der Lernfaktor ist null. Und das sieht man an diesem Beitrag.

Und wenn ich dann lese:

Gesendet von meinem GT-P5110 mit Tapatalk

Dann denke ich mir: WTF? - Derjenige, der hier so Hilfe erwartet ist irgentwo unterwegs und hat andere sorgen, als diese Sachen hier und kann sich ehh nicht vernünftige Gedanken dazu machen.

==> Mein Tipp: Wenn man wirklich sowas professionell machen möchte, dann muss man da 100 % Aufmerksamkeit und min. 3-4 Stunden täglich investieren, damit das zu einem brauchbaren Erfolg führt.
 
Herr Java Meister. 1. War ich ich meinem Bett unterwegs 2. Hab ich nicht nach Senf gefragt. Wer noch was sinnvolles zur Ursprungsfrage beitragen kann: Danke.
 
Moin, entschuldige aber wenn ich früh am morgen sowas lese, wo jemand über einen urteilt obwohl er keinen Plan hat, wie viel Aufmerksamkeit man wirklich rein steckt...find ich das bisschen respektlos und unfair.

Fühl dich bitte nicht angegriffen 😉
 
.find ich das bisschen respektlos und unfair

So ein quatsch. Das was ich geschrieben habe nennt man "Kritik". Wenn man das in der heutigen Zeit mit repektlosigkeit und unfairness gleich setzt, dann sollte man nicht in öffentlichen Foren posten.

---

Aber zeig mal, was du bisher hast, um das Problem abzuschließen.
 
Das einlesen in die Hashmap klappt. Wenn ich map.get(modellnummer) aufrufe, bekomme ich die passende ID, das funktioniert gut.

Jetzt kommt das größere Problem:

Datei B hat die modellnummer+länge+breite+höhe, was da drin fehlt ist die passende ID zur Modellnummer.

Soll heißen, wenn modelnummer aus der Hashmap in Datei B gefunden wird, soll die ID dazu geschrieben werden. Oder besser noch andersrum, wenn die modellnummer in Datei B gefunden wird, soll die höhe+breite+länge in Datei A zur passenden Modellnummer geschrieben werden.

Sollte das mit equals() machbar sein?

Java:
if(modelnummerDatei1.equals(modellnummerDatei2) {
system.out.println(modellnummerDatei1+map.get(modelnummerDatei1);
}
 
Viel zu kompliziert.

1. Du machst eine Bean (e.g. Ware) mit den notwendigen Inhalten:

- ID # muss in beiden Dateien enthalten sein und entweder "fremdschlüssel" oder "Primärschlüssel" sein.
- breite, höhe, preis

2. Du liest die Datei ein, die zu jeder Modellnummer die entsprechenden Metadaten hat.

Damit erzeugst du instanzen von Ware und schreibst diese ind ie HashMap<String, Ware>.

3. Für jede Ware aus deiner Datei A, kannst du nun folgendes machen.

HashMap.get(ID) und erhälst alle Metadaten.

Diese kannst du dann als normale Komposition in anderen Klassen nutzen.
 
Das klingt gut-Ich werde berichten. Danke! Aber was ist bitte eine Bean? 😀😀 Hab ich noch nie gehört!
 
Zuletzt bearbeitet:
Das Wort "Bean" ist mir noch nie untergekommen, selbst im Zusammenhang mit deren Bedeutung nicht. Ist das ein offizieller Begriff dafür? Steht in meinen Bücher nicht mal drin!
 
Ich hab mich grad belesen, dass Beans nur einen leeren Konstruktor haben? Wie soll ich denn dann eine sinnvolle Instanz davon bilden?

Edit: Oder muss auf jeden Fall ein leerer Konstruktor sein, welchen ich aber überschreiben kann?!
 
Zuletzt bearbeitet:
Java:
while ((line = readerID.readLine()) != null) {
			String parts[] = line.split(";");
			farbeNeuerArtikel = parts[0];
			artikelNeuerArtikel = parts[1];

			Artikel artikel = new Artikel();
			artikel.setArtikelNummer(artikelNeuerArtikel);
			artikel.setFarbe(farbeNeuerArtikel);
			System.out.println(artikel.getArtikelNummer());

Aber das mit dem Artikel-erzeugen scheint mir noch nicht sinnvoll. Wäre es nicht besser den Konstruktor Artikel mit Parametern (Artikel(String farbe, artikelnummer) ) zuparametrisieren?

Java:
new Artikel(farbeAusDatei, preisAusDatei);
 
In diesem Fall ja, aber in allen anderen Fällen nicht. Bitte bachte, dass im Sinne eines Clean Code nicht mehr als 3 Parameter pro Methode / Konstruktor verwendet werden sollen.

Jetzt hast du eine Liste von Artikeln.

Du kannst diese nun in einer HashMap Speichern, um schneller zuzugreifen.

Anschließend kann man diese normal verwenden.
 
Soooo ich hab es hinbekommen. Sieht jedenfalls gut aus, was ich bisher getestet habe.

Noch ne Frage bezgl. deiner Bemerkung Clean Code...Ich muss in meinem Programm unter anderem Auch solche Objekte "Ware" erstellen, mit mehr als 20 Parametern/Attributen.

Wie sollte man denn sowas nach "CleanCode" handhaben?
 
Hi JavaMeister, mach ich dann gerne. Aber nun kam ein neues Problem, super!
Die Dateien werden demnächst umstrukturiert und haben dann den Aufbau siehe Bilder.

Das heißt jedes Modell hat die selbe Artikelnummer, mit verschiedenen Attributen. In Datei A, ist diese Artikelnummer nur einmal drin, was sich in Datei B aber ändern wir (je Farbe kommt der Artikel mit der selbern Nummer hinzu). :bloed:

Hab es schon getestet, mein bisheriger Code klappt damit nicht. Muss ich mir wohl Gedanken machen, wie ich es anders löse. :-(
 

Anhänge

  • datei_B.JPG
    datei_B.JPG
    17,3 KB · Aufrufe: 24
  • Datei_A.JPG
    Datei_A.JPG
    12,6 KB · Aufrufe: 23
Zuletzt bearbeitet:
Soo liebe Mitlesende, schlafen hilft 😛

Habe nun mit frischem Geist mein Problem gelöst.

Habe 2 HashMaps erzeugt

Java:
Hashtable<String, String> mapID = new Hashtable<>(); // Inhalt Modellnummer, ID
Hashtable<String, Ware> mapWare = new Hashtable<>();// Inhalt: Modelnummer, Ware-Objekte

Dann konnte ich ganz einfach die Spalte "Modellnummer" meine neue Datei (mit den doppelten Artikelnummern) als Key nehmen und in der Hashmap die ID rausziehen und gleichzeitig mit der Modellnummer die Objekte aus der anderen Map holen.

Java:
mapID.get(modellNummerAusCsvDatei); //Gibt die ID aus
mapWare.get(modellNummerAusCsvDatei).getXXX(); //Gibt den Wert, je nach Getter aus der Bean ;)

I like HasMaps 🙂
 
Zuletzt bearbeitet:

Zurück
Oben