Mit line.split() leider unterschiedliche Anzahl von Spalten

Status
Nicht offen für weitere Antworten.

spidermobile

Bekanntes Mitglied
Hallo Javagemeinde,

mir raucht leider mal wieder der Kopf.
Ich lese eine Datei zur Weiterverarbeitung ein. Leider ist das Inputformat ziemlich chaorisch.

Das ist meine Vorgabe aus der Datei:

"MA1
MA2
MA3
MA4" "19.12.2003" "ganztägig" "10:00" "10:15"

Eigentlich sollte es so aussehen:

"MA1" "19.12.2003" "ganztägig" "10:00" "10:15"
"MA2" "19.12.2003" "ganztägig" "10:00" "10:15"
"MA3" "19.12.2003" "ganztägig" "10:00" "10:15"
"MA4" "19.12.2003" "ganztägig" "10:00" "10:15"

D.h. ich habe unterschiedliche Anzahlen von Spalten pro Zeile. Ich muss mir nun die Zeilen mit den Inhalten MA1, MA2 ... merken, und wenn ich auf MA 4 treffe, den Inhalt von MA4 auf MA1 - MA 3 duplizieren.

Ich habe leider gar keinen Plan, wie ich das anstellen kann. Dazu kommt noch , dass die Anzahl der MA1-MA3 natürlich MA n sein kann.

Wie könnte ich das Problem angehen?

Grüße und danke für einen Tipp.
 

abollm

Top Contributor
spidermobile hat gesagt.:
[..]
"MA1
MA2
MA3
MA4" "19.12.2003" "ganztägig" "10:00" "10:15"

Sieht die Datei wirklich so aus, wie von dir oben beschrieben, d.h mit Zeilenumbrüchen?

Wenn ja, dann wird das schwierig werden.
 

spidermobile

Bekanntes Mitglied
Hi Wildcard,

ja, das mit dem RegEx habe ich bereits von Dir erfahren, habe es gelernt, und wende es auch an. Was ich mache. Ich habe mir ein kleines Projekt zum Lernen von Java hergenomen.
Ich lese aus unserem System im Büro die Daten in ASCII ein und baue mir in Java einen Offline-Reader.
Leider werden die Termine, wenn diese für mehrere Teilnehmer sind, so doof exportiert.

Das Einlesen, RegEx und weiterverarbeiten habe ich bereits fertig. Nun fehlt mir nur noch eine Lösung für dieses Problem.
 

spidermobile

Bekanntes Mitglied
Hi abollm,

ja das ist ja mein Problem. Das ist ein Datenexport aus einem Terminsystem. Die Erfinder waren wohl leider nicht sehr kreativ, oder doch :roll: .
 

Wildcard

Top Contributor
Wie gesagt, erklär mir mal genauer was du bekommst, und was dann passieren soll.
Was du mit dublizieren meinst versteh ich nicht wirklich.
 

abollm

Top Contributor
Hi spidermobile,

was ist das für ein System, aus dem exportiert wird? Ist das Standardsoftware à la Lotus Notes etc.? Wenn ja, dann könnte es eine Frage der Konfiguration sein.

Ich habe in dem Bereich ja schon viel erlebt, aber das ist mir in meiner Praxis, in der ich mich fast ständig mit ASCII-Dateiimporten herumschlagen muss, noch nicht untergekommen.

Gruß
 

spidermobile

Bekanntes Mitglied
oki,

das problem ist bei einem Termin, der von mehreren Personen wargenommen wird. Dann stehr leider nicht an jeder Person der komplette Termin, sondern leider nir der Name, also MA1 - MA3 und an MA 4 der Name und der Rest. Also muss ich mir wohl irgendwie die Namen von MA1 - MA3 merken, erkennen dass MA 4 nun alle Informationen hat, dann die Informationen:

"19.12.2003" "ganztägig" "10:00" "10:15" von MA 4 auf MA1 - MA 3

übertragen.

Rückwärtslesen wäre ein möglicher Ansatz. Dann bekomme ich nämlich zuerst MA4, dann würde vieles leichter werden.
 

abollm

Top Contributor
spidermobile hat gesagt.:
[..]
Rückwärtslesen wäre ein möglicher Ansatz. Dann bekomme ich nämlich zuerst MA4, dann würde vieles leichter werden.

OK, verstanden. Aber das Problem sind die Zeilenumbrüche innerhalb _eines_ Datensatzes. Kann man das evtl. umkonfigurieren seitens des führenden Terminverwaltungssystems?
 

Wildcard

Top Contributor
Also der erste gefundene vollständige Eintrag soll die anderen ergänzen?
Sollte machbar sein, ich schau mal ob ich schnell ein passendes Pattern basteln kann...
 

spidermobile

Bekanntes Mitglied
Hi abollm,

nein das ist leider ein sehr altes System, welches in Kürze auch abgelöst wird. Da liegt auch keine vernünftige DB dahinter, sonst würde ich diese anzapfen.

Wie schon gesagt, ich lerne mit dieser Aufgabe nur. Da dieses Problem wohl eine kleine Herausforderung darstellt, lerne ich bestimmt viel :)
 

Wildcard

Top Contributor
Also hier mein Vorschlag:
-String umdrehen und von hinten lesen
-die datensätze trennen(mit datensatz meine ich hier MA4-MA1 und so weiter)
-mit diesem Pattern den hinteren(jetzt vorderen Teil) raustrennen und an die Unvollständigen anfügen

Code:
(".*")("\w+")
Fehlt noch das Pattern um die Datensätze zu trennen. Ist dir bekannt wie viele Personen zu einem Satz gehören?
Währe einfacher...
 

Wildcard

Top Contributor
Code:
public class RegExTest
{

    public static void main(String[] args)
    {
        StringBuffer b = new StringBuffer("\"MA1\"\n\"MA2\"\n\"MA3\"\n\"MA4\" \"19.12.2003\" \"ganztägig\" \"10:00\" \"10:15\"\n" + "\"MA1\"\n\"MA2\"\n\"MA3\"\n\"MA4\" \"19.12.2003\" \"ganztägig\" \"10:00\" \"10:15\"");

        b.reverse();
        //damit die letzte(bzw. erste) zeile erkannt wird
        b.append("\n");
        Pattern pat = Pattern.compile("(.*?)(\"\\w+\"\\n)",Pattern.DOTALL);
        Matcher mat = pat.matcher(b.toString());
        b = new StringBuffer();
        String save ="";
        while (mat.find())
        {
            System.out.print(mat.group(1));
            if (!mat.group(1).equals(""))
                save= mat.group(1);
            
            System.out.print(mat.group(2));
            b.append(save);
            b.append(mat.group(2));
        }
        b.deleteCharAt(b.length()-1);
        b.reverse();
        System.out.println(b);
    }
}

richtig schön hässlich! In ordnung bringen musst du's selbst :wink:
 

spidermobile

Bekanntes Mitglied
Hallo Wildcard,

vielen lieben Dank für diesen Ansatz. Ich werde mich gleich heute Abend an die Arbeit machen.

Grüße

Rocco.
 
G

Guest

Gast
Hallo Wildcard,

falls Du noch mal reinschaust. Es ist nicht schön, aber ich habe es nun anders gelöst. Deine Lösung ist zwar viel besser, aber bei über 60.000 Sätzen vielleicht nicht die schnellste. Ferner hat das mit dem RegEx auch nicht so ganz gepasst. Sorry die Beispieldaten waren schlecht.

Ich poste mal mein Ergebnis (nicht schön aber es läuft)!

Code:
	   try { 
			FileInputStream fis = new FileInputStream(setprop.getDataPathTermine());
			InputStreamReader isr = new InputStreamReader(fis, setprop.getISO_Charset());
			BufferedReader buff = new BufferedReader(isr);			

			boolean eof = false; 
			int count = 0;
		    
			int pid = 0;      
			while(!eof) { 
				String line = buff.readLine();
				if (line == null) 
				   eof = true;
				else { 
					line = line.replaceAll("\"\"","\"keine\"");		
					line = line.replaceAll("\"","");					
					String[] array = line.split("\t"); 

					// Aufbau eines temp Arrays für Namen (temporär)
					if (array.length == 1) {
						more = true;
						tmpname.add(array[0]);
					} else {
						// Zusammenbauen der temp Arraydaten zum Gesamttermin
						if (more) {
							// hier aus temp Vector mit restlichen Daten Satz zusammenbauen
							Iterator iter = tmpname.listIterator();
							while(iter.hasNext())
							{
								ergname = (String)iter.next();
								datatermine.add(new DataTermineClass( ergname, array[1], array[2], array[3], array[4],  array[5], array[6], array[7], array[8], array[9], array[10], array[11], pid));
							}
							tmpname.clear();
							more = false;
						}
						more = false;
						datatermine.add(new DataTermineClass( array[0], array[1], array[2], array[3], array[4],  array[5], array[6], array[7], array[8], array[9], array[10], array[11], pid));
					}
					pid++;
				}
			}   
		buff.close();
		}
		catch (IOException e){ 
			System.out.println("Error-- " + e.toString()); 
		}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
lougoldi Command Line Java Basics - Anfänger-Themen 9
A Java command line binding (library)? Java Basics - Anfänger-Themen 5
B cal4j - Error at line 1:Unexpected end of file Java Basics - Anfänger-Themen 0
M Erste Schritte Mehrere eingaben in einer Line vergleichen (if equals...) Java Basics - Anfänger-Themen 6
B Wieso wird die Zeile "column" genannt und die Spalte "line"? Java Basics - Anfänger-Themen 12
D Java-API mit Command Line Tool für Rasenroboter umsetzen Java Basics - Anfänger-Themen 10
K RegEx - Multiple Line Java Basics - Anfänger-Themen 3
B Quellcode einelsen "line by line" (und abspeichern in file (txt) Java Basics - Anfänger-Themen 7
D java.util.NoSuchElementException: No line found Java Basics - Anfänger-Themen 11
G No line found-Fehler bei Scanner Java Basics - Anfänger-Themen 7
G Line Separator in ArrayList durch ";" ersetzen Java Basics - Anfänger-Themen 4
F Line zeichnen und Werte ändern Java Basics - Anfänger-Themen 6
G PrintWriter each line möglich? Java Basics - Anfänger-Themen 4
Dogge Multiple markers at line 15 Java Basics - Anfänger-Themen 13
F System.getProperty("line.separator") funkt. nicht Java Basics - Anfänger-Themen 4
H Multiple Markers at this line Java Basics - Anfänger-Themen 3
D Scanner hasNext(Line)() Block Problematik... Java Basics - Anfänger-Themen 6
H Command Line in Java Java Basics - Anfänger-Themen 3
E line=In.readLine() Java Basics - Anfänger-Themen 2
M Einlesen von Binärdateien (binary interleaved by line) Java Basics - Anfänger-Themen 3
M line.separator: Problem beim Lesen einer Datei Java Basics - Anfänger-Themen 11
J NullPointerException line = br.readLine().length() Java Basics - Anfänger-Themen 9
K Anzahl Zeichenfolge in Line ermitteln Java Basics - Anfänger-Themen 3
A Line-Editor Java Basics - Anfänger-Themen 2
P "Line too long" bei der Generierung des jars. Java Basics - Anfänger-Themen 5
W LocalDate toString und nach Split falsch "erkannt"? Java Basics - Anfänger-Themen 8
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
OnDemand Regex oder Split? Java Basics - Anfänger-Themen 5
I String.split regex Frage Java Basics - Anfänger-Themen 2
JavaClara Fehlermeldung bei split-Methode Java Basics - Anfänger-Themen 12
S String split Java Basics - Anfänger-Themen 12
Dimax String Split Java Basics - Anfänger-Themen 2
J Dynamisches Array durch split()-Funktion? Java Basics - Anfänger-Themen 3
D Kleine Probleme mit Split-Befehlen Java Basics - Anfänger-Themen 5
9 Error bei .split() Java Basics - Anfänger-Themen 2
S Methoden String: split Java Basics - Anfänger-Themen 5
T split innerhalb Klammern ignorieren? Java Basics - Anfänger-Themen 6
MR._FIRE_Flower String.split("(") geht nicht Java Basics - Anfänger-Themen 4
D Input/Output Split am Zeichen | Java Basics - Anfänger-Themen 2
W split()-Methode Java Basics - Anfänger-Themen 4
C Gleichung String Split Java Basics - Anfänger-Themen 6
agent47 Pattern split Java Basics - Anfänger-Themen 2
D BufferedReader/InputStreamReader/Split Java Basics - Anfänger-Themen 2
G String.split(".") Java Basics - Anfänger-Themen 3
F Methoden split() - Mehrere Zeichen Java Basics - Anfänger-Themen 5
R Split ab bestimmter Stelle Java Basics - Anfänger-Themen 9
A String Split Java Basics - Anfänger-Themen 4
K Split und ArrayList Java Basics - Anfänger-Themen 3
JAVAnnik split Methode Java Basics - Anfänger-Themen 1
K How to split my String Java Basics - Anfänger-Themen 2
L String array mit split füllen Java Basics - Anfänger-Themen 14
N split nullpoiner exception Java Basics - Anfänger-Themen 6
L Split + Zeilen einer Datei mit bestimmtem Inhalt löschen Java Basics - Anfänger-Themen 23
P CSV Datei in String Array -> Split -> New Array Java Basics - Anfänger-Themen 2
vandread String.split("\\") führt zu Error?! Java Basics - Anfänger-Themen 8
N Explode in Java (split). Komme nicht weiter. Java Basics - Anfänger-Themen 2
B Split, Exception - Obwohl es gehen MUSS Java Basics - Anfänger-Themen 3
S Probleme mit split Java Basics - Anfänger-Themen 5
N Probleme mit .split("\\.") Java Basics - Anfänger-Themen 6
N String [][] mit .split Java Basics - Anfänger-Themen 13
Helgon Regex Split Java Basics - Anfänger-Themen 2
B Array fehler bei string split Java Basics - Anfänger-Themen 4
L Methoden String.split nach Absätzen? Java Basics - Anfänger-Themen 8
S Split String für | Java Basics - Anfänger-Themen 2
K split() - Delimiter Java Basics - Anfänger-Themen 4
F Split Array auffüllen Java Basics - Anfänger-Themen 8
S Hexstring contains & split Java Basics - Anfänger-Themen 2
R String Delimiter (Split) einlesen Java Basics - Anfänger-Themen 9
R .split() - Problem Java Basics - Anfänger-Themen 5
0 String split und replace geht nicht Java Basics - Anfänger-Themen 17
T Syntax für .split mit Klammern Java Basics - Anfänger-Themen 2
T String Split? Java Basics - Anfänger-Themen 10
F String Split Problem mit "|" Java Basics - Anfänger-Themen 3
D String.split(...) Java Basics - Anfänger-Themen 4
Z split tut nicht, was es soll Java Basics - Anfänger-Themen 3
C Split Fehler? Java Basics - Anfänger-Themen 7
D BufferedWriter, split() und Zeilenumbrüche Java Basics - Anfänger-Themen 5
K Java Split mehrere Zeilen Java Basics - Anfänger-Themen 4
D BufferedReader und .split() Java Basics - Anfänger-Themen 3
Y split()-Methoden problem Java Basics - Anfänger-Themen 21
J String split-Funktion und Integer Java Basics - Anfänger-Themen 13
X nach split leerzeichen weg Java Basics - Anfänger-Themen 4
M Regex mit Split Java Basics - Anfänger-Themen 3
S String - Gegenteil von Split? Java Basics - Anfänger-Themen 2
L Java: split und trim Java Basics - Anfänger-Themen 6
D String.split(".") geht nicht? Java Basics - Anfänger-Themen 3
M split arbeitet nicht richtig Java Basics - Anfänger-Themen 2
D Split Java Basics - Anfänger-Themen 11
Eldorado Fehler bei String.split Java Basics - Anfänger-Themen 4
S String Split ohne Zeichen abzuschneiden Java Basics - Anfänger-Themen 7
MQue split()- Methode Java Basics - Anfänger-Themen 10
B Split() Funktion Java Basics - Anfänger-Themen 5
M String splitten mit split() Java Basics - Anfänger-Themen 4
T .split(";") nicht gleich große arrays werden erzeu Java Basics - Anfänger-Themen 2
S String split array.length Problem Java Basics - Anfänger-Themen 3
B String ordentlich trennen (regex, split())? Java Basics - Anfänger-Themen 11
J Problem mit Split und String Java Basics - Anfänger-Themen 3
G Probleme mit Split Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben