# Anfänger Problem- Java Eingabe durch Datei



## Fraenzchen (10. März 2008)

Hallo, 

ich soll über eine mir gegebene Textdatei mehrere Java-Arrays füllen. Insgesamt sind es vier vom Typ double und drei vom Typ long deren Größe ebenfalls durch die Datei bestimmt wird, durch die ersten drei übergebenen Variablen, danach werden erst die double und danach die long Arrays gefüllt. Wie die Datei von der ich die Werte bekomme aussehen soll, kann ich selbst bestimmen. Wie kann ich das in Java umsetzen, ich hab bisher nur gelernt, wie ich von der Konsole einlese. 

Da das meine erste Frage ist bitte noch etwas nachsichtig mit mir sein. Falls noch was unklar ist einfach Fragen, über Hilfe wär ich sehr dankbar.


----------



## Kryptaesthesie (10. März 2008)

Hallo.
Zeig uns doch mal, wie die Quell-Datei, sprich die Text-Datei aussieht.

Lesen tust du dann mit einem Gebilde, etwa wie:

```
BufferedReader in = new BufferedReader(
          new InputStreamReader(
            new FileInputStream( "MyFile.txt" ) ) );
        String s = in.readLine();
        in.close();
```

Oder an welcher Stelle hapert's?

MfG Gerrit


----------



## mk666 (10. März 2008)

Hallo!

Das ist auch nicht weiter schwer. Am einfachsten geht das ganze mit einem BufferedReader. Mit dem kannst du deine Textdatei zeilenweise einlesen und verarbeiten.

Nachlesen kannst du das z.B. in der JavaInsel (http://www.galileocomputing.de/open...13_007.htm#mjb94ff89a43468eaab01527570e4ff423). Ein Blick in die API oder eine Suche hier im Forum bringt dich bestimmt auch schnell weiter.

Gruß


----------



## Fraenzchen (10. März 2008)

Also wie gesagt die Datei besteht noch nicht. Die erstell ich dann wenn ich weiß wie es am einfachsten für Java wäre. Das ganze soll eigentlich nur ne Übung für mich sein damit ich Java lerne. Ich übersetz eigentlich nur ein C Programm in ein Java Programm ist alles n bisschen komplexer.


----------



## zerix (10. März 2008)

Hallo,

Du sagst, du schreibst ein C-Programm in Java. Wie sieht denn die Datei von dem C-Programm aus?

MFG

Sascha


----------



## Fraenzchen (10. März 2008)

Da ich noch nicht weiss wie man das so hübsch zwischenrein hängt muss ich es leider direkt drunter schreiben. 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

```
long indat(nscf,nel,hqz,nqz,mqz,zt,up,zk,xko,yko,zko,o,bndn)

 long *nscf; 
 long nel[],hqz[],nqz[],mqz[],bndn[ND][ND];  
 double zt[],up[],zk[],xko[],yko[],zko[],o[]; 

        {  /*** Einlesen der Datei die als erstes Argument in argv **/
           /*** uebergeben wird.                                   **/
         long nza,natom,bndi,i,j,BNDM,result;

         *nscf=nmxscf;
         result = scanf("%d %d %d",&natom,&BNDM,nscf);
         nza= natom-1;  
         
         printf("Vor bndi \n"); 
         printf(" %ld %ld \n",nza, result);
         getchar();
          
         


         for (i=0;i<=nza;i++) {
         scanf("%d %d %d %d %lf",&o[i],&zt[i],&up[i],&zk[i]); }


         for (i=0;i<=nza;i++){
         scanf("%lf %lf %lf",&xko[i],&yko[i],&zko[i]); }
        
         if (BNDM==1)
         for (i=0;i<=nza;i++)
            for (j=0;j<=NBOND-1;j++){
               scanf("%d",&bndi);
                  if ((bndi >0) && ((bndi-1) != i))  
                    bndn[i][bndi-1]=1;  }
         
         return(nza);
        }  /** Ende des Lesens der Eingabedatei                    **/
```
 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Das ist jetzt aber nur die Eingabe, das komplette Programm umfasst über 1500 Zeilen und den Rest hab ich schon übersetzt. Die Arrays die übergeben werden sind in der main deklariert aber als externe.


----------



## zerix (10. März 2008)

Schaust du mal bei dir in der Toolbar. Da ist ein Button mit einer Raute drauf. Da kannst du dann den Code einfügen.

Ich meinte nicht den Quelltext der C-Datei. 

Befüllt das C-Programm die Arrays nicht aus einer Datei?

MFG

Sascha


----------



## Fraenzchen (10. März 2008)

Doch aber das Programm ist gut 20Jahre alt und deswegen gibt es das nicht mehr ganz. ; p


----------



## zeja (10. März 2008)

In Java kannst du das fast genauso machen. Statt scanf benutzt du dann


```
scanf("%d %d %d %d %lf",&o[i],&zt[i],&up[i],&zk[i]);
```



```
String line = //aktuelle Zeile aus deiner Datei z.B. mit BufferedReader.readLine()
Object [] objects = new MessageFormat("%d %d %d %d %lf").parse(line);
```

In objects steht dann das was geparst wurde, also das was in c als Referenz angegeben werden kann.


----------



## Clash (12. März 2008)

Hi,
du kannst die Sache noch dahingehend vereinfachen, dass du den Scanner aus java.util benutzt:

```
Scanner scan = new Scanner(myFile);
```

mittels scan.next...() kannst du jeweils das nächste Double, Float, Byte etc. auslesen.

grüße,
Clash


----------

