# txt einlesen, ändern, neuschreiben



## minority (28. September 2004)

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


----------



## Thomas Darimont (28. September 2004)

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


----------



## minority (28. September 2004)

*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


----------



## Thomas Darimont (28. September 2004)

Hallo,

versuchs doch mal hiermit:


```
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:

```
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:

```
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


----------



## minority (29. September 2004)

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?


----------



## Thomas Darimont (29. September 2004)

Hallo!

Das liegt wohl an Leezeilen innerhalb des Log-Files...
versuchs mal damit:

```
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:

```
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:

```
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


----------



## Sergunja (30. September 2004)

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 ?


----------

