Veröffentlicht 14. Mai 200718 j Hallöchen Ihr Experten! Ich habe eine CVS-Datei, die ich mit HIlfe von Java in ein anderes Tool "importieren" soll. Bei diesem Import soll wenn Daten von der CVS und der Datenbank nicht übereinstimmen ein PopUp erscheinen und fragen ob die daten überschrieben werden sollen oder nicht, wenn ja überschreiben udn wenn nein daten in einer Datei zwischenspeichern. Am ende soll gefragt werden unter welchem Namen+Pfad die datei mit den abgelehnten differenzen zu speichern ist. Leider kenn ich mich in Java so gut wie garnicht aus und würde mich freuen, wenn Ihr mir das ein oder andere Stichwort oder die ein oder andere Funktion nennen könntet, die ich brauchen könnte. Den bis jetzt habe ich noch keinen Ansatz Um es vorher zu sagen udn nicht wieder Sprüche zu ernten: Ich möchte auf keinen Fall,, dass Ihr mir das Programm schreibt oder meine Arbeit macht, aber so ein Paar Eckpfeiler tun schon ganz gut, damit ich weiß wonach ich eigentlic im WWW suche, denn ich habe keine Buch und so zur Verfügung... Danke schon ma an alle...
14. Mai 200718 j Servus, willst Du evtl. eine CSV-Datei verarbeiten? Bei CVS sollte Dich die CVS-Doku zum Dateiformat weiter bringen. Ich gehe aber mal von CSV aus. Du liest die Datei mit einem FileReader zeilenweise aus und zerlegst mit String#split die Zeile in ihre Bestandteile. Die Datenbank sprichst Du mit JDBC an und ermittelst die Daten. Vergleichen kannst du ja dann. Für die GUI arbeitest Du mit dem Package java.awt oder javax.swing und einem Tutorial Deiner Wahl. Das von Sun ist nicht schlecht (suchen musst Du selbst schnell). Nachdem Du Dir das wahrscheinlich leichter vorstellst, als es - falls Du in Java noch nichts gemacht hast - ist, solltest Du mit einem Java Buch anfangen. Die gibts auch online: www.javabuch.de - Das Handbuch der Java-Programmierung oder "Java ist auch eine Insel" (-> google). Bei Detailfragen einfach hier noch mal aufschlagen und gut. Schöne Grüße, Peter
15. Mai 200718 j Hi, Also erst ma: Ich stell es mir verdammt schwer vor und das ist das Problem... Ich hab für das ganze Projekt (allein) 5 Tage Zeit... Und heute ist Tag 1... bis jetzt weiß ich grade mal, dass es JDBC gibt (nein es ist kein Abschlussprojekt). :eek Es ist eine CSV Datei, da hab ich wohl irgendwie n Buchstabendreher drin. Erst mal vielen Dank, aber ich sitze, wenn ich erlich bin immernoch vor einem Trümmerhaufen... aber ich werde mal zusehen, dass ich hier irgendwie auf nen grünen Zweig komme... nur noch seh ich das nicht...
15. Mai 200718 j Hi, Also fang erstmal ohne GUI an, einfach über die Kommando Zeile. Dateien zeilenweise einlesen und schreiben, ist nicht schwer. Dafür gibt es die Klasse java.util.Scanner oder vor Java 5 FileReader/FileWriter. Einfach nach den Klassen googlen mit "Beispiel" oder "Example" oder "Howto" zusammen. Wenn sichergestellt ist, das die Daten selber den Trenner nicht enthalten, kannste einfach mit der Methode String.split oder einem StringTokenizer arbeiten. Sind die Daten teilweise gequotet, da der Trenner auch in den Daten vorkommen kann, wird es schwieriger. Eine mögliche Lösung findest du z.B. hier: Koders - CSV.java JDBC gibt es tausende Beispiele. Woran du erkennst, ob die Daten Dubletten sind, kann dir nur jemand sagen der eure Daten kennt. Im einfachsten Fall sind in der csv die IDs der Datenbank mit drin und du musst nur die Spalten vergleichen. Handelt es sich aber z.B. um Adressdubletten, ist das ganze schon deutlich schwieriger. Ich hoffe das hilft dir etwas. Gruß Jaraz
15. Mai 200718 j Und für die Sache mit dem Popup kann ich Dir die Klasse JOptionPane empfehlen. Die ermöglicht Dir eine einfache Box mit beliebigem Text und Ja/Nein-Buttons. Das Ergebnis liest Du aus und reagierst entsprechend darauf.
16. Mai 200718 j Teilfrage: Gibt es einen Dynamischen Mehrdimensionalen Array?? Zum einlesen der CSV habe ich: import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class Versuch2 { /** * @param args */ final static int zeilen= 451 ; final static int spalten=93; public static String mein[][]; public static void main(String[] args) { einlesenAusDatei(); ausgeben(); } public static void einlesenAusDatei() { try{ int zahl=0; mein = new String[spalten][zeilen]; BufferedReader reader = new BufferedReader(new FileReader("C:\\cireport.csv")); String strLine; while ( (strLine = reader.readLine()) != null ) { String[] items = strLine.split(";"); for (int it=0;it<items.length;it++){ mein[it][zahl]=items[it]; } zahl++; } } catch(FileNotFoundException e) {} catch(IOException e) {} } public static void ausgeben(){ for (int z=0;z<zeilen; z++){ for (int s=0;s<spalten;s++){ System.out.println("In der Zeile steht: "+ mein[s][z]); } } } }
16. Mai 200718 j Teilfrage: Gibt es einen Dynamischen Mehrdimensionalen Array?? dafür nehmen wir z.b. ArrayList. die is zwar "eindimensional", aber wenn du noch eine arraylist in die arraylist steckst, dann hast du multidimensional. ArrayList <ArrayList> multilist = new ArrayList<ArrayList>(); for(int i=0;i<100;i++){ //wir wollen uns strings merken: multilist.add(new ArrayList<String>()); } //nun hast du eine arraylist, die 100 arraylisten beinhaltet, die strings enthalten. einfach, oder . //erste arraylist in der arraylist raussuchen: ArrayList <String> firstList = multilist.get(0); [/code] bigredeyes p.s. stehen pro zeile da 93 werte drin?
16. Mai 200718 j p.s. stehen pro zeile da 93 werte drin? japp, warum? Ich guck mir ma ebn den code an *g* edit: Ich weiß ja, dass ich pro zeile 93 werte habe, aber ich weiß nicht wie viele zeilen, muss ich nicht bei deinem code schon die zeilenzahl wissen?
16. Mai 200718 j Jepp. Dynamische mehrdimensionale Felder sind möglich: int[][] multiDim = new int[10][]; for(int i = 0; i < 10; i++) { multiDim[i] = new int[i*2]; for(int j = 0; j < i*2; j++) { multiDim[i][j] = i*j; } } Bleistiftsweise. Das Problem bei Deinem Anwendungsfall: Du kennst die Zahl der Zeilen erst nach dem Auslesen der Datei. Daher ist dies nicht anwendbar und Du mußt auf die ArrayList zurückgreifen. Und die Zeilenzahl mußt Du in bigredeyes' Code nicht kennen. Du kannst ja die multilist mit 93 ArrayLists belegen. Die erste Dimension stellt also die Spalten dar.
16. Mai 200718 j Servus, die Lösung mit verschachtelten Collections oder Arrays mag funktionieren, sie sollte aber nicht verwendet werden. Du hast ein oder mehrere fachliche Objekte. Diese haben scheinbar insgesamt 93 Attribute. Deshalb kannst Du die ja auch so definieren, also eine oder mehrere Klassen mit den insgesamt 93 Attributen. Dann kannst Du jedes dieser "Zeilenobjekte" ganz normal in einer Collection ablegen und damit arbeiten. Ansonsten blickst Du da früher oder später nicht mehr durch. Schöne Grüße, Peter
16. Mai 200718 j Irgendwie ist es entweder zu spät oder ich zu dusselig *g* Ich habe noch nie mit Arraylists gearbeitet muss ich zugeben. Und ich kann mir im moment auch nicht vorstellen, wie ich wenn ich die zeile einlese das in die verschiedenen arraylists immer an die richtige stelle bekomme und so... ich muss nachher ja genau auf das richtige auch zugreifen können...
16. Mai 200718 j Also... Ich habe jetzt eine class Item wo alles schon drin steht wie z.b. String InventarnummerItemShortcode; String Hostname; . . . . 93 Strings Jetzt versuch ich das irgendwie einzubauen... So wie es ist ist es falsch... Aber ich weiß nicht, wie ich das hinbekommen soll. Problem ist einfach, das es so speziell ist, das man auch schon keine Beispiele mehr finden kann. Muss ich bei dem list add dann alle 96 teile einzeln aufrufen und füllen?? public static void main(String[] args) { ArrayList list = new ArrayList(Item); BufferedReader reader = new BufferedReader(new FileReader("C:\\cireport.csv")); String strLine; while ( (strLine = reader.readLine()) != null ) { String[] items = strLine.split(";"); list.add(new Item(items)); } for(Iterator iter =list.iterator();iter.hasNext(){ Item p = (Item)iter.next(); System.out.println(p); } }[/code]
16. Mai 200718 j Du willst folgendes machen. List list = new ArrayList(); // über alle Zeilen iterieren und alle Zeilen nach row[] splitten Item item = new Item(); item.setAttr1(row[0]); item.setAttr2(row[1]); item.setAttr3(row[2]); item.setAttr4(row[3]); ... list.add(item); // Ende Schleife. Du setzt also einfach alle Deine Attribute in der Klasse Item und packst dieses Objekt dann in die ArrayList (oder eine andere Collection Deiner Wahl). Dann hast Du am Schluss eine Liste (indexbasiert, wo Du auf die einzelnen Zeilen zugreifen kannst und über die entsprechenden get-Methoden Deiner Klasse auf die Attribute. Die kannst Du jetzt vergleichen. Peter
17. Mai 200718 j Also... Ich habe jetzt eine class Item wo alles schon drin steht wie z.b. String InventarnummerItemShortcode; String Hostname; . . . . 93 Strings Jetzt versuch ich das irgendwie einzubauen... So wie es ist ist es falsch... die klasse mit den 93 attributen ist gut. auch wenn das schon fast wieder bissl tu much ist... welche der attribute sind wichtig? mußt du alle miteinander vergleichen? oder nur ein paar? so wie ich es sehe hat dein "Item" ein konstruktor "Item(String[] parts)", oder? das ist schon mal ne feine sache. vielleicht willst du deine item-klasse auch noch mal in code-tags hauen und hier reinstellen. Aber ich weiß nicht, wie ich das hinbekommen soll. Problem ist einfach, das es so speziell ist, das man auch schon keine Beispiele mehr finden kann. Muss ich bei dem list add dann alle 96 teile einzeln aufrufen und füllen?? wenn du dir einen Item(String[] parts)-konstruktor gebaut hast, dann würde das so laufen. class Item{ private String name; private String strasseUndHausnummer; private String nameDerGeliebten //hier wird dann der gesplittete string übergeben public Item(String[] parts){ name = parts[0]; strasseUndHausnummer = parts[1]; nameDerGeliebten = parts[55]; } public String getName(){ return name; } @override public String toString(){ return name+" "+nameDerGeliebten+" sollten sich nicht erwischen lassen!"; } hoffe nicht verwirrt zu haben bigredeyes p.s. So wie es ist ist es falsch... ist etwas schwierig zu verstehen! was geht nicht? was für eine exception wurde geworfen? oder compliert er erst gar nicht? -> bitte ausführliche fehlermeldungen.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.