Zum Inhalt springen

String aus Datei suchen! Bin total verzweifelt!!!!


Empfohlene Beiträge

Geschrieben

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");

Geschrieben (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 von Schiller256
Geschrieben

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.

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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]

Geschrieben

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

funzt nicht.

Geschrieben

und 3 mal dürft ihr raten :rolleyes: 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

  • 4 Wochen später...
Geschrieben

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

  • 2 Wochen später...
Geschrieben


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.

Geschrieben


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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...