Honney86 Geschrieben 14. Mai 2007 Geschrieben 14. Mai 2007 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... Zitieren
kingofbrain Geschrieben 14. Mai 2007 Geschrieben 14. Mai 2007 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 Zitieren
Honney86 Geschrieben 15. Mai 2007 Autor Geschrieben 15. Mai 2007 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... Zitieren
Jaraz Geschrieben 15. Mai 2007 Geschrieben 15. Mai 2007 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 Zitieren
geloescht_Newlukai Geschrieben 15. Mai 2007 Geschrieben 15. Mai 2007 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. Zitieren
Honney86 Geschrieben 16. Mai 2007 Autor Geschrieben 16. Mai 2007 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]); } } } } Zitieren
bigredeyes Geschrieben 16. Mai 2007 Geschrieben 16. Mai 2007 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? Zitieren
Honney86 Geschrieben 16. Mai 2007 Autor Geschrieben 16. Mai 2007 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? Zitieren
geloescht_Newlukai Geschrieben 16. Mai 2007 Geschrieben 16. Mai 2007 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. Zitieren
kingofbrain Geschrieben 16. Mai 2007 Geschrieben 16. Mai 2007 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 Zitieren
Honney86 Geschrieben 16. Mai 2007 Autor Geschrieben 16. Mai 2007 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... Zitieren
Honney86 Geschrieben 16. Mai 2007 Autor Geschrieben 16. Mai 2007 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] Zitieren
kingofbrain Geschrieben 16. Mai 2007 Geschrieben 16. Mai 2007 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 Zitieren
bigredeyes Geschrieben 17. Mai 2007 Geschrieben 17. Mai 2007 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. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.