Problem Dateiarbeit: split und trim

Status
Nicht offen für weitere Antworten.

munay

Mitglied
Hallo,

ich will innerhalb einer Methode einen Datensatz aus einer Datei auslesen. Diese Datei besteht aus 2 Kopfzeilen. Danach folgen 100 Zeilen mit jeweils 5 Spalten, welche eingelesen werden sollen. Die Daten sind durch Leerzeichen getrennt und bestehen aus double werten. Es kann sein, dass die Anzahl dieser Leerzeichen variiert. Genau da liegt auch mein Problem: Füge ich in meinen Datensatz an beliebiger Stelle eine Spalte mit Leerzeichen ein, ist meine ArrayList auf einemal doppelt so lang un dich kanns mir nicht erklären. Aber hier erstmal der code:

Code:
private void readDataFromFile() throws IOException {
	RandomAccessFile file;
	String line;
	String[] result;
	double[] entry;
	int i =0, col=0 ;
	// Datei zum Lesen öffnen:
	file=new RandomAccessFile(datname, "r");			
	//Zeilenweises abarbeitender Datei:
	while ((line = file.readLine()) != null) {	
	    // entry soll Daten einer Zeile enthalten:
	    entry=new double[4];	
	    // Einlesen der 2 Kopfzeilen:
	    if (i<=1){
		header[i]=line;
	    }
	    //Daten stehen in den Zeilennummern:
	    if (i>1 && i<102){
		//Aufteilen einer Zeile in ein Array von Strings:
		result =line.split("\\s");
		col=0;
		for (int j=0; j<result.length; j++){
		    //Überflüssige Leerzeichen abschneiden:
		    String wort=result[j].trim();
		    //Leere Strings ignorieren:
		    if (!wort.equals("") ){
		    	//Erste Spalte (indizes) wird ignoriert:
		    	if (col!=0){
                                                //Einträge einer Zeile generieren 
                                                 // (Umwandlung in Double):
                                                entry[col-1]=Double.valueOf(wort).doubleVaue();
			}		
			//Spaltenindex der Matrix erhöhen:
                                                col++;
			}
		}
		// Zeile dem dynamischen Feld hinzufügen:
		matrix.add(entry);
	}
	// Zeilenindex erhöhen:
	i++;	
	
	file.close();
}

Wie man sieht lese ich jede Zeile ein, Splitte sie durch Leerzeichen und trimme die Felder des Arrays, so dass nur noch der double Wert drin steht. anschließend schreibe ich die werte in den array entry und füge jede zeile der ArrayList Matrix zu.

Wie schon gesagt, füge ich zwischen spalte 1 und 2 einfach eine Leere Spalte ein, enthält meine "matrix" alle Werte doppelt, also 1-100 und dann nochma das gleich in zeile 101-200.

hoffe das ganze ist verständlich formuliert. bin für jede hilfe dankbar!

gruß munay
 
S

SlaterB

Gast
gehe runter auf 1 oder 2 statt 100 Zeilen und poste dann ein Beispiel einer solchen Datei mit und ohne Leerzeichen

falls du selber denken willst:
dein Code verräte doch genau, wann und wo Elemente eingefügt werden,
die Anzahl hängt anscheinend direkt von der äußeren while-Schleife ab,

schreibe an erster Stelle in die while-Schleife:
System.out.println(durchlauf i, aktuelle Zeile ist ..);
usw



auch beim selber testen sind 1 oder 2 statt 100 Zeilen hilfreich ;)
 

munay

Mitglied
also meiner meinung nach, lag der fehler hier:

result =line.split("\\s");

mit
result =line.split(" ");

funktionierts nämlich. aber danke für den tipp es mit weniger zeilen zu versuchen. stehe aber nun vor einem neuen problem im gleichen kontext:

Code:
  20	 99.2743 	29.0802   -27.4889         4.30027
  21	100.2609 	28.4577   -26.8478         4.33224

ist in den daten ein Sprung in der Anzahl der Zeichen, wi ein Zeile 21, spalte 2, bekomme ich als ausgabe:

Code:
99.2743 29.0802 -27.4889 4.30027
28.4577 -26.8478 4.33224 0.0

der betreffende eintrag wird also ignoriert...warum?
 
S

SlaterB

Gast
ich kann das nicht nachvollziehen, ich werde z.B. nicht dein gesamtes Programm mit der Datei usw. nachbauen,

allgemeiner Tipp den du folgen oder ignorieren kannst:
schreibe keine kompletten Programme, wenn du dich darin nicht zurechfindest

die 100.2609 wird nicht eingelesen? nun, dann erstelle eine Datei nur mit der 100.2609 drin und fange an nur diese einzulesen, statt 100 Zeilen anderer Code drumherum,
bisschen extremes Vorgehen, aber ich bin grad genervt weil ich den Fehler nicht sehe ;)
(und du gar nix beiträgst außer 'wird also ignoriert...warum?')

bei mir läuft jedenfalls alles:

Code:
class Test
{

    public static void main(String args[])
        throws Exception
    {
        // RandomAccessFile file;
        // String line;
        String[] result;
        double[] entry;
        int i = 0, col = 0;
        // Datei zum Lesen öffnen:
        // file=new RandomAccessFile(datname, "r");
        // Zeilenweises abarbeitender Datei:

        String[] lines = new String[4];
        lines[0] = "";
        lines[1] = "";
        lines[2] = "20    99.2743    29.0802   -27.4889         4.30027 ";
        lines[3] = "21   100.2609    28.4577   -26.8478         4.33224 ";


        // while ((line = file.readLine()) != null) {
        for (String line : lines)
        {
            // entry soll Daten einer Zeile enthalten:
            entry = new double[4];
            // Einlesen der 2 Kopfzeilen:
            if (i <= 1)
            {
                // header[i]=line;
            }
            // Daten stehen in den Zeilennummern:
            if (i > 1 && i < 102)
            {
                // Aufteilen einer Zeile in ein Array von Strings:
                result = line.split("\\s");
                col = 0;
                for (int j = 0; j < result.length; j++)
                {
                    // Überflüssige Leerzeichen abschneiden:
                    String wort = result[j].trim();
                    // Leere Strings ignorieren:
                    if (!wort.equals(""))
                    {
                        // Erste Spalte (indizes) wird ignoriert:
                        if (col != 0)
                        {
                            // Einträge einer Zeile generieren
                            // (Umwandlung in Double):
                            entry[col - 1] = Double.valueOf(wort).doubleValue();
                            System.out.print(+entry[col - 1] + " ");
                        }
                        // Spaltenindex der Matrix erhöhen:
                        col++;
                    }
                }
                System.out.println();
                // Zeile dem dynamischen Feld hinzufügen:
                // matrix.add(entry);
            }
            // Zeilenindex erhöhen:
            i++;

            // file.close();
        }
    }
}

->

99.2743 29.0802 -27.4889 4.30027 
100.2609 28.4577 -26.8478 4.33224
 

munay

Mitglied
sorry for being genervt :)

ich weiss nicht ob du meinen 2. beitrag überlesen hast, aber da ändere ich ja eine zeile, nämlich

result =line.split("\\s"); in result =line.split(" ");

damit funktioniert dann zwar die leerzeichen-geschichte aus meinem ersten Beitrag, aber wie ich gerade bemerkt habe eben nicht das einlesen der zahl 100.2609.

der hund liegt also definitiv in der Angabe des split zeichens begraben.

habe gerade in einem anderen forum folgende aussage gefunden:

wofür ist denn eigentlich das + in str.split("\\s+")?

die methode String.split(String) erwartet eine Regular Expression, und + heisst in einer RE: 'das vorige zeichen kommt mindestens einmal oder öfter vor'. D.h ohne das + würde der string "a b" in "a" und " b" aufgesplittet werden, mit dem + in "a" und "b".

und mit dem + im code klappt alles.

danke für eure zeit und hilfe!

gruß Munay
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
M Input/Output Fallunterscheidung Problem Java Basics - Anfänger-Themen 17
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
G Subset sum problem mit Backtracking Java Basics - Anfänger-Themen 18
N Problem mit Scanner Java Basics - Anfänger-Themen 2
J Klassen Problem Java Basics - Anfänger-Themen 8
A Out.format problem. Java Basics - Anfänger-Themen 3
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9
A Array problem Java Basics - Anfänger-Themen 16
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
W Remote Method Invocation RMI - Problem Java Basics - Anfänger-Themen 0
I Ich habe ein Problem Java Basics - Anfänger-Themen 3
A Problem bei returnen eines Wertes Java Basics - Anfänger-Themen 6
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
D Input/Output Problem bei der Benutzereingabe eines Befehls Java Basics - Anfänger-Themen 14
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
F Habe ein problem mit dem ActionListener Java Basics - Anfänger-Themen 3
C Regex-Problem Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
M Problem in der Modellierung Java Basics - Anfänger-Themen 20
W Wo ist das URL-Problem ? Java Basics - Anfänger-Themen 1
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
D FileWriter / FileReader Problem Java Basics - Anfänger-Themen 10
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
C Problem mit If Else If und Überprüfung eines Counters Java Basics - Anfänger-Themen 3
F Problem mit Listen Java Basics - Anfänger-Themen 5
I wieder mit einer Umwandelung habe ich Problem (diesmal von char Array zu char) Java Basics - Anfänger-Themen 1
J Problem bei Umrechnung von Hex in Bin Java Basics - Anfänger-Themen 4
W Problem bei Programmierung von Monte-Carlo-Integration Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben