Daten in Array als INT-Wert einlesen - jetzt als csv Datei

schranze

Mitglied
Hallo, ich habe bislang als Datenlieferant ein File das so aussah:

"
Stock Code
Stock Description
500
540
29
"

mit dem folgenden Code geht das auch sehr gut - keine Frage!

Java:
import java.io.* ;

public class HexusProb {
/*Declare arrays, ten is arbitrary value */
static String[] StockCode = new String[10] ;
static String[] StockDesc = new String[10] ;
static int[] CurrentLevel = new int[10] ;
static int[] ReorderLevel = new int[10] ;
static float[] Price = new float[10] ;

public static void main(String[] args) {

try {

BufferedReader fileIn =
new BufferedReader(new FileReader(args[0]));

int count = 0 ;

String in = fileIn.readLine() ;
while(in!=null) {

StockCode[count] = in ;
StockDesc[count] = fileIn.readLine() ;
CurrentLevel[count] = Integer.parseInt(fileIn.readLine()) ;
ReorderLevel[count] = Integer.parseInt(fileIn.readLine()) ;
Price[count] = Float.parseFloat(fileIn.readLine()) ;
in = fileIn.readLine() ;
count++ ; /* increment counter */
} /* End of while */

} catch(IOException ioe) {
ioe.printStackTrace() ;
}

displayRecords() ;
System.exit(0) ;

} /* End of main */

/* This prints out the arrays to the console */
public static void displayRecords() {

for (int i = 0 ; i <= (StockCode.length-1) ; i++) {

if(StockCode[i]==null)
return ; /* end of useful data */

System.out.print("\t"+StockCode[i]);
System.out.print("\t\t"+StockDesc[i]);
System.out.print("\t\t"+CurrentLevel[i]);
System.out.print("\t\t"+ReorderLevel[i]);
System.out.print("\t\t"+Price[i]);

}

}
}

jetzt wird das System aber so umgestellt, dass die Daten mit Komma getrennt sind also so z.B.

"
Stock Code, Stock Description, 500, 540, 29
Stock Code, Stock Description, 520, 580, 31
"

ich schaffe es nicht das mit line.split(",") abzuändern - sollte doch möglich sein?

mir geht es darum das es als string und integer werte gelesen werden kann

Danke für die Hilfe!
 
Hi,

wenn ich dich korrekt verstanden habe, möchtest Du aus deinen vorhandenen Variablen eine Zeile erstellen, die deine Variablen zusammenführt, durch Kommas trennt und die du mit der Mehtode split() später wieder aufsplitten kannst!?
Das würde dann ungefähr so aussehen:

Java:
  /* This prints out the arrays to the console */
  public static void displayRecords() {
    for (int i = 0 ; i <= (StockCode.length-1) ; i++) {
      if(StockCode[i]==null)
        return ; /* end of useful data */

      //Die Variablen zusammenführen:
      String commaLine = StockCode[i] + "," + StockDesc[i] + "," + CurrentLevel[i] + "," + ReorderLevel[i] + "," + Price[i];

      //Wieder aufsplitted:
      String[] splittedLine = commaLine.split(",");
      /*
      spliitedLine[0] ist dann StockCode[i]
      spliitedLine[1] ist dann StockDesc[i]
      ...
      */
    }
  }

Aber wenn Du dies nur versuchst um deine Integer Variable als String zu verarbeiten, kannst Du das auch leichter haben:
Java:
Integer.toString(ReorderLevel[i])

Greetz
Crasher
 
die Ausgabe auf der Konsole ist nur um zu sehen, ob die Daten richtig eingelesen wurden 😉

oben der Code liest ein File ein, was die Daten Zeilenweise auseinander getrennt drin stehen hatte

jetzt liegt mir ein File vor, wo die Daten immer in einer Zeile getrennt durch Komma stehen - das versuche ich gerade richtig einzulesen - ich bekomme es nur nicht hin - am Ende will ich das wie oben im Bsp. auf der Konsole ausgeben können / die Daten anders weiter verwenden können - da brauch ich die Integer und Float-Werte

Danke für die Hilfe!
 
weil heute so ein schöner Tag ist ;-)

Java:
String in = fileIn.readLine();
         while (in != null) {
            String[] parts = in.split(", ");

            StockCode[count] = parts[0];
            StockDesc[count] = parts[1];
            CurrentLevel[count] = Integer.parseInt(parts[2]);
            ReorderLevel[count] = Integer.parseInt(parts[3]);
            Price[count] = Float.parseFloat(parts[4]);
            in = fileIn.readLine();
            count++; /* increment counter */
         } /* End of while */

noch eine Anmerkung

static String[] StockCode = new String[10] ;
static String[] StockDesc = new String[10] ;
static int[] CurrentLevel = new int[10] ;
static int[] ReorderLevel = new int[10] ;
static float[] Price = new float[10] ;


ist nicht sehr objektorientiert... es wäre schöner, wenn du dir eine Klasse machst die diese 5 Eigenschafte besitzt und dann eine Liste hast die einfach Objekte dieser Klasse beinhaltet...
 
weil heute so ein schöner Tag ist ;-)


noch eine Anmerkung

static String[] StockCode = new String[10] ;
static String[] StockDesc = new String[10] ;
static int[] CurrentLevel = new int[10] ;
static int[] ReorderLevel = new int[10] ;
static float[] Price = new float[10] ;


ist nicht sehr objektorientiert... es wäre schöner, wenn du dir eine Klasse machst die diese 5 Eigenschafte besitzt und dann eine Liste hast die einfach Objekte dieser Klasse beinhaltet...

Erstmal Danke für den genialen Tipp. Es funktioniert. :applaus:

Die Anmerkung ist auch richtig. Da muss ich mich in das Thema wieder einfuchsen. Warum ich das unbedingt als static damals deklariert hatte, weiß nicht nicht mehr. Anzahl 10 ist auch hinfällig. Liste ist wesentlich länger jetzt. Hatte da den Fehler "Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10"

Wie war das mit variabel gestalten? Wenn ich mich irgendwie noch entsinnen kann, war glaube das damals mein Problem und hab das über static gemacht. Sinnvoller ist jedenfalls das Ding objektorientiert zu gestalten.
 
Wie war das mit variabel gestalten? Wenn ich mich irgendwie noch entsinnen kann, war glaube das damals mein Problem und hab das über static gemacht. Sinnvoller ist jedenfalls das Ding objektorientiert zu gestalten.

Ich war lange nicht mehr mit der Thematik beschäftigt. Hab jetzt ein Tag lang verbracht das Array dynamisch hin zu bekommen und das schön sauber Objekt orientiert zu gestalten.

Mein Fehlermeldung war das immer: "Cannot make a static reference to the non-static field java"

Hab doch glatt vergessen das Arrays in Java nur statisch gehen :autsch:

Ich sollte jetzt mal den Versuch über ArrayList machen. Ich hoffe mal ich komme da zum gewünschten Erfolg.
 

Zurück
Oben