DaBernie Geschrieben 10. Oktober 2009 Teilen Geschrieben 10. Oktober 2009 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"); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 11. Oktober 2009 Teilen Geschrieben 11. Oktober 2009 (bearbeitet) 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 2009 von Schiller256 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 11. Oktober 2009 Teilen Geschrieben 11. Oktober 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 11. Oktober 2009 Teilen Geschrieben 11. Oktober 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DaBernie Geschrieben 11. Oktober 2009 Autor Teilen Geschrieben 11. Oktober 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 12. Oktober 2009 Teilen Geschrieben 12. Oktober 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DaBernie Geschrieben 12. Oktober 2009 Autor Teilen Geschrieben 12. Oktober 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 12. Oktober 2009 Teilen Geschrieben 12. Oktober 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 12. Oktober 2009 Teilen Geschrieben 12. Oktober 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 12. Oktober 2009 Teilen Geschrieben 12. Oktober 2009 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] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DaBernie Geschrieben 12. Oktober 2009 Autor Teilen Geschrieben 12. Oktober 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 12. Oktober 2009 Teilen Geschrieben 12. Oktober 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 13. Oktober 2009 Teilen Geschrieben 13. Oktober 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tristoni Geschrieben 4. November 2009 Teilen Geschrieben 4. November 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
speedi Geschrieben 13. November 2009 Teilen Geschrieben 13. November 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
speedi Geschrieben 13. November 2009 Teilen Geschrieben 13. November 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.