2dArray

Neuling47

Aktives Mitglied
Hallo zusammen ich habe mal eine frage bin im ersten Semester und soll eine csv.datei schreiben die Aufgabe lautet:

Schreiben Sie eine Klasse, die die Werte zweidimensionaler Arrays in csv-Dateien schreibt. Ihre Klasse soll folgende Methoden beinhalten:
Eine Methode, die die Werte eines zweidimensionalen int-Arrays (zeilenweise) als Zahlen in eine csv-Datei schreibt. (Achten Sie darauf, dass die Werte (als String) durch Semikolon getrennt in die Datei geschrieben werden. Achten Sie außerdem darauf dass ein Semikolon nur zwischen den Werten stehen soll, nicht am Ende der Zeilen.)

ich hab versucht mich schlau zu machen bevor ich hier rein schreibe, doch bin total verwirrt wäre nett wenn mir jemand helfen könnte(ansatz oder eine gut erklärte seite zeigt)

Vielendank
 
M

Mart

Gast
eine CSV datei hat einen Delimiter dh der kann ; oder Tab sein ... gehen wir mal davon aus wir nehmen ;

dann würde eine "theoretische" csv datei so aussehen
Java:
Name;Alter,Zweiter_NAME
Bob;13;Hans
Edeltraud;25;Dampf
im prinzip musst du dein Array so umbauen dass das raus kommt

spalten und reihne... 2d array... sollte zusamen hängen ;)
 

Neuling47

Aktives Mitglied
eine CSV datei hat einen Delimiter dh der kann ; oder Tab sein ... gehen wir mal davon aus wir nehmen ;

dann würde eine "theoretische" csv datei so aussehen
Java:
Name;Alter,Zweiter_NAME
Bob;13;Hans
Edeltraud;25;Dampf
im prinzip musst du dein Array so umbauen dass das raus kommt

spalten und reihne... 2d array... sollte zusamen hängen ;)
Danke erstmal für deine Antwort aber schlauer bin ich davon nun nicht geworden:)
könntest du es mir bitte etwas leichter machen
 
M

Mart

Gast
ok ... ich zeige dir mal ein Zauber werk

1. Du machst deinen Text editor auf ( windows text editor ... gedit .. vim scheiß egal )
2. da copy und pastest du das da rein
Java:
Name;Alter,Zweiter_NAME
Bob;13;Hans
Edeltraud;25;Dampf
3. du speicherst es als xyyzasdf.csv
4. du öffnest es mit Libre Excel, microsoft excel ... irgend ein excel und mal schauen was passiert
5. du wirst sehen die Spalten werden richtig eingetragen und es funktioniert .. tada csv erstellt ;)

... ein wert in einer CSV geht soweit bis der Delimiter kommt, dann wird eine Neue Zelle benutzt
ein zeilenumbruch in der CSV datei sagt dass es einee reihe ist

dh... du musst dein 2d array so hinrichten dass du in eine Datei deinen Output rein schreibst dass es dem format entspricht und als .csv speicherst .. das wars :)

wenn du den Delimiter nicht verstehst wirst du die aufgabe auch nicht verstehen...der ist standardmäßig semikolon
 

Neuling47

Aktives Mitglied
ok ... ich zeige dir mal ein Zauber werk

1. Du machst deinen Text editor auf ( windows text editor ... gedit .. vim scheiß egal )
2. da copy und pastest du das da rein
Java:
Name;Alter,Zweiter_NAME
Bob;13;Hans
Edeltraud;25;Dampf
3. du speicherst es als xyyzasdf.csv
4. du öffnest es mit Libre Excel, microsoft excel ... irgend ein excel und mal schauen was passiert
5. du wirst sehen die Spalten werden richtig eingetragen und es funktioniert .. tada csv erstellt ;)

... ein wert in einer CSV geht soweit bis der Delimiter kommt, dann wird eine Neue Zelle benutzt
ein zeilenumbruch in der CSV datei sagt dass es einee reihe ist

dh... du musst dein 2d array so hinrichten dass du in eine Datei deinen Output rein schreibst dass es dem format entspricht und als .csv speicherst .. das wars :)

wenn du den Delimiter nicht verstehst wirst du die aufgabe auch nicht verstehen...der ist standardmäßig semikolon
Alles klar ich denke mein Array hab ich soweit hinbekommen wie mach ich das nun in java zu eine csv.datei?
 
M

Mart

Gast
hab ich dir doch gesagt
.. du outputst deine Array in dem Format das ich dir geschrieben habe... mit FileWriter... oder Printwriter.. ob das wirklich eine ist ist ja komplett irrelevant... das programm muss es lesen klönnen und das format oben kann jedes excel lesen

falls du erwartest "in der bibliothek java.xyz.csvschreiberlin" zu bekommen : diese gibts net
 

Neuling47

Aktives Mitglied
hab ich dir doch gesagt
.. du outputst deine Array in dem Format das ich dir geschrieben habe... mit FileWriter... oder Printwriter.. ob das wirklich eine ist ist ja komplett irrelevant... das programm muss es lesen klönnen und das format oben kann jedes excel lesen

falls du erwartest "in der bibliothek java.xyz.csvschreiberlin" zu bekommen : diese gibts net
also ich bin echt zu blöd dafür habs versucht es im editor zu speicern und ausgeben zu lassen aber es kommt in Excel nicht so wie gedacht also mein code ist so:
Java:
public class csvArray {

    public static void main(String[] args) {
        
        String name[][] = new String[3][3];
        name[0][0] ="Name";
        name[0][1]="Alter";
        name[0][2]="Zweiter_Name";
        name[1][0]="Bob";
        name[1][1]="13";
        name[1][2]="Hans";
        name[2][0]="Edeltraud";
        name[2][1]="25";
        name[2][2]="Dampf";
        for(int i=0; i<3; i++)
        {
            for(int j=0; j<3; j++)
            {
                System.out.println("name["+i+"] ["+j+"] ="+name[i][j]);
            }
        }
    }

}
ob's nun falsch ist es ne andere sache nur dachte ich muss ich das den nicht vielleicht im code eingeben z.b. datei.csv oderso?
 
M

Mart

Gast
ja aber das stimmt ja nich...

du solltest
Java:
name;alter;zweiter_name
Bob;25;hans
zb als output haben aber dein output ist ja ganz ANDERSCH... das entspricht nich dem Format das ich beschrieben hatte :(
Java:
name[1]{2]

zusätzlich greifst du hier nicht auf array werte zu ... du baust dir da einen string zusammen nur so nebenbei
 
M

Mart

Gast
um dir einen anstupser zu geben... die "titel" reihe kannst du einfach so ausprintln
zb so
Java:
System.out.println("Alter"+";"+"Name"+";"+"Zweiter_Name")

dass die Semikolons als extra strings stehen hat einen grund... vllt kann man das links und rechts von denen durch werte in aus einem array das so rum liegt befüllen
 

Neuling47

Aktives Mitglied
ja aber das stimmt ja nich...

du solltest
Java:
name;alter;zweiter_name
Bob;25;hans
zb als output haben aber dein output ist ja ganz ANDERSCH... das entspricht nich dem Format das ich beschrieben hatte :(
Java:
name[1]{2]

zusätzlich greifst du hier nicht auf array werte zu ... du baust dir da einen string zusammen nur so nebenbei
also war das was ich gemacht hab kompletter müll?
 
M

Mart

Gast
nein
das array als beispiel sieht richtig aus

nur dein System out println string der drin steht passt noch nicht

der hinweis von mir mit der titel liste... war ein hinweis darauf wie du den string zusammen bauen kannst ... ob du ihn extra machst oder nicht ist irrelevant
 

Neuling47

Aktives Mitglied
nein
das array als beispiel sieht richtig aus

nur dein System out println string der drin steht passt noch nicht

der hinweis von mir mit der titel liste... war ein hinweis darauf wie du den string zusammen bauen kannst ... ob du ihn extra machst oder nicht ist irrelevant
Hmm habs nun so ist aber wohl immer noch falsch
Java:
System.out.println("Name"+";"+"Alter"+";"+"Zweiter_Name");
                System.out.println((name[1][0])+";"+(name[1][1])+";"+(name[1][2]));
                System.out.println((name[2][0])+";"+(name[2][1])+";"+(name[2][2]));

java gibt dies aus
Name;Alter;Zweiter_Name
Bob;13;Hans
Edeltraud;25;Dampf
Name;Alter;Zweiter_Name
Bob;13;Hans
Edeltraud;25;Dampf
Name;Alter;Zweiter_Name
Bob;13;Hans
Edeltraud;25;Dampf
Name;Alter;Zweiter_Name
Bob;13;Hans
Edeltraud;25;Dampf
Name;Alter;Zweiter_Name
Bob;13;Hans
Edeltraud;25;Dampf
Name;Alter;Zweiter_Name
Bob;13;Hans
Edeltraud;25;Dampf

wieso aber?
 
M

Mart

Gast
Hmm habs nun so ist aber wohl immer noch falsch
Java:
System.out.println("Name"+";"+"Alter"+";"+"Zweiter_Name");
                System.out.println((name[1][0])+";"+(name[1][1])+";"+(name[1][2]));
                System.out.println((name[2][0])+";"+(name[2][1])+";"+(name[2][2]));

java gibt dies aus
Name;Alter;Zweiter_Name
Bob;13;Hans
Edeltraud;25;Dampf
Name;Alter;Zweiter_Name
Bob;13;Hans
Edeltraud;25;Dampf
Name;Alter;Zweiter_Name
Bob;13;Hans
Edeltraud;25;Dampf
Name;Alter;Zweiter_Name
Bob;13;Hans
Edeltraud;25;Dampf
Name;Alter;Zweiter_Name
Bob;13;Hans
Edeltraud;25;Dampf
Name;Alter;Zweiter_Name
Bob;13;Hans
Edeltraud;25;Dampf

wieso aber?
worauf bezieht sisch das wieso ?

ich weis nicht ob es beabsichtigt war dass es 10 mal ausgegeben wurde... wahrscheiinlich schon ?
das format sieht richtig aus

hätte ich den Code könnte ich vllt den Knoten lösen
 

Neuling47

Aktives Mitglied
worauf bezieht sisch das wieso ?

ich weis nicht ob es beabsichtigt war dass es 10 mal ausgegeben wurde... wahrscheiinlich schon ?
das format sieht richtig aus

hätte ich den Code könnte ich vllt den Knoten lösen
Wieso gibt die Console es 10 mal aus so soll es ja gar nicht sein und was ist in meiner aufgabe mit Semikolon gemeint hab ich es dann erfüllt die aufgabe?
 
M

Mart

Gast
das semikolon = der delimiter den ich angesprochen hatte ... wenn du die aktuelle ausgabe in die Text datei kopierst und diese mit Excel aufmachst wirds auch funktionieren ( gib dateityp .csv an um es einfacher zu machen )

dass es so oft ausgegeben wird ist sehr wahrscheinlich ein schleifen fehler :)
damit meine ich... es ist 100% ein schleifen fehler
 

Neuling47

Aktives Mitglied
das semikolon = der delimiter den ich angesprochen hatte ... wenn du die aktuelle ausgabe in die Text datei kopierst und diese mit Excel aufmachst wirds auch funktionieren ( gib dateityp .csv an um es einfacher zu machen )

dass es so oft ausgegeben wird ist sehr wahrscheinlich ein schleifen fehler :)
damit meine ich... es ist 100% ein schleifen fehler
Achsoo ja es funktioniert in Excel nur das es das selber 4 mal ausgibt nun muss ich nur noch diesen Fehler finden dann hab ich es auch endlich geschafft vielen dank ich hab dir bestimmt deine Kraft geraubt :D
 
M

Mart

Gast
nunja .. die aufgabe war es eine csv DATEI auszugeben => nach dem durchlauf kommt die datei raus und nicht im terminal ;)

thema filewriter... outputstreams

2. ... was ist wenn ich aber andere spalten will .. mehr spalten ? dann funktioniert es nicht mehr ... also universeller programmieren

falls du keine Klassen und objekte hattest ignorier ( bzw lies dich in deinem Tempo erstmal ein )

eine klasse mit einer methode
Java:
void printToCSV(String[][] csvData)
{
    ...
}
wäre schon mal MINDESTENS für OOP angesehen

PS deine i und j sind selten dämlich benannt :D
wie wäre es denn hiermit zb

Java:
for ( int rowIndex = 0; ...)
{
    for (int columnIndex = 0 ...)
    {
        String[] row = csvData[rowIndex];
        System.out.println(row[columnIndex])
    }
}

meines erachtens ist meins besser lesbar ;)
 
M

Mart

Gast
zusätzlich "schreibe die zieln einzeln in eine datei" ... um ehrlich zu sein.. dasd ist selten dämlich ... in servver seitiger programmierung ist es wichtig dass man kein ping pong spielt und diese aufgabe zwingt dich dazu
Java:
Programm: Schreib Zeile
Server: bin fertig
Programm: Schreib Zeile
Server: bin fertig
Programm: Schreib Zeile
Server: bin fertig
Programm: Schreib Zeile
Server: geh mir bitte nicht auf den sack
... man schickt 1 mal den ganzen schinken und gut is
 

Neuling47

Aktives Mitglied
nunja .. die aufgabe war es eine csv DATEI auszugeben => nach dem durchlauf kommt die datei raus und nicht im terminal ;)

thema filewriter... outputstreams

2. ... was ist wenn ich aber andere spalten will .. mehr spalten ? dann funktioniert es nicht mehr ... also universeller programmieren

falls du keine Klassen und objekte hattest ignorier ( bzw lies dich in deinem Tempo erstmal ein )

eine klasse mit einer methode
Java:
void printToCSV(String[][] csvData)
{
    ...
}
wäre schon mal MINDESTENS für OOP angesehen

PS deine i und j sind selten dämlich benannt :D
wie wäre es denn hiermit zb

Java:
for ( int rowIndex = 0; ...)
{
    for (int columnIndex = 0 ...)
    {
        String[] row = csvData[rowIndex];
        System.out.println(row[columnIndex])
    }
}

meines erachtens ist meins besser lesbar ;)
ja da hast du völlig recht ich hätte noch ne frage. ich habe schonmal ne textdatei ausgeben lassen und das hab ich so gemacht
FileWriter writer;
File datei = new File("DateiSchreiben.txt");

es kann doch nicht sein das ich bei einer csv es erst in einem Edior eingebe und dann als csv speicher oder?
 
M

Mart

Gast
es kann doch nicht sein das ich bei einer csv es erst in einem Edior eingebe und dann als csv speicher oder?
absolut korrekt aber du hast etwas noch nicht verstanden

undzwar datei namen :)

wenn bie einer datei ".txt" dahinter steht was hat das für einen effekt auf die datei? absolut GAR KEINEN

dh die datei endung hat NULL einfluss auf den inhalt , die Programme die die datei nutzen könnnen anhand des dateinamens suchen zb in "datei öffnen" und einen Filter auf .csv setzen... kannst aber alle dateien als csv einlesen lassen ob sie das richtige drinnen haben steht in der datei drin

dass du ".csv" angeben solltest hat folgenden hintergrund das nutzende programm ( windows oder linux... ) haben "standard programme" eingestellt dh wenn die .csv heißt hießt es für windows beim doppelklick "mach excel auf"
Java:
FileWriter writer;
File datei = new File("DateiSchreiben.csv");
und tada du hast ne gültige csv datei geschrieben


den inhalt musst du halt rein schreiben dann.. ne leere datei bleibt und ist leer
 

Neuling47

Aktives Mitglied
absolut korrekt aber du hast etwas noch nicht verstanden

undzwar datei namen :)

wenn bie einer datei ".txt" dahinter steht was hat das für einen effekt auf die datei? absolut GAR KEINEN

dh die datei endung hat NULL einfluss auf den inhalt , die Programme die die datei nutzen könnnen anhand des dateinamens suchen zb in "datei öffnen" und einen Filter auf .csv setzen... kannst aber alle dateien als csv einlesen lassen ob sie das richtige drinnen haben steht in der datei drin

dass du ".csv" angeben solltest hat folgenden hintergrund das nutzende programm ( windows oder linux... ) haben "standard programme" eingestellt dh wenn die .csv heißt hießt es für windows beim doppelklick "mach excel auf"
Java:
FileWriter writer;
File datei = new File("DateiSchreiben.csv");
und tada du hast ne gültige csv datei geschrieben


den inhalt musst du halt rein schreiben dann.. ne leere datei bleibt und ist leer
okey vielen Dank du hast mir echt sehr weiter geholfen ich werde das noch weiter üben mit anderen aufgaben
Liebe grüße und nochmal danke dir
 
M

Mart

Gast
die aufgabe hatte 2 probleme die du nicht lösen konntest
1. es hat dir MISERABEL erklärt warum eine CSV datei einen Delimiter hat und wie der Aussieht
2. du solltest es zeilenweise rein schreiben ( was in ernsthaften anwendungen auf DB seite katastrophal ist.. )

jetzt hast du sie gelöst bzw wirst sie noch besser lösen
 

Neuling47

Aktives Mitglied
die aufgabe hatte 2 probleme die du nicht lösen konntest
1. es hat dir MISERABEL erklärt warum eine CSV datei einen Delimiter hat und wie der Aussieht
2. du solltest es zeilenweise rein schreiben ( was in ernsthaften anwendungen auf DB seite katastrophal ist.. )

jetzt hast du sie gelöst bzw wirst sie noch besser lösen
ja das war echt ein Riesen Problem für mich aufgrund von der Corona Pandemie ist auch alles online und wir kriegen immer Beispiel Videos aber dazu kam einfach keins was die Sache erschwert hat. Ich hätte es echt ohne dich nicht hin bekommen
 
M

Mart

Gast
ich hab keine zeile code geschrieben... das sind deine

nungut das mit dem umbennen war halt als tipp hingeworfen
 

Ähnliche Java Themen


Oben