txt einlesen, ändern, neuschreiben

minority

Grünschnabel
hallo

ich sollte ein programm schreiben mit java, das eine log file einliest, dann verändert und in einer neuen txt file abspeichertt.
das logfile schaut in etwa so aus:

2004.09.24 22:52:00
bla1.xxx 142
bla2.xxx 132
bla3.xxx 882
bla4.xxx 1234
2004.09.24 23:14:00
bla1.xxx 24
bla2.xxx 134
bla3.xxx 636
bla4.xxx 566
2004.09.25 01:34:00
bla1.xxx 646
bla2.xxx 3432
bla3.xxx 342
bla4.xxx 94
...

Daraus sollte eine Output Datei wie folgt erzeugt werden:
2004.09.24 22:52:00, 142, 132, 882, 1234
2004.09.24 23:14:00, 24, 134, 636, 566
2004.09.25 01:34:00, 646, 3432, 342, 94

das programm soll also die logs von mehreren zeilen auf eine nehmen und mit kommas trennen.
die log datei wird übrigens alle paar stunden erweitert.

der sinn von der sache ist, dass man das ganze dann mit der komma version in excel einlesen kann.


könnt ihr mir helfen
 
Hallo!

Kommen nach den Datumswerten immer nur 4 Zeilen?
Muss jedes mal das ganze Log durchgegangen werden, oder kann ich mir auch die letzte Zeile des vorhergehenden Durchgangs merken und dann beim nächsten Aufruf an dieser Stelle weiter machen?

Gruß Tom
 
re

1) nein jenachdem kommen mehr als 4 nach dem datum , das kann ändern
2) nein nicht unbedingt, es würde reichen, wenn immer nur das neue gelesen wird. spielt also keine rolle ob so, oder so
 
Hallo,

versuchs doch mal hiermit:

Code:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class LogAnalyzer {

	public static void main(String[] args) {
		try {
			FileReader fr = new FileReader("c:/logIn.txt");
			BufferedReader br = new BufferedReader(fr);

			FileWriter fw = new FileWriter("c:/logOut.txt", true);
			BufferedWriter bw = new BufferedWriter(fw);

			parse(br, bw);

			br.close();
			bw.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * @param br
	 * @param bw
	 */
	private static void parse(BufferedReader br, BufferedWriter bw)
		throws IOException {
		List list = new ArrayList();
		String line = null;
		StringBuffer buffer = null;
		boolean flag = false;
		while (true) {

			if (!flag)
				line = br.readLine();
			if(line == null) break;

			buffer = new StringBuffer();
			if (Character.isDigit(line.charAt(0))) {
				buffer.append(line);
				buffer.append(" ");
				while ((line = br.readLine()) != null
					&& !Character.isDigit(line.charAt(0))) {
					int pow = line.lastIndexOf(' ');
					list.add(line.substring(pow));
				}
				flag = true;
				Iterator iter = list.iterator();
				while(iter.hasNext()){
					String s = (String) iter.next();
					buffer.append(s);
					if(iter.hasNext())
						buffer.append(",");
				}
				
				bw.write(buffer.toString());
				bw.newLine();
				list.clear();
			}

		}

	}
}

Input File:
Code:
2004.09.24 22:52:00
bla1.xxx 142
bla2.xxx 132
bla3.xxx 882
bla4.xxx 1234
2004.09.24 23:14:00
bla1.xxx 24
bla2.xxx 134
bla3.xxx 636
bla4.xxx 566
2004.09.25 01:34:00
bla1.xxx 646
bla2.xxx 3432
bla3.xxx 342
bla4.xxx 94

Output File:
Code:
2004.09.24 22:52:00  142, 132, 882, 1234
2004.09.24 23:14:00  24, 134, 636, 566
2004.09.25 01:34:00  646, 3432, 342, 94

Gruß Tom
 
hallo tom

vielen dank fuer deine schnelle antwort.
es hat mir sehr weitergeholfen

aber bei mir kommen immer folgende meldungen wenn ich es ausführe:

java.lang.StringIndexOutOfBoundsException: String index out of range: 0

at java.lang.String.charAt(String.java:444)

at jmeter.LogAnalyzer.parse(LogAnalyzer.java:54)

at jmeter.LogAnalyzer.main(LogAnalyzer.java:24)

Exception in thread "main"


an was liegt das wohl?
 
Hallo!

Das liegt wohl an Leezeilen innerhalb des Log-Files...
versuchs mal damit:
Code:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class LogAnalyzer {

	public static void main(String[] args) {
		try {
			FileReader fr = new FileReader("c:/logIn.txt");
			BufferedReader br = new BufferedReader(fr);

			FileWriter fw = new FileWriter("c:/logOut.txt", true);
			BufferedWriter bw = new BufferedWriter(fw);

			parse(br, bw);

			br.close();
			bw.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * @param br
	 * @param bw
	 */
	private static void parse(BufferedReader br, BufferedWriter bw)
		throws IOException {
		List list = new ArrayList();
		String line = null;
		StringBuffer buffer = null;
		boolean flag = false;
		while (true) {

			if (!flag)
				line = br.readLine();

			if (line == null)
				break;

			buffer = new StringBuffer();
			if(line.equals("")){
				flag = false;
				continue;
			}
			if (Character.isDigit(line.charAt(0))) {
				buffer.append(line);
				buffer.append(" ");
				while ((line = br.readLine()) != null
					&& !line.equals("")
					&& !Character.isDigit(line.charAt(0))) {
					int pow = line.lastIndexOf(' ');
					list.add(line.substring(pow));
				}
				flag = true;
				Iterator iter = list.iterator();
				while (iter.hasNext()) {
					String s = (String) iter.next();
					buffer.append(s);
					if (iter.hasNext())
						buffer.append(",");
				}

				bw.write(buffer.toString());
				bw.newLine();
				list.clear();

			}
		}
	}
}

Input-File:
Code:
2004.09.24 22:52:00
bla1.xxx 142
bla2.xxx 132
bla3.xxx 882
bla4.xxx 1234
2004.09.24 23:14:00
bla1.xxx 24
bla2.xxx 134
bla3.xxx 636
bla4.xxx 566
2004.09.25 01:34:00
bla1.xxx 646
bla2.xxx 3432
bla3.xxx 342

bla4.xxx 94
2004.09.25 01:36:00
2004.09.25 01:51:00
bla3.xxx 342

Output File:
Code:
2004.09.24 22:52:00  142, 132, 882, 1234
2004.09.24 23:14:00  24, 134, 636, 566
2004.09.25 01:34:00  646, 3432, 342, 94
2004.09.25 01:36:00 
2004.09.25 01:51:00  342

Gruß Tom
 
Hallo
Ich will aus .txt file die Daten einlesen und in einem int array speichern. Die Daten haben solche Form:
1880 1881 1867.......
1882 1882 1860....
...
Wie mache ich, dass für jede zeile eine array entsteht und jedes wert in einem feld liegt ?
 
Zurück