Szukanie ciągu znaków w pliku TXT

0

Witam...

Jaka jest najszybsza metoda przeszukująca plik tekstowy.

Mam plik x.txt, który ma jakieś 2 MB tekstu.

Ładuje tekst do DataInputStream.

Jakiej metody użyc, żeby jak najszybciej odszukać w tym tekst w tym tekscie??

Dzięki, Pozdrawiam

0

Ja bym to odczytał za pomocą BufferedReader'a a później użył klasy Matcher i Pattern do znajdywania danego Stringa....

Jeżeli chcesz znaleźć i zamienić to w klacie String jest metoda replace();

0

remigio - Mógłbyś podać jakiś najprostszy przykład zastosowania tego?

Dzięki

0
 
public class Main {

    public static void main(String[] args) {
        File txt = new File("mmm.txt");
        try {

            BufferedReader odczytaj = new BufferedReader(new FileReader(txt));
            String line = "";
            while ((line = odczytaj.readLine()) != null) {
                Matcher m = Pattern.compile("napi").matcher(line);
                while (m.find()) {
                    System.out.println("found");
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

nie wiem czy jest to najszybszy sposób - ale działa :)
zczytuje linia po linii i sprawdza wystąpienie słowa-klucz...

Poczytaj o wyrażeniach regularnych...

0

Zalezy, co i jak chcesz wyszukac. Jesli to pojedynczy wyraz w linijce (zakonczonej "\n"), wystarczy String.indexOf(String substring). Regex przyda sie, jesli biale znaki chcesz traktowac na rowni albo wyszukiwany teskt byl niestandardowy. Ale wtedy musialbys przemyslec metode odczytu pliku.

0

Chcę w dużym pliku tekstowym znaleźć ciąg znaków.

Puste znaki (spacje) najlepiej żeby pomijał (o ile to przyspieszy szukanie).

Dla przykładu: w moim przykładzie szukanie trwa baaaardzo długo. Ten sam tekst w notatniku, daje szukaj - szukanie odbywa się błyskawicznie.

Najlepiej aby to było tak jak w notatniku - błyskawicznie :)

0

Matcher jest wolny :(

0
Bodek6 napisał(a)

Najlepiej aby to było tak jak w notatniku - błyskawicznie :)

Notatnik laduje caly plik do pamieci. Jesli chcesz, zeby to bylo szybko, uzyj kanalow i bezposredniego mapowania z java.nio.* (tj. FileChannel i MappedByteBuffer). Jak juz bedziesz mial wszystko w pamieci, to mozesz napisac wlasna funkcje przeszukiwania albo wrzucic to w np. StringBuilder i uzyc metod z API.

0

hmmm :)

Ładuje cały plik z serwera poprzez DataInputStream. To ten plik (jego zawartość) nie siedzi w pamięci??

Jesteś w stanie dać prosty przykład tego mapowania?

PLEASE :)

0

To zalezy jakie operacje wykonujesz po utworzeniu strumienia. Sam konstruktor DataInputStream, ani nawet BufferedReader, nie laduje pliku do pamieci. PS. przy duzej ilosci danych, znacznie wydajniejsza bedzie metoda read(byte[] buffer) z odpowiednio duzym buforem, ale pewnie to wiesz.

Przyklad z uzyciem kanalow:

import java.io.FileInputStream;
import java.nio.channels.FileChannel;
import java.nio.MappedByteBuffer;

public class DirectMemoryFileReader {
	private static final String FILE_NAME = "DirectMemoryFileReader.java";
//...
	        FileChannel fc = new FileInputStream(FILE_NAME).getChannel();
	        MappedByteBuffer buffer = fc
	                .map(FileChannel.MapMode.READ_ONLY, 0L, fc.size());
	        while(buffer.hasRemaining()) {
	            System.out.print((char)buffer.get());
	        }
	        fc.close();
//...
}
0

Dzięki ogromne

Działa, ale nadal wolno. Mozna to jakos jeszcze przyspieszyć?

Mam w pliku około 10 000 linijek. Każda z nich po pareset znaków.
Nadal, nawet samo wyświetlanie tego tekstu jest strasznie czasochłonne.

Kurcze, jak to zrobić, aby to działało szybciutko?? :)

Dzieki :)

0

No ja mam 6 mega plik txt do testowania i wyszukuję przez matcher i jest szybko - nie wiem co znaczy dla ciebie wolno.
Ale rzeczywiście wyświetlanie pliku trwa kilka sek.

0

@Bodek6 to moze po prostu zmień język na perla / C?

0

Ok, zamiast przechowywać dane w piku tekstowym łatwiej będzie nauczyć się obsługi baz danych i PHP. Tam szukajka działa tak jak należy i można łatwo sortować dane.

@szypxx - a może prześlesz mi twój przykładzik takiej szukajki w pliku txt?
Mi w pliku 3 mega znalezienie ciągu znaków zajmowało parenaście sekund. Oczywiście im dłuższy ciąg tym dłużej szukał.

1 użytkowników online, w tym zalogowanych: 0, gości: 1