Einlesen von *.txt

strußi

Top Contributor
Servus zusammen,

Ausgangssituation:
ich hab eine Textdatei, welche ich einlesen möchte, funktioniert soweit auch bis auf den unteren bereich in dem die messwerte stehen

die datei wähle ich ein filechooser aus - funktioniert
Java:
import except.MyException;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
import main.Top;

/**
 *
 * @author Christian
 */
public class FileChooser{
    Top t =new Top();
    MyException mx =new MyException();

    /**
     * Methode öffnet einen Filechooser ( Browser) mit dem man nach der InputdateTimei
     * suchen kann
     * Über FileFilter die Auswahl der zu öffnenden Dateien einschränken
     * 
     * @return String mit den Angaben Pfad und Dateiname
     */
    public File openFile(){
        JFileChooser jfc =new JFileChooser(); //Erstellen des Filechooser
        jfc.showOpenDialog( jfc); //FileChooser vom Typ SaveDialog
        File file =jfc.getSelectedFile(); //Auslesen des Augewählten Pfades
        return file; //Rückgabe des Strings => Pfad und Dateiname
    }

    /**
     * Methode öffnet einen Filechooser(  Browser) in dem man den Speicherplatz
     * und den Dateinamen eintragen kann, in dem später das Protoll gespeichert
     * werden soll.
     *
     * @return String mit den Angaben Pfad und Dateiname
     */
    public String saveFile(){
        String pfad;
        JFileChooser jfc =new JFileChooser();
        jfc.setFileFilter( new FileNameExtensionFilter( "Textdateien", ".txt"));
        jfc.showSaveDialog( jfc);
        File f =jfc.getSelectedFile();
        if( f ==null){
            String datname =t.dateTime();
            mx.speichernFelder( datname);
            pfad =datname;
        } else{
            pfad =f.toString();
        }
        return pfad;
    }
    
}

dann in konverter packen - funktioniert teilweise, die kopfdaten (alles bis #Messwerte)

Java:
import daten.DatenMesswerte;
import daten.DatenTreppen;
import except.ParseThought;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 *
 * @author Christian
 */
public class Konverter{
    ParseThought pt =new ParseThought();
    DatenMesswerte dm =DatenMesswerte.getInstance();
    DatenTreppen dt =DatenTreppen.getInstance();
    
    /**
     * Methode für die Unterteilung in Kopf und Probenwerte
     * @param list ArrayList<> mit den Werten aus einer Datei
     * @return 
     */
    public double[][] messwerteKonverter( ArrayList<String> list){
        String line;
        double[][] werte=null;
        boolean kommentar;
        for( int lines =0; lines <list.size(); lines++){
            line =list.get( lines);
            line =line.trim();
            kommentar =line.contains( "#");
            if( kommentar ==true){
                if( line.charAt( 0) =='#'){
                    if( line.contains( "#messwerte")){
                        List<String> sublist = list.subList( lines +1, list.size());
                        werte =readMesswerte( sublist);
                        break;
                    } else{}
                } else{
                    for( int i =0; i <line.length(); i++){
                        if( line.charAt( i) =='#'){
                            line =line.substring(0, i);
                            break;
                        } else{}
                    }
                    readHeader( line);
                }
            } else{
                readHeader( line);
            }
        }
        return werte;
    }
    
    /**
     * Methode prüft welcher Wert ausgelesen worden ist und schreibt diesen in 
     * in die Instanz DatenMesswerte
     * @param line Ausgelesene Zeile mit den Werten
     */
    private void readHeader( String line){
        String typ;
        String valueString;
        Scanner s;
        s =new Scanner( line);
        typ =s.next();
        valueString = line.substring( typ.length());
        valueString =valueString.trim();
        valueString =valueString.replace( ',', '.');
        switch( typ){
            case "r:":
                dm.setR( pt.pFloat( valueString, "r"));
                break;
            case "rm:":
                dm.setRm( pt.pFloat( valueString, "rm"));
                break;
            case "Ausfallwahrscheinlichkeit:":
                dm.setAusfallwahrscheinlichkeit( pt.pFloat( valueString, "Ausfallwahrscheinlichkeit"));
                break;
            case "ng:":
                dm.setNG( pt.pInt( valueString, "Ng"));
                break;
            case "belastung:":
                dm.setProbenbelastung( pt.pByte( valueString, "Probenbelastung"));
                break;
            case "probenanzahl:":
                dm.setProbenanzahl( pt.pInt( valueString, "Probenanzahl"));
                break;
            case "dauerfestigkeit:":
                dm.setDauerfestigkeit( pt.pInt( valueString, "Dauerfestigkeitsbereich"));
                break;
            case "probentyp:":
                dm.setProbentyp( pt.pByte( valueString, "Probentyp"));
                break;
        }
    }
    
    /**
     * Methode übernimmt die Probenwerte
     * @param line 
     */
    private double[][] readMesswerte( List<String> line){
        int lineCount =1;
        ArrayList<double[]> result =new ArrayList<>();
        double[] werte =new double[ 4];
        Scanner scanner;
        String amplitude;
        double amp;
        String schwingspiel;
        double swing;
        String probenverlauf;
        double verlauf;
        
        for( int lines =0; lines <line.size(); lines++){
            String in =line.get( lines);
            if( in.contains( "#")){
                in = in.substring( 0, in.indexOf( '#'));
            }
            scanner =new Scanner( in);
            amplitude =scanner.next();
            amp = pt.pDouble( amplitude, "Amplitude");
            while( scanner.hasNext()){
                werte[ 0] =lineCount;
                werte[ 1] =amp; // amp
                schwingspiel =scanner.next();
                    swing =pt.pDouble( schwingspiel, "Scwhingspiel");
                    werte[ 2] =swing; //swing
                probenverlauf =scanner.next();
                verlauf =pt.pDouble( probenverlauf, "Scwhingspiel");
                    werte[ 3] =verlauf; //Verlauf
                result.add( werte);
                lineCount +=1;
            }
            System.out.println( "next level");
        }
        //einzelne Wertevektoren in eine Matrix überführen
        double[][] uebergabe = new double[ result.size()][4];
        for( int row= 0; row <uebergabe.length; row++){
            for( int col =0; col <uebergabe[ row].length; col++){
                werte =result.get( row);
                uebergabe[ row][ col] = werte[col];
            }
        }
        return uebergabe;
//        dm.setMesswerteDouble( uebergabe);
    }
}

in der while-schleife spukt es und ich bin mir fällt nich auf wo der fehler liegt
die ausgabe messwerte ist diese
Der erste wert in jeder messwertzeile soll für alle wertepaare der zeile übernommen werden
due 13 soll eine fortlaufende nummerierung sein und die 75 sollte 200, 133.33 und 75 sein



run:
next level
next level
next level
13.0 | 75.0 | 715234.0 | 0.0 |
13.0 | 75.0 | 715234.0 | 0.0 |
13.0 | 75.0 | 715234.0 | 0.0 |
13.0 | 75.0 | 715234.0 | 0.0 |
13.0 | 75.0 | 715234.0 | 0.0 |
13.0 | 75.0 | 715234.0 | 0.0 |
13.0 | 75.0 | 715234.0 | 0.0 |
13.0 | 75.0 | 715234.0 | 0.0 |
13.0 | 75.0 | 715234.0 | 0.0 |
13.0 | 75.0 | 715234.0 | 0.0 |
13.0 | 75.0 | 715234.0 | 0.0 |
13.0 | 75.0 | 715234.0 | 0.0 |
13.0 | 75.0 | 715234.0 | 0.0 |
BUILD SUCCESSFUL (total time: 11 seconds)



# Alles was hinter '#' eingetragen wird als Kommentar angesehen und ignoriert
# Kommazahlen sind als x.41234 zu schreiben
Ausfallwahrscheinlichkeit: 1.282
r: 0.1
rm: 800
ng: 2000000 # kann noch nicht als z.b. 2e6 eingetragen werden
belastung: 1 #Spannung[MPa] =1 Kraft[kN] =5
probenanzahl: 13
probentyp: 4 #1 =Standardprobe, 2 =Schlitzprobe, 3 =Lochprobe, 4 =Kerbprobe, 5 =freiprobe
dauerfestigkeit: 120
#messwerte Amplitude eingeben N=Schwingspielzahl 0 =für Brüche 1=für Druchläufer
# jeweils erster wert der Zeile für weiter wertepaare übernehmen
200.00 14736 0 15728 0 16327 0 14022 0
133.33 60680 0 63262 0 57736 0 152823 1
75.00 453206 0 476188 0 381069 0 413101 0 715234 0


Meine frage, hat jmd spontan nen einfall wo mein geist hockt, der die werteübernahme vermasselt?

grüße und danke an alle Ratenden und Ratgebenden ;-)
 

FetterOtter

Bekanntes Mitglied
Hi,

du hast die Methode pDouble nicht gepostet, daher meine Frage: Bekommt sie als zweiten Parameter evtl. eine Bezeichnung, die abgefragt wird? Dann könnten nämlich die Schreibfehler in Zeile 123 und 126 stören...
 

strußi

Top Contributor
pDouble ist die unschöne variante einen String auf reine Zahlen zu überprüfen,

gibt es da eine schöne variante?

Java:
public double pDouble( String doubleText, String feldname){
        double retval =-1;
        try{
            retval =Double.parseDouble( doubleText.replace(',', '.'));
        } catch( NumberFormatException ex){
            mex.umwandlungsFehler( feldname);
        }
        return retval;
    }
 

strußi

Top Contributor
hab eine klasse in der ich die werte zwischenspeichere, sozusagen als schnittelle, damit ich aus verschiedenen Programmteilen drauf zugreifen kann. die ausgabe habe ich meiner testklasse
Java:
import java.io.File;
import java.util.ArrayList;
import stream.Cmd;
import stream.FileChooser;
import stream.Inputstream;
import stream.Konverter;

/**
 *
 * @author Christian
 */
public class InputstreamTest{
//    static File file;
    
    public static void testInput(){
        ArrayList<String> input;
        final FileChooser fc =new FileChooser();
        Inputstream ips =new Inputstream();
        Konverter konverter =new Konverter();
        File file =fc.openFile();
        
        input =ips.readData( file);
        double [][] werte =konverter.messwerteKonverter( input);
        Cmd.print(werte); //Printmethode 
    }
    
    public static void main( String[] args){
        testInput();
    }
            
}
 

strußi

Top Contributor
war ein flüchtigkeitsfehler, hab immer das gleiche array in meine liste gepackt
einfach werte = new double[]; in die while gepackt und schon gehts,
code kommt später
 

strußi

Top Contributor
Java:
private double[][] readProbenwerte( List<String> lines){
        ArrayList<double[]> result =new ArrayList<>();
        double[] werte;
        Scanner scanner;
        String amplitude;
        double amp;
        String schwingspiel;
        double swing;
        String probenverlauf;
        double verlauf;
        
        for( int line =0; line <lines.size(); line++){
            String in =lines.get( line);
            if( in.contains( "#")){
                in = in.substring( 0, in.indexOf( '#'));
            }
            scanner =new Scanner( in);
            amplitude =scanner.next();
            amp = parseTo.parseToDouble( amplitude, "Amplitude");
            while( scanner.hasNext()){
                werte =new double[ 3];
                werte[ 0] =amp; // amp
                schwingspiel =scanner.next();
                    swing =parseTo.parseToDouble( schwingspiel, "Scwhingspiel");
                    werte[ 1] =swing; //swing
                probenverlauf =scanner.next();
                verlauf =parseTo.parseToInteger( probenverlauf, "Versuchsergebnis");
                    werte[ 2] =verlauf; //Verlauf
                result.add( werte);
            }
        }
        //einzelne Wertevektoren in eine Matrix überführen
        double[][] uebergabe = new double[ result.size()][ 3];
        for( int row= 0; row <uebergabe.length; row++){
            for( int col =0; col <uebergabe[ row].length; col++){
                werte =result.get( row);
                uebergabe[ row][ col] = werte[ col];
            }
        }
        dm.setMesswerteDouble( uebergabe);
        uebergabe =dm.getMesswerteDouble();
        return uebergabe;
    }
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
S SeriellenPort einlesen Java Basics - Anfänger-Themen 3
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
julian0507 Wörter einlesen lassen und rückwärts ausgeben Java Basics - Anfänger-Themen 7
S JSON einlesen und benutzen Java Basics - Anfänger-Themen 5
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
I Ical4j / Kalender einlesen von URL - Fehler: "Unparseable date" Java Basics - Anfänger-Themen 16
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
sserio Txt Datei einlesen Java Basics - Anfänger-Themen 9
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
G JSP Textfeld einlesen Java Basics - Anfänger-Themen 2
M Einlesen > new Leser Java Basics - Anfänger-Themen 5
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
A Array einlesen und ausgeben Java Basics - Anfänger-Themen 13
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
S Wort einlesen Array ausgeben Java Basics - Anfänger-Themen 4
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
A Input/Output Mehrere Csv-Dateien einlesen Java Basics - Anfänger-Themen 2
S CSV einlesen und mit Komma trennen Java Basics - Anfänger-Themen 12
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
I Java-Wort einlesen und ausgeben Java Basics - Anfänger-Themen 7
J Csv-Datei einlesen Java Basics - Anfänger-Themen 52
JD_1998 Arrays einlesen, zwischenspeichern und wieder ausgeben Java Basics - Anfänger-Themen 8
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
L Datein einlesen Java Basics - Anfänger-Themen 1
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 32
E Input/Output Datei anhand von Dateinamen einlesen Java Basics - Anfänger-Themen 5
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
A Klasse um daten zu einlesen Java Basics - Anfänger-Themen 26
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
P Datei einlesen und zurückgeben Java Basics - Anfänger-Themen 5
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
E TXT FILE EINLESEN Java Basics - Anfänger-Themen 4
M Einzelzeichen einlesen Java Basics - Anfänger-Themen 2
C (char) Array einlesen Java Basics - Anfänger-Themen 8
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
E Mehrere Eingabezeilen gleichzeitig einlesen Java Basics - Anfänger-Themen 7
B HTML Datei einlesen und HTML Code in String wandeln Java Basics - Anfänger-Themen 19
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
P Text Datei einlesen und übertragen Java Basics - Anfänger-Themen 15
E Einteilung der Räume mit einlesen einer .txt datei Java Basics - Anfänger-Themen 16
P Array einlesen von Konsole Java Basics - Anfänger-Themen 8
D Eingaben in String Array einlesen Java Basics - Anfänger-Themen 12
B CSV einlesen - Parameter a) encoding b) delimiter Java Basics - Anfänger-Themen 7
R Compiler-Fehler Einlesen von Konsolenparameter funtioniert nichtmehr Java Basics - Anfänger-Themen 4
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
J Einlesen von Datei funktioniert nicht Java Basics - Anfänger-Themen 8
H Einlesen Java Basics - Anfänger-Themen 8
H Einlesen von Zahlen Java Basics - Anfänger-Themen 20
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
CptK Datentypen Text Dateien einlesen Java Basics - Anfänger-Themen 3
A Datentypen Unterschiedliche Datentypen in einer Eingabe einlesen Java Basics - Anfänger-Themen 2
R txt Einlesen und Verarbeiten Java Basics - Anfänger-Themen 15
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
K Sonderzeichen einlesen Java Basics - Anfänger-Themen 3
L Input/Output XML Datei einlesen (JAXB?) Java Basics - Anfänger-Themen 10
F Zahlen aus Datei einlesen und in Array speichern Java Basics - Anfänger-Themen 2
I Datei einlesen Java Basics - Anfänger-Themen 11
J Best Practice [Code Verbesserung] TXT einlesen und in Arrayliste speichern Java Basics - Anfänger-Themen 5
A Ungeordnetes Array ordnen, Zahl einlesen und einordnen Java Basics - Anfänger-Themen 23
R Erste Schritte Sicheres einlesen eines Strings Java Basics - Anfänger-Themen 2
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
C Erste Schritte Regex - Datei einlesen und splitten Java Basics - Anfänger-Themen 4
T Input/Output Einlesen eines .txt Files nur bei gesetztem Breakpoint möglich Java Basics - Anfänger-Themen 1
L RSA Public Key einlesen Java Basics - Anfänger-Themen 0
K Datei aus unbekannten Speicherorten einlesen Java Basics - Anfänger-Themen 1
T Datei in Array einlesen "null" Java Basics - Anfänger-Themen 8
U Daten aus Datei einlesen Java Basics - Anfänger-Themen 4
J Auslesen/speichern und wieder einlesen Java Basics - Anfänger-Themen 7
N Datei Zeilenweise einlesen, Ausgabe mehrere Arrays Java Basics - Anfänger-Themen 7
B Excel File einlesen und Überschrift prüfen Java Basics - Anfänger-Themen 8
M Einlesen von Integerwertern aus einer CSV Java Basics - Anfänger-Themen 8
? Methoden Boolean Wert vergleichen und einlesen Java Basics - Anfänger-Themen 1
K String einlesen und als Variable speichern Java Basics - Anfänger-Themen 8
K .txt einlesen und in ein Array packen Java Basics - Anfänger-Themen 2
M Erste Schritte Zahlen einlesen und auswerten Java Basics - Anfänger-Themen 6
N Best Practice CSV einlesen - Variables Array?! Java Basics - Anfänger-Themen 8
O Klassen Objektnamen für Methodenaufrauf einlesen lassen Java Basics - Anfänger-Themen 2
D Array Werte einlesen und ausgeben? Java Basics - Anfänger-Themen 8
C Java Scanner einlesen von txt Dokument InputMismatch Java Basics - Anfänger-Themen 9
V Hilfe zum Thema einlesen eines Datums Java Basics - Anfänger-Themen 5
E Erste Schritte txt.Datei mit BufferedReader einlesen und in 2D-Array abspeichern Java Basics - Anfänger-Themen 15
S Werte in Array einlesen Java Basics - Anfänger-Themen 2
A Textdatei mit BufferedReader einlesen Java Basics - Anfänger-Themen 0
P Einlesen von Daten via BufferedReader Java Basics - Anfänger-Themen 4
J Zahlen aus Konsole einlesen Java Basics - Anfänger-Themen 1
P Methoden ausgelesene (CSV-) Daten in Liste einer anderen Klasse einlesen Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben