Textzeile mitten in die Datei schreiben, ohne den Text zu ersetzen

Aber du musst doch net eine Zeile mit ALLEN Zeilen vergleichen? Du musst doch immer nur 3 Zeilen vergleichen
 
Aber du musst doch net eine Zeile mit ALLEN Zeilen vergleichen? Du musst doch immer nur 3 Zeilen vergleichen


Hier ein Auszug aus einer der Warn-Dateien:
Code:
com.idms.web.core.struts.tiles.IDMSFactorySet 2007-10-17 18:49:25,607 -- WARN -- [getDefinitionsFactoryKey] no definition found! Returning null! This will result in loading the default-definition wich is the root-defintion!
com.idms.web.core.struts.tiles.IDMSFactorySet 2007-10-17 18:49:25,608 -- WARN -- [getDefinitionsFactoryKey] no definition found! Returning null! This will result in loading the default-definition wich is the root-defintion!
com.idms.dal.connection.impl.mdg.MDGConnection 2007-10-17 18:49:25,550 -- WARN -- [getArrayResultSet] received invalid MDG object for query: prices/status?VERSION=2&ID_QUALITY_PRICE=4&LANG=it&CODE_QUALITY_PRICE=BST&ZID=363234383035333b31303138303b753913b12850483b18899676963b&G_ID_USER_SESSION=6248053 / Error:MdgError (10000)(10000):10000:need ID_NOTATION or ID_INSTRUMENT
com.idms.web.core.struts.tiles.IDMSFactorySet 2007-10-17 18:49:25,608 -- WARN -- [getDefinitionsFactoryKey] no definition found! Returning null! This will result in loading the default-definition wich is the root-defintion!
com.idms.web.core.struts.tiles.IDMSFactorySet 2007-10-17 18:49:25,609 -- WARN -- [getDefinitionsFactoryKey] no definition found! Returning null! This will result in loading the default-definition wich is the root-defintion!
com.idms.web.core.struts.tiles.IDMSFactorySet 2007-10-17 18:49:25,609 -- WARN -- [getDefinitionsFactoryKey] no definition found! Returning null! This will result in loading the default-definition wich is the root-defintion!
com.idms.web.core.struts.tiles.IDMSFactorySet 2007-10-17 18:49:25,611 -- WARN -- [getDefinitionsFactoryKey] no definition found! Returning null! This will result in loading the default-definition wich is the root-defintion!
com.idms.dal.connection.impl.mdg.MDGConnection 2007-10-17 18:49:25,541 -- WARN -- [getArrayResultSet] received invalid MDG object for query: prices/status?VERSION=2&ID_QUALITY_PRICE=4&LANG=it&CODE_QUALITY_PRICE=BST&ZID=363234383035333b31303138303b753913b12850483b18899676963b&G_ID_USER_SESSION=6248053 / Error:MdgError (10000)(10000):10000:need ID_NOTATION or ID_INSTRUMENT
com.idms.dal.connection.impl.mdg.MDGConnection 2007-10-17 18:49:25,612 -- WARN -- [getArrayResultSet] received invalid MDG object for query: prices/status?VERSION=2&ID_QUALITY_PRICE=4&LANG=it&CODE_QUALITY_PRICE=BST&ZID=363234383035333b31303138303b753913b12850483b18899676963b&G_ID_USER_SESSION=6248053 / Error:MdgError (10000)(10000):10000:need ID_NOTATION or ID_INSTRUMENT
com.idms.web.core.struts.tiles.IDMSFactorySet 2007-10-17 18:49:25,612 -- WARN -- [getDefinitionsFactoryKey] no definition found! Returning null! This will result in loading the default-definition wich is the root-defintion!
com.idms.web.core.struts.tiles.IDMSFactorySet 2007-10-17 18:49:25,612 -- WARN -- [getDefinitionsFactoryKey] no definition found! Returning null! This will result in loading the default-definition wich is the root-defintion!
com.idms.web.core.struts.tiles.IDMSFactorySet 2007-10-17 18:49:25,613 -- WARN -- [getDefinitionsFactoryKey] no definition found! Returning null! This will result in loading the default-definition wich is the root-defintion!
com.idms.web.core.struts.tiles.IDMSFactorySet 2007-10-17 18:49:25,613 -- WARN -- [getDefinitionsFactoryKey] no definition found! Returning null! This will result in loading the default-definition wich is the root-defintion!
com.idms.web.core.struts.tiles.IDMSFactorySet 2007-10-17 18:49:25,615 -- WARN -- [getDefinitionsFactoryKey] no definition found! Returning null! This will result in loading the default-definition wich is the root-defintion!
com.idms.web.core.struts.tiles.IDMSFactorySet 2007-10-17 18:49:25,616 -- WARN -- [getDefinitionsFactoryKey] no definition found! Returning null! This will result in loading the default-definition wich is the root-defintion!
com.idms.web.core.struts.tiles.IDMSFactorySet 2007-10-17 18:49:25,617 -- WARN -- [getDefinitionsFactoryKey] no definition found! Returning null! This will result in loading the default-definition wich is the root-defintion!

Wie man sieht, sind die Ausgaben nicht sortiert. Ich muss alle Dateien durchlaufen und mit allen Zeilen vergleichen.
 
Jede Log-Datei muss nach dem Datum sortiert sein. Also brauchst du nicht, eine Zeile mit allen einer Datei zu vergleichen.
Les von jeder Datei eine Zeile. Suchst du von diesen 3 Zeilen, die Zeile raus die früher geschrieben wurde. Schreibst diese Zeile, dann in die neue Datei. Damit hast du diese eine Zeile nur mit den beiden anderen verglichen. Angenommen diese Zeile war aus Datei eins. Dort steht der Reader jetzt am Anfang der zweiten Zeile. Diese liest du dann ein. Die anderen zwei Zeilen aus den anderen Dateien müssen ja immer noch gespeichert sein. Also hast du wieder 3 Zeilen die du mit einander vergleichen musst.
Davon schreibst du dann wieder die frühere in die Zieldatei. Angenommen, diese war von Datei 3. Dann liest du die nächste Zeile von Datei 3 ein.
Dann hast du ja wieder insgesamt 3 Zeilen die du miteinander vergleichen musst. Das ganze geht dann soweiter.

So musst du jede Zeile maximal mit 2 anderen Zeilen vergleichen und nicht mit einer Million. Du musst auch nichts löschen. So hast du wenn du alle 3 Dateien einmal eingelesen hast, die Zieldatei fertig.

MFG

zEriX
 
Jede Log-Datei muss nach dem Datum sortiert sein. Also brauchst du nicht, eine Zeile mit allen einer Datei zu vergleichen.
Les von jeder Datei eine Zeile. Suchst du von diesen 3 Zeilen, die Zeile raus die früher geschrieben wurde. Schreibst diese Zeile, dann in die neue Datei. Damit hast du diese eine Zeile nur mit den beiden anderen verglichen. Angenommen diese Zeile war aus Datei eins. Dort steht der Reader jetzt am Anfang der zweiten Zeile. Diese liest du dann ein. Die anderen zwei Zeilen aus den anderen Dateien müssen ja immer noch gespeichert sein. Also hast du wieder 3 Zeilen die du mit einander vergleichen musst.
Davon schreibst du dann wieder die frühere in die Zieldatei. Angenommen, diese war von Datei 3. Dann liest du die nächste Zeile von Datei 3 ein.
Dann hast du ja wieder insgesamt 3 Zeilen die du miteinander vergleichen musst. Das ganze geht dann soweiter.

So musst du jede Zeile maximal mit 2 anderen Zeilen vergleichen und nicht mit einer Million. Du musst auch nichts löschen. So hast du wenn du alle 3 Dateien einmal eingelesen hast, die Zieldatei fertig.

MFG

zEriX

Das ist richtig, jedoch entstehen durch Threads solche Differenzen, sehe Auszug oben.
Habe jetzt geschaut, alle Dateien sind nach dem Datum sortiert, wie du es auch sagtest, an manchen Stellen jedoch sieht man Unregelmäßigkeiten.
 
Du mußt die Datei in den Buffer zunächst einlesen. Die eigentliche Veränderung durch Hinzufüger einer Zeile sieht dann etwas so aus:

BufferedReader reader = new BufferedReader(
new InputStreamReader( method.getResponseBodyAsStream()));
StringBuffer buffer = new StringBuffer();
String line = null;
while( ( line = reader.readLine()) != null) {
buffer.append( line );
buffer.append( "\n" );
}
-------------------------------------------------------------------------
Etwas deutlicher wird es auf der Seite:

http://www.javatip.de/applet_io.html

(Zugreifen auf Dateien;Zurückschreiben von Dateien)

--------------------------------------------------------------------------
import java.io.*;
import java.net.*;
import java.applet.*;

public class MyApplet extends Applet
{
// some other code of the Applet

protected String writeData(String filename, String data)
{
StringBuffer result = new StringBuffer();
try
{
// create new URL and open a connection
URL url = new URL (getCodeBase(), filename);
UrlConncetion con = url.getConnection();
// set connection attributes to handle output and input
con.setDoOutput(true);
con.setDoInput(true);
con.setAllowUserInteraction(false);
// get the OutputStream and writes the data into
OutputStream os = con.getOutputStream();
os.write(data.getBytes());
os.close();
// get the InputStream and read the response
InputStream is = con.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
while (line != null)
{
result.append(line);
line = reader.readLine();
}
reader.close();
}
catch (MalformedURLException ex) {ex.printStackTrace();}
catch (IOException ex) {ex.printStackTrace();}
return result.toString();
}

// some other code of the Applet
}

----------------------------------------------------------------------
Du mußt die Zeile zunächst finden....if line.contains("etwas")
und dann ....neue Zeile = reader.readLine();
-----------------------------------------------------------------------
Weitere Beispiele zur Schreibweise findest Du auch unter:

http://www.javakb.com/Uwe/Misc/SR.aspx?p=buffer(append.line


Arnulf
 
Wie ich in eine Datei eine Textzeile einfüge, weiß ich.
Das Problem ist, dess die Enddatei über 1mio Zeilen groß sein kann und das Hinzufügen sehr schnell erfolgen muss.
Ich denke, für dieses Problem gibt es keine Lösung, zumindest noch nicht.
Muss mir was anderes einfallen lassen.
Danke für Eure Bemühungen.
 
Zurück