# ASCII-File Importieren



## jmh (9. November 2009)

Hallo,

ich muss für die Uni ein kleines Programm schreiben. Habe mich für Java entschieden, da es Plattform unabhängig ist. Allerdings habe ich keine Erfahrungen mit Java.
Ich versuche gerade ein Ascii-File zu importieren (siehe Anhang). Dabei soll der Header ignoriert werden und dann die Spalten „Zeit“ und „Wert1“ jeweils in eine Arraylist importiert werden, die Anderen Einträge sollen ignoriert werden. Da die  Anzahl an Einträgen variiert habe ich mich für eine Arraylist entschieden. Der Rest braucht nicht gespeichert zu werden. Ich habe bereits mehrere Anleitungen/Hilfestellungen zum einlesen gefunden. Nur leider nicht wie man diese Einträge dann in einer bzw. zwei verschieden Arraylisten speicher.

http://www.java-tips.org/java-se-tips/java.io/how-to-read-file-in-java.html

http://www.tutorials.de/forum/java-grundlagen/313186-csv-datei-einen-array-einlesen.html

Ist es möglich die Startzeile durch eine if schleife zu realisieren. In der Art wie: If line startet ohne “ dann beginne einzulesen?

Danke für eure Hilfe


----------



## Anime-Otaku (9. November 2009)

1. Ein If ist keine Schleife, sondern eine Fallunterscheidung. Eine Schleife ist for oder while.

Ich würde auf 2 Sachen prüfen beim importieren.
1. Leerzeilen mit string.isEmpty(), vorher die whitespaces mit trim entfernen.
2. Das es nicht mit einem Kommentarzeichen (z.B. #)  oder sonst ein Zeichen was du nicht erwartest (")anfängt. (string.startsWith)


----------



## xrax (9. November 2009)

Meinst du vielleicht sowas...


```
BufferedReader buf=new  BufferedReader(new FileReader(f));
                for(String x=buf.readLine();x!=null;x=buf.readLine()){
                   myArrayList.add(x);
                    }
```


----------



## jmh (9. November 2009)

Erstmal Danke für eure Antworten.

Ich bin leider noch absoluter Anfänger. Mir geht es gerade erstmal um die rangehensweiße.
Versuche mal eure Lösungen zu verstehen 
Wie ist es am einfachsten die Datei zu importieren und zu sortieren?

Danke


----------



## xrax (9. November 2009)

Hallo jmh,

als kompletter Anfänger wäre es vielleicht besser ein paar Tutorials durchzuarbeiten. 
Als Literatur kann ich dir die "Java ist auch eine Insel" empfehlen.

Beste Grüße
xrax


----------



## jmh (10. November 2009)

Hallo xrax,

das habe ich auch bereits gemacht nur Hilft mir das bei dem Problem leider gerade nicht weiter da ich igendwie nicht den richtigen Ansatz finde.

Trotzdem Danke


----------



## kabel2 (10. November 2009)

Wie jetzt den richtigen Ansatz?

Du musst lediglich das Format der Daten kennen. (Das ist das eigentliche Problem bei solchen Problemen...)
Kannst Du davon ausgehen, dass immer die ersten 9 Zeilen Blindtext enthalten?
Eventuell noch ein regulärer Ausdruck, aber das braucht es auch nicht, ist ja eine _tab separated file_.

Java als Sprache finde ich etwas unglücklich für die Aufgabe.
Allein schon das Einlesen (siehe Post von xrax) sieht gar fürchterlich aus(nix gegen den Code!), weil länglich.
Perl hat nen eigenen Kommandozeilenschalter, der eine while()-Schleife vor dem Kommandozeilenausdruck hinzufügt -- sehr geile Sache, wenn mans braucht. 
Das .Net Framework/C# ist mit LINQ jetzt auch in der Skriptsprachen-Liga, das ist ein einziger Ausdruck, wenn man die obige Annahme über das Datenformat macht.
Geht mit Java sicher auch, allerdings mit Bordmitteln oder ob man ein klitzekleines Framework braucht, steht woanders.


----------



## Anime-Otaku (10. November 2009)

xrax hat dir eigentlich schon einen guten Ansatz geliefert. Nur ich finde 1+1 zusammen zu zählen musst du schon selbst. Du musst ja auch was lernen dabei. 
Es bringt dir ja nichts wenn wir alles vorkauen.


----------



## jmh (10. November 2009)

So ich habe heute nochmal das ein oder andere tutorial gemacht.

Bei meinem Problem bin ich nun soweit das ich die Datei Zeile für Zeile importieren kann und jeweils den mich intressierenden datenteil per .substring herrauslöse. Soweit so gut. Nur habe ich jetzt das Problem das ich daraus keine Arraylist erstellen kann. Wenn ich dieses Versuche bekomme ich nur eine Liste mit kommas. Ich ahbe bereits versucht eine seperator einzufügen per .replace das funkioniert aber dann komme ich]eider nicht weiter. 
	
	
	



```
package lineImport;

import java.io.File;
import java.io.FileReader;
import java.io.LineNumberReader;
import java.io.ObjectInputStream.GetField;
import java.util.ArrayList;

import java.util.Arrays;
import java.util.List;


public class LineImportTime
{
 

	public static void main(String[] args) throws Exception
    {
        File file = null;
        FileReader fr = null;
        LineNumberReader lnr = null;

        try
        {
            // read a file called test.txt
            // information data.
            file = new File("c:/.../test.txt");
            
            fr = new FileReader(file);            
            lnr = new LineNumberReader(fr);
            
            // If we set the line number of the LineNumberReader here we'll
            // got the line number start from the defined line number + 1
      
            String line = "";            
            while ((line = lnr.readLine()) != null)
            {
                int i = lnr.getLineNumber();
                
                if(lnr.getLineNumber()<=9)
                    i=28;//OK
                else
                        i=29;//OK
//                	else
//                		if(lnr.getLineNumber()==100)
//                            i=18;
//                		else
//                			if(lnr.getLineNumber()==1000)
//                                i=18;
//                    		else
//	                			if(lnr.getLineNumber()<=1)
//	                				i=17; //OK
//	                			else
//	                				if(lnr.getLineNumber()<=10)
//	                					i=19; //OK
//	                					else
//	                						if(lnr.getLineNumber()<=100)
//	                        					i=19; //OK
//	                        					else
//	                        						i=23;
				// print out the data and show what line is currently read by our program.
                // substring 
                // replace 
                                
                String splittemp = line.substring( i, line.length()).replace(',', '.').replace(' ', ',');
//                ArrayList<String> strlst1 = new ArrayList<String>();
//                strlst1.add(i, line.substring( i, line.length()).replace(',', '.'));
//                System.out.println(strlst1);
//                
//                
//                Arrays.asList(splittemp.split(splittemp,'/'));
//                System.out.println(Arrays.asList(splittemp.split(splittemp, '.')));
                System.out.println(line.substring( i, line.length()).replace(',', '.').replace(' ', ',')+ "         Line Number "+ lnr.getLineNumber());
                
                
            }} finally
        {
            // Don't forget to close the stream when we finish reading the file.
            if (fr != null)
            {
                fr.close();
            }
            if (lnr != null)
            {
                lnr.close();
            }
        }

    
    }
```

Das Ergebniss in der Konsole sieht in etwa so aus:

Meine Frage ist nun wie erzeuge ich darau seine Arraylist?


,23.87         Line Number 1
,23.86         Line Number 2
,23.86         Line Number 3
,23.86         Line Number 4
,23.86         Line Number 5
,23.86         Line Number 6


Dank im Vorraus


----------

