Java

Ankündigungen und Diskussionen zum Forum

Java

Beitragvon merla » 06.05.11 14:26

Hallo zusammen,
ich weiss nicht ob ich hier die Frage stellen soll aber ich probiere es einfach.
ich muss eine Programmieraufgabe lösen und brauche eure Hilfe da ich tagelang noch dran bin.
ich muss von einen csv-Datei der aus drei spalten besteht daten spaltenweise auslesen bzw. in einem Vector speichern und dann prüfen wenn die int sind muss ich die summieren !!!!! :cry:
Also ich weiss schon wie das geht wenn ich nur zeilenweise die Daten einlese
bitte ich brauche Hilfe im Internet finde ich gar nicht was mir weiterhelfen kann :oops:

Danke
merla
 
Beiträge: 48
Registriert: 11.12.10 17:35
Studiengang: Informatik (B.Sc.)

Re: Java

Beitragvon Coolcat » 06.05.11 15:01

!!!!! :cry:

Mehr Ausrufezeichen helfen schon mal nicht.

Also ich weiss schon wie das geht wenn ich nur zeilenweise die Daten einlese

D.h. du hast jeweils eine Zeile der Datei in einem String, richtig? Die Spalten in einer CSV-Datei sind durch ";" getrennt. Entsprechend musst du in diesem String nach ";" suchen und jeweils die Strings dazwischen lesen.

Hilfreich dabei sind die folgenden Funktionen der Klasse String:
int indexOf(int ch)
Returns the index within this string of the first occurrence of the specified character.
int indexOf(int ch, int fromIndex)
Returns the index within this string of the first occurrence of the specified character, starting the search at the specified index.
String substring(int beginIndex, int endIndex)
Returns a new string that is a substring of this string.


Zusätzlich zu den Semikolon musst du ggf. noch Anführungszeichen entfernen.

Nachdem du den String hast musst du diesen jeweils noch in einen Integer (int) umwandeln, dazu kann die Funktion Integer.parseInt(String s) benutzt werden. Diese wirft eine NumberFormatException wenn sich der String aus welchem Grund auch immer nicht umwandeln lässt.

ich weiss nicht ob ich hier die Frage stellen soll aber ich probiere es einfach.

Vermutlich wäre "Informatik-Vorlesungen" oder "Offtopic" sinnvoller gewesen.
My software never has bugs. It just develops random features.
Benutzeravatar
Coolcat
Promoter
 
Beiträge: 2574
Registriert: 28.11.05 21:26
Wohnort: Kohlscheid / Düsseldorf
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Re: Java

Beitragvon under_score » 06.05.11 15:12

Es sollte sogar noch einfacher gehen als mit indexOf / substring:
Code: Alles auswählen
String[] columns = line.split(";", 3);

Die 3 garantiert eine Zerlegung in höchstens 3 Spalten.
(line ist dabei ein String.)
under_score
 
Beiträge: 27
Registriert: 21.03.10 15:38
Studiengang: Informatik (M.Sc.)
Studiert seit: WS 12/13

Re: Java

Beitragvon merla » 06.05.11 15:14

Danke schon mal für deine Antwort ,
also die Daten habe ich schon mit ; getrennt durch " String [] split = datei.split(";"); "
mein Problem ist dass ich nicht weiss wie ich es implementiere ich meine nach ; suchen bzw. die String-Daten dazwischen einlese,

ich bin fast wie total blockiert
merla
 
Beiträge: 48
Registriert: 11.12.10 17:35
Studiengang: Informatik (B.Sc.)

Re: Java

Beitragvon heipei » 06.05.11 15:32

Und dann musst du nochwas mit den Daten in Java machen oder war das das ganze Program? Das ist nämlich ein awk oneliner...
Benutzeravatar
heipei
Moderator
 
Beiträge: 769
Registriert: 02.11.06 21:55
Wohnort: Aachen
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: Medizin

Re: Java

Beitragvon merla » 06.05.11 15:37

heipei hat geschrieben:Und dann musst du nochwas mit den Daten in Java machen oder war das das ganze Program? Das ist nämlich ein awk oneliner...

ja ich muss dann jede Spalte zu int umwandeln und die werte summieren, durschnitt berechnen.... obwohl es egentlich besser wäre wenn ich erst prüfe welche spalte aus int besteht, geht aber nich weil sowieso csv-Datei bei mir nur auf String besteht
was ist eigentlich ein awk oneliner?
merla
 
Beiträge: 48
Registriert: 11.12.10 17:35
Studiengang: Informatik (B.Sc.)

Re: Java

Beitragvon Coolcat » 06.05.11 15:59

ja ich muss dann jede Spalte zu int umwandeln (...) obwohl es egentlich besser wäre wenn ich erst prüfe welche spalte aus int besteht

Wie das geht hab ich oben geschrieben.

was ist eigentlich ein awk oneliner?

awk: http://de.wikipedia.org/wiki/AWK
oneliner: ein Programm das nur aus einer Zeile besteht
My software never has bugs. It just develops random features.
Benutzeravatar
Coolcat
Promoter
 
Beiträge: 2574
Registriert: 28.11.05 21:26
Wohnort: Kohlscheid / Düsseldorf
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Re: Java

Beitragvon merla » 06.05.11 16:09

nach ";" suchen und jeweils die Strings dazwischen lesen.
hier kann ich nicht weiter obwohl es sich leicht anhört
ich wäre sehr dankbar wenn du ein kleines Beispiel für mich hast :oops:

ich kann jetzt mit indexof eine Spalte einlese aber ich bekomme nur - einsen warum ???????
merla
 
Beiträge: 48
Registriert: 11.12.10 17:35
Studiengang: Informatik (B.Sc.)

Re: Java

Beitragvon blightzero » 06.05.11 18:40

Muss es umbedingt Java sein?
In Python gibt es ein schönes Packet namens csv, das kann man importieren und der liest einem schön die csv dateien ein.
mit zip(*daten) kann man die felder dann "transponieren" und hat die spalten als vektor...
Wenn du das so in Java machen willst, mit Split, dann musst du für jede Zeile einen 3 Elementigen Array haben, am ende hast du dann also ein Feld, welches n x 3 groß ist. du musst dann eben statt ueber [n][1] summieren falls dort ein Int steht, dafür musst du den Inhalt des String feldes natürlich erstmal nach Integer konvertieren...
blightzero
 
Beiträge: 66
Registriert: 13.12.06 17:19
Wohnort: Aachen

Re: Java

Beitragvon Coolcat » 06.05.11 18:54

ich kann jetzt mit indexof eine Spalte einlese aber ich bekomme nur - einsen warum ???????

Weil indexOf den Index, also die Position des Zeichens, im String zurück gibt. Das hätte auch im oben von mir zitierten Teil der API-Doku gestanden.

Allerdings hast du geschrieben, dass du die Spalten schon mit datei.split(";") getrennt hast? Wozu brauchst du dann noch indexOf ?
My software never has bugs. It just develops random features.
Benutzeravatar
Coolcat
Promoter
 
Beiträge: 2574
Registriert: 28.11.05 21:26
Wohnort: Kohlscheid / Düsseldorf
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Re: Java

Beitragvon merla » 09.05.11 10:51

sorry konnte leider nicht voeher antworten
Muss es umbedingt Java sein?
es muss in java sein

und bei indexof habe ich nicht gut aufgepasst danke coolcat .ich dachte ich bekomme damit die enthaltene Daten (also im ersten spalte sind es zahlen)
:?:
merla
 
Beiträge: 48
Registriert: 11.12.10 17:35
Studiengang: Informatik (B.Sc.)

Re: Java

Beitragvon Coolcat » 09.05.11 11:09

ich dachte ich bekomme damit die enthaltene Daten

Klar, das geht auch über indexOf, aber der von under_score vorgeschlagene Weg mit split ist der einfachere.

So, ein letzter Versuch meinerseits:
Code: Alles auswählen
int summe = 0;
while ( /* Datei nicht zuende */ ) {

   String line = /* nächste Zeile aus Datei holen */
   String[] columns = line.split(";", 3);
   for (int i=0; i<columns.length; ++i) {
      try {
         String stringInZelle = columns[i];
         int zahlInZelle = Integer.parseInt(stringInZelle);
         summe += zahlInZelle;
      }
      catch (NumberFormatException e) {
         // alles ignorieren was nicht Zahl ist
      }
   }
}

System.out.println("Die Summe ist " + summe + " !!");
My software never has bugs. It just develops random features.
Benutzeravatar
Coolcat
Promoter
 
Beiträge: 2574
Registriert: 28.11.05 21:26
Wohnort: Kohlscheid / Düsseldorf
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Re: Java

Beitragvon merla » 09.05.11 11:35

ist lieb von dir danke , ich probiere es jetzt damit hoffentlich klappt :pcfreak:
merla
 
Beiträge: 48
Registriert: 11.12.10 17:35
Studiengang: Informatik (B.Sc.)

Re: Java

Beitragvon heipei » 09.05.11 14:31

FYI, hier ist ein awk-Befehl der Folgendes macht:
* Drei Spalten summieren, alles was kein "int" ist wird dabei ignoriert
* Am Ende Summe und Average ausgeben
Code: Alles auswählen
awk -F ";" '{SUM1 += $1; SUM2 +=$2; SUM3 += $3} END {print SUM1, SUM1/NR, SUM2, SUM2/NR, SUM3, SUM3/NR}' foobar
Java: If all you have is a hammer, everything looks like a nail.
Benutzeravatar
heipei
Moderator
 
Beiträge: 769
Registriert: 02.11.06 21:55
Wohnort: Aachen
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: Medizin

Re: Java

Beitragvon merla » 09.05.11 23:34

Danke mehr zu wissen ist immer gut.
eine Anfänger-Frage jetzt :mrgreen: wo kompiliert man so was :roll: ?
merla
 
Beiträge: 48
Registriert: 11.12.10 17:35
Studiengang: Informatik (B.Sc.)

Nächste

Zurück zu Forum