Javacracks gesucht.. (Probleme beim einlesen eines Files in ein Array)

    • gino
      gino
      Bronze
      Dabei seit: 01.07.2006 Beiträge: 92
      Bitte nicht lachen, wenn's euch zu einfach ist...
      habe ein grosses Anfängerproblem mir einer Java-Aufgabe:


      In einem File stehen Zahlen (doubles), die mit einem Komma getrennt sind,
      ich muss jetzt diese Zahlen in ein zweidimensionales Array kriegen..

      aber ich bin schon zu blöd das File zu öffnen, geschweige denn diese Aufgabe
      zu lösen...

      Ist für euch bestimmt ganz simpel, könnte mir bitte einer helfen?


      Das File heisst "Daten.csv"

      und sieht ungefähr so aus:

      25.017,24.968,25.017,25.017,24.822,24.725,
      24.335,24.238,24.189,24.238,24.238,23.848,
      23.508,22.924,23.167,22.875,22.778,22.729,
      22.194,21.707,21.61,22.661,22.729,22.972 (nur VIIIEL mehr Zahlen!!)


      und soll ins Array
      double daten[][] (erster wert gibt die zeile an, zweiter die spalte)

      Allerdings ist das textfile so gross, das ich es NICHT einfach direkt in den
      Quellcode "reinsetzen" kann, ich MUSS es aus dem file rausholen...
      (sind in echt 120 zeilen a ca. 6000 Werte - also kommt man über die
      65535 byte Grenze von Java)

      Ich wäre für eure Hilfe sehr dankbar (und entschuldige mich schon jetzt
      für meine Blödheit... :-( )
  • 6 Antworten
    • sarc
      sarc
      Moderator
      Moderator
      Dabei seit: 06.06.2008 Beiträge: 12.597
      http://www.exampledepot.com/egs/java.io/ReadLinesFromFile.html
    • AAFINgo
      AAFINgo
      Bronze
      Dabei seit: 03.10.2007 Beiträge: 3.075
      Lachen wird da wohl keiner. Warum auch.

      Es gibt da sicher mehrere Lösungsansätze, gerade was Performance angeht.

      exampledepot ist da schonmal ein guter Ansatz. Dort siehst du gut, wie du ein File auslesen kannst.
      Bei näheren Fragen, kannste ja einfach mal den Beispielcode (formatiert :) ) posten.

      Zur Aufgabe:

      Also um es simpel zu halten (wie gesagt sicher nicht die effizienteste Methode)
      könntest du einmal durch das File laufen und ein Counter mitlaufen lassen, um die maximale Zeilenanzahl zu erhalten. Dann hast du den ersten Wert um das Array zu initialisieren (Zeilen).

      Dannach würde ich mit ner schleife druchrattern. Also immer "solange getLine() != null".
      Als nächstes würde ich zum trennen die String funktion "split" verwenden (beispiele auch heir bei java2s und exampledepot). Dadruch erhälst du ein Array in dem nur ncoh die Zahlen sind.

      Im Endeffekt wärst du dann quasi fertig. eben nur noch speichern.
      Falls du die Zahlen noch in double oder float haben willst, müsstest du diese Strings nochmal konvertieren.
      Sowas wie Double.parseDouble(String s) sollte da weiterhelfen.

      Das ist sicher jetzt nicht gerade optimal geschrieben. Es sit so ein einfacher möglicher Ansatz wie ich rangeganngen wäre, wenn ich es auf die Schnelle machen würde.
      Ich hoffe es ist halbwegs verständlich. :)
    • philwen
      philwen
      Bronze
      Dabei seit: 13.05.2007 Beiträge: 5.601
      um nur einmal das file zu durchlaufen kannste einfach ein dynamisches array (zB arraylist) verwenden um die ergebnisse zwischenzuspeichern...
    • gino
      gino
      Bronze
      Dabei seit: 01.07.2006 Beiträge: 92
      Performance ist hier egal.. :-)


      hey, schon mal vielen dank, bin schon ein grosses Stück weiter..!!!

      Habe die Datei jetzt einlesenkönnen und zwar zeilenweise mit diesem Code:

      try {
      BufferedReader in = new BufferedReader(new FileReader("D:/Eigene Dateien/Java/Kursdaten/src/Kurs/Daten.txt"));
      String str;
      int i = 0;
      while ((str = in.readLine()) != null) {
      println(str);
      println("zeile: " + i);
      i++;
      }
      in.close();
      } catch (IOException e) {
      println("war wohl nix " + e.toString());
      }

      jetzt ist nur noch die Frage, wie ich aus dem String str die Zahlen in das array kriege....
    • philwen
      philwen
      Bronze
      Dabei seit: 13.05.2007 Beiträge: 5.601
      schau dir mal in der string klasse die funktion split an - am besten in der java api die du mit google finden kannst =)

      dann musst du noch die einzelnen zahlen in doubles konvertieren, da sie bis jetzt ja immer noch als strings vorliegen


      btw:
      ist das teil einer hausaufgabe, willst du java programmieren lernen oder willst du einfach nur das es funktioniert. sollte fall 3 zustimmen dann hör ich auf mit tipps hier um den heißen brei rumzureden, und poste einfach ne möglichkeit ;)
    • AAFINgo
      AAFINgo
      Bronze
      Dabei seit: 03.10.2007 Beiträge: 3.075
      Ok wenn du soweit bist, fehlen dir noch ein paar punkte:

      - laut Aufgabenstellung sollst du ein Array verwenden, dass muss initialisiert werden
      -> sehr simpel, initialisierste das hart mit, von mir aus, [1000] Feldern.
      -> sauberer, versuchst du die Zeilenanzahl im File zu ermitteln (siehe ersten post mit dem counter)
      dann kannst du ein Feld mit exakter Größe erstellen "new Array[counter]"

      - in der while schleife haste dir ja nun schon die Zeilen einzeln ausgeben lassen
      Wie oben bereits erwähnt würde ich nun sie spilt funktion nehmen
      Bsp(str="hallo+große+dumme+welt" str.split("+") ergibt ein array {hallo,große,dumme,welt})
      nun haste ein array mit den zahlen. Die Funktion Double.parseDouble (wie im eingangspost) wandelt dir nun so ein String in eine double variable (bsp : Double.parseDouble(String str[0] => returnt den wert in double))

      Das kannste ja erstmal einstellig probiern und wenn du siehst wie's geht.,, packste das noch in die jeweiligen schleifen damit es für alle gemacht wird und du bist fertig mit der Aufgabe.

      Falls noch Fragen sind einfach Quelltext posten ;)
      Aber ich denke mit ein wenig probiern schaffste das.