Veröffentlicht 10. Oktober 200915 j Hi, ich vesuche einen String aus einer Datei zu suchen und mir das bestätigen zu lassen. ich bin total verzweifelt! Ich hoffe es kann mir jemand hier helfen! // //Lesen der Datei und umwandeln in einen String // String text = ""; try { BufferedReader finput = new BufferedReader(new FileReader("temp.txt")); String line; while ((line = finput.readLine()) != null) { text = text + '\n' + line; } finput.close(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } StringTokenizer st = new StringTokenizer(text); int sc = 0; while(st.hasMoreTokens()) { if(st.nextToken().equals("404")) { sc++; st.nextToken(); } } System.out.println("404 " + sc + " mal enthalten");
11. Oktober 200915 j Wo liegt denn nun dein Problem? Ich versteh nicht so recht wieso du erst die komplette Datei in einen String ein liest und erst danach anfängst diesen zu verarbeiten. Du kannst doch gleich auf die gelesene Zeile aus der Datei eine Suche nach deinem Pattern durchführen. Bearbeitet 11. Oktober 200915 j von Schiller256
11. Oktober 200915 j Ich finde dein Vorgehen ebenfalls sehr kompliziert. Möchtest du wisen ob es mindestens einmal vorkommt (und App beenden) oder auch mehrfalls (d.h. Datei bis zum Ende durchlaufen)? Egal was du vorhast, zeilenweise lesen und matchen ist die schnellere Alternative.
11. Oktober 200915 j Ich würde auch nicht mit einem StringTokinzer arbeiten, denn Du trennst damit einen String an bestimmten Zeichen auf StringTokenizer (Java 2 Platform SE v1.4.2) Du solltest, da Du auf die Existenz prüfen willst, reguläre Ausdrücke verwenden Pattern (Java 2 Platform SE v1.4.2) Ansonsten gebe ich den anderen Vorpostern recht: Datei zeilenweise durchlaufen und pro Zeile matchen
11. Oktober 200915 j gestern als ich überhaupt untersucht habe, ob überhaupt Strings eingelesen werden, habe ich mir einfach line mit System.out.println(); wiedergeben lassen , innerhalb der ersten while schleife, und es war eine leere Zeile vorhanden => kein eingelesener String. Sorry ich habe vorher mit c gecodet und für mich ist die Logik nunmal die lese ein bis Dateiende und gut ist. Ich kann es mir nicht erklären... Ich bitte um Nachsicht ._. euer DaBernie
12. Oktober 200915 j Hast du denn nun noch ein Problem? Wenn ja dann beschreibe es bitte, denn nur so können wir dir helfen. Zeige mal deine Datei die du verarbeiten willst. Was mir noch aufgefallen ist beim zählen der 404 überspringst du immer wenn du eine 404 gefunden hast das nächste Token.
12. Oktober 200915 j Hi, also dann gebe ich mal das Codebeispiel an, mit dem ich überprüfen will, ob überhaupt etwas aus der Datei in die Stringvariable gepeichert wird. String text = ""; try { BufferedReader finput = new BufferedReader(new FileReader("temp.txt")); String line; while ((line = finput.readLine()) != null) { text = text + '\n' + line; //besagte Textstelle System.out.println(line); } finput.close(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } StringTokenizer st = new StringTokenizer(text); int sc = 0; while(st.hasMoreTokens()) { if(st.nextToken().equals("404")) { sc++; st.nextToken(); } } System.out.println("404 " + sc + " mal enthalten"); while((bytes = input.read(buffer)) != -1){ response.write(buffer, 0, bytes); } request.close(); input.close(); socket.close(); } es erfolgt eine leere Zeile als Ausgabe. mfg DaBernie
12. Oktober 200915 j Kann es sein, dass Du bei Deinen Posts jeweils vergisst, konkrete Fragen zu stellen? In Deinem letzten Codebeispiel sind diverse System.out.println()s. Die Frage ist, welcher ist der relevante? Beim Einlesen der Datei oder nach dem Tokenizen? Wenn beim Einlesen, warum ist das so? Wird die Datei nicht gefunden, ist sie leer, oder was läuft sonst schief? Aus der Ferne können wir Dir das nicht beantworten. Im Gegenteil, Du musst uns das sagen, damit wir eine sinnvolle Antwort geben können. [EDIT] Zusätzlich solltest Du den Quellcode, den Du hier postest, noch mal korrekt formatieren (-> Einrückungen)[/EDIT] Peter
12. Oktober 200915 j Warum benutzt Du immer noch den StringTokenizer, obwohl ich geschrieben hatte, dass das Pattern für Dein Vorhaben sinnvoller ist? Außerdem verarbeitest Du Deine Daten nicht zeilenweise, das Pattern muss innerhalb der Schleife ausgeführt werden! Der Code hat sich zu Deinem ersten Post nicht wirklich geändert
12. Oktober 200915 j package testFilePackage; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.regex.Pattern; public class TestFileClass { /** * @param args */ public static void main(String[] args) { try { BufferedReader in = new BufferedReader(new FileReader("C:\\archiv\\style.css")); String zeile = null; while ((zeile = in.readLine()) != null) { boolean b = Pattern.matches("[dein Regex]", zeile); if ( { System.out.println("Gelesene Zeile: " + zeile); } } } catch (IOException e) { e.printStackTrace(); } } } [/code]
12. Oktober 200915 j Hi, also ich habe jetzt die regexp bestimmt bei der zu durchsuchenden datei. ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL /Admin was not found on this server.</p> <hr> <address>Apache/2.2.3 (Debian) PHP/5.2.0-8+etch15 mod_ssl/2.2.3 OpenSSL/0.9.8c $ </body></html> Und dieser Code soll jetzt prüfen ob in Zeile 3 "404" vorhanden ist. // try { BufferedReader in = new BufferedReader(new FileReader("temp")); String zeile = null; while ((zeile = in.readLine()) != null) { System.out.println("Gelesene Zeile: " + zeile); boolean b = Pattern.matches("\n{^,@}?[:print:]?\n[:print:]?\n[:punct:][:alpha:][:punct:][40]{3}", zeile); if ( { System.out.println("Gelesene Zeile: " + zeile); } } } catch (IOException e) { e.printStackTrace(); }[/code] und 3 mal dürft ihr raten funzt nicht.
12. Oktober 200915 j und 3 mal dürft ihr raten funzt nicht. Gut, dass ich nicht raten muss, sondern den Code durch eine kleine Änderung zum laufen bekommen habe. Aber Du scheinst ja darauf zu warten, dass Dir eine fertige Lösung präsentiert wird
13. Oktober 200915 j Ein wenig mehr Engagement wäre wirklich nett. Wie wäre es den RegEx auf <title>404 Not Found</title> zu konzentrieren. Je einfacher desto besser.
4. November 200915 j Hi ich glaube du suchst einfach sowas oder??? try{ BufferedReader input = new BufferedReader(new FileReader("test.txt")); String line; while ((line = input.readLine()) != null) { if(line.contains("Text der in der Datei vorkommen soll")){ System.out.println("Hi es ist ein passender String gefunden worden"); } } finput.close(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } naja lg Timo
13. November 200915 j class String public int indexOf(String aSubstring) gibt die Position des Substrings im String zurück und -1 wenn es nicht drin vorkommt. Du kannst den String auch char für char (mit char String.chatAt(int position)) durchgehen und selbst checken, wann die nachfolgenden chars alle übereinstimmen.
13. November 200915 j class String public int indexOf(String aSubstring) gibt die Position des Substrings im String zurück und -1 wenn es nicht drin vorkommt. Du kannst den String auch char für char (mit char String.chatAt(int position)) durchgehen und selbst checken, wann die nachfolgenden chars alle übereinstimmen.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.