Zeilen auswählen und löschen

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Wäre prima, wenn mir hier jemand weiterhelfen könnte. ANmerkungen im Code - es geht darum eine datei einzulesen (*.txt), bestimmte zeilen auszuwählen nach einer bestimmten anfangszeichenfolge und diese zeilen dann zu löschen:

Code:
import java.io.*;
import java.lang.*;



class RandAccessFile

{ public static void main(String[] a) throws IOException

  { RandomAccessFile rf;

    int x,y;

    //Einlesen der Datei test.txt
    rf = new RandomAccessFile("test.txt", "rw");

    //Unnötige Zeilen entfernen

    String s =new String();
    s=rf.readLine();

// HIER müsste jetzt die ein befehl kommen, der am Anfang der Zeile nach einer bestimmten ZEichenfolge sucht und 
//diese danach entfernet - so sollen alle zeilen durchgegangen werden (for-schleife)
//danke!





    /*
    //Datei ausgeben:
    File datei = new File("test.txt");
    FileReader leser = new FileReader(datei);
    for(;;){
    int gelesenInt = leser.read();
    if(gelesenInt == -1){break;}
    char gelesenChar = (char) gelesenInt;
    System.out.print(gelesenChar);}
    */


    //Verbindung trennen
    rf.close();


  }
}
 
Code:
if (s.startsWith("xyz")) {
    s = s.substring(anzahlDerBestimmtenZeichen);
}


Den Rest sollteste selber hinbekommen!? :wink:
 
du musst eine neue Datei schreiben

und dort nur die Zeilen hineinschreiben, die du willst

auch aus einer RandomAccess Datei kann man keine Bytes einfach so "entfernen", dazu müsste man ja den ganzen Rest "nachziehen", und sowas geht nun mal nicht...
 
Leider habe ich noch ein Problem:

In der DAtei steht:

abc

Nun lasse ich es testweise nach dem Einlesen ausgeben - dann kommt raus:

"Leerzeichen" "Komisches Viereck" a "Leerzeichen" b "Leerzeichen" c

So kann ich ja schlecht nahc meiner Zeichenfolge "abc" suchen, wenn der die so zerrupft. An was liegt das?

Und gibts bei STring sowas wie Wildcards, also dass ich sagen kann "*abc" und er nimmt alles was dann irgendwie abc enhält...

DANKE!
 
Hm, könnte mir vorstellen, dass das in der Datei verpfuscht wurde, ansonsten zeig mal Code.

Du kannst mit contains überprüfen ob sich eine Zeichenfolge innerhalb eines Strings befindet.
 
Code:
import java.io.*;
import java.lang.*;



class RandAccessFile

{ public static void main(String[] a) throws IOException

  { RandomAccessFile rf;
  
    int x,y;
    rf = new RandomAccessFile("test.txt", "rw");







    //Unnötige Zeilenentfernen

    String s =new String();
    s=rf.readLine();
    //System.out.println(s);         // lässt man s ausgeben, so ist es auhc verpfusch wie oben beschrieben
    if (s.contains("abc"))                 //das contains tut ned, find es au ned in der API - vermutlich mach ich was falsch
                                                   
       {
       System.out.println("erkannt");

       }
    else System.out.println("nicht erkannt");

  




  

    //Verbindung trennen
    rf.close();


  }
}
 
Datei stammt von anderem Rechner?

anderes CharacterEncoding (möglicherweise UTF-16?)

schau das Ding mal in einem Hex-Editor an
 
Mit 2 RandomAccessFile Objekten, kann man Zeilenweise oder byteweise die Datei löschen!! (am Anfang oder Ende halt)

Habe das schon geschrieben, aber da is soviel anderes Zeugs dabei das man das schwer ausbaun kann...

Der eine liest aus, merkt sich die bytes und der 2te schreibt das entweder am anfang drüber und kürzt das file auf die reduzierte größe (fällt der hintere teil weg, da man aber vorher schon vorn reingeschrieben hat, hat man eigentlich vorne Zeile/Bytes weggenommen)

oder man schneidet nach xx Zeilen/Bytes die Datei einfach ab und man hat hinten abgeschnitten
 
Hobbit_Im_Blutrausch hat gesagt.:
Irgendwas haste mit deiner Datei verpfuscht, bei mir funzt das einwandfrei


Mit dem contains???

Ich habe lediglich eine textdatei auf meinem rechner angelegt die test.txt heißt und abc reingeschrieben...
 
Das hab ich auch gemacht und bei mir liefs (ja, auch mit contains). Mit was hast du die Textdatei erstellt? Was haste fürn OS?
 
Hab grad festgestell, dass es am Notepad liegt..aber bei contains motz er immernoch bei mir:

Compiliere C:\Documents and Settings\awochele\Desktop\RandAccessFile.java mit Java-Compiler
RandAccessFile.java:23: cannot resolve symbol
symbol : method contains (java.lang.String)
location: class java.lang.String
if (s.contains("abc"))
^
1 error
 
Das is merkwürdig. Hab hier auch Win 2000 und habs auch mit dem Editor gemacht. Das muss gehen! Überprüf bitte nochmal alles (ob irgendwelche Exceptions fliegen, obs nochma compiliert wurde, ...)

[edit] OK, hat sich dann wohl erledigt. Wobei mich doch interessiert warum das an Notepad liegt.

Zu deinem anderen Problem: Hast wohl kein JDK 1.5 . indexOf ist das gleiche, nur dass indexOf eine Position zurückliefert.
 
Ich hab die drauf:

j2sdk1.4.2_08

wieso heißen die eig. unterschiedlich???
 
s=rf.readLine();
//System.out.println(s);
if (s.indexOf("abc"))

so? akzeptiert er au ned...
 
kannst du mir auch noch sage mit welchem befehl ich in die nächste zeile springe...
 
du glaubst? Zur Sicherheit:

jedes mal wenn du readLine() aufrufst liest er die nächste Zeile. :wink:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben