Autor Wątek: Przeszukiwanie pliku  (Przeczytany 1778 razy)

Offline adsko

  • Użytkownik

# Grudzień 01, 2011, 23:00:15
Ehhh, i znowu ja, teraz mam inny trochę problem:/
Moim problemem jest wyszukanie w pliku/richtextbox'ie Słowa np: Biologia potem jak znajdę to w tej linii muszę znaleźć wagę a na sam koniec ocenę.
Formatowanie textu raczej się nie zmienia, tylko długość linii ulega zmianie, a mianowicie w Notepad++ najdłuższa linia posiada 18000 znaków długości, i w tej linii znajduję się 10 ocen. Możecie mnie trochę nakierować jak to zrobić?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Snejk47

  • Użytkownik

# Grudzień 01, 2011, 23:01:02
RegExp.

Offline Xender

  • Użytkownik

# Grudzień 01, 2011, 23:08:00
@up
Cytuj
Taak! Czołgiem kosić trawnik! Czołgiem!

@topic
W pętli wczytuj linię i ją przetwarzaj - jak znajdziesz szukane słowo (metoda z rodziny std::string::find) to przetwarzasz dalej, jak nie to continue;

Offline Timati

  • Użytkownik

# Grudzień 01, 2011, 23:08:19
Btw. zapytam.
Potrzebuję coś co sprawdza czy plik jest typu *map. Znacie jakieś skrypty ? A ja sobie zaimpletuję do mojego języka.

Offline Snejk47

  • Użytkownik

# Grudzień 01, 2011, 23:09:34
@up
@topic
W pętli wczytuj linię i ją przetwarzaj - jak znajdziesz szukane słowo (metoda z rodziny std::string::find) to przetwarzasz dalej, jak nie to continue;
Przecież to .NET...

Offline Xender

  • Użytkownik

# Grudzień 01, 2011, 23:24:45
Wybaczcie zaćmę umysłową... Zlamiłem i nie doczytałem. Tak czy inaczej jakaś metoda od szukania w stringach tam jest.

Offline adsko

  • Użytkownik

# Grudzień 01, 2011, 23:29:14
A jak będzie z tą linią która posiada 18000 znaków??

Offline Xender

  • Użytkownik

# Grudzień 01, 2011, 23:31:46
A nie możesz sprawdzić? 18kB to nie jest dużo na dzisiejsze kompy, nie widzę problemu.

Offline adsko

  • Użytkownik

# Grudzień 01, 2011, 23:38:58
Czyli po prostu pakuję ją do stringa?

Offline Timati

  • Użytkownik

# Grudzień 02, 2011, 00:03:13
Ale rady xD. Może pobierz najpierw ilość lini w pliku i podziel optymalnie zapisując do różnych tabel.

Offline izaw

  • Użytkownik

# Grudzień 02, 2011, 02:13:08
A co cię obchodzą linie? Całość wczytujesz do stringa, a potem szukasz. Masz przeciążone metody IndexOf i LastIndexOf.

A wielkość? Ile masz pamięci w systemie.

Offline adsko

  • Użytkownik

# Grudzień 02, 2011, 11:36:10
Możesz podać jakiś banalny kod z wczytywaniem, ja najlepiej się uczę z przykładów. Nawet nie musisz mi wyjaśniać, sam dojdę co do czego:D

Offline izaw

  • Użytkownik

# Grudzień 02, 2011, 19:02:56
Takie wycinki z programu.
1. Pobranie strony do stringa:
    private String getPage(String url) {
      String result = String.Empty;
      if(!CheckUrl(url))
        return result;
      HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
      httpWebRequest.Method = "GET";
      try {
        HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse();
        Stream responseStream = response.GetResponseStream();
        StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding(response.CharacterSet));
        result = streamReader.ReadToEnd();
        streamReader.Close();
        responseStream.Close();
        response.Close();
      }
      catch {
        result = String.Empty;
      }
      return result;
    }
2. Szukanie
    private void getFiles(String page) {
      Int32 pos0 = 0, pos1 = 0;
      FileData data;
      while((pos1 = page.IndexOf("button>", pos1)) > 0) {
        pos0 = page.IndexOf("http", pos1);
        pos1 = page.IndexOf('\'', pos0);
        data.link2File = page.Substring(pos0, pos1 - pos0);
        pos0 = page.IndexOf("<b>", pos1) + 3;
        pos1 = page.IndexOf('<', pos0);
        data.fileName = page.Substring(pos0, pos1 - pos0);
        pos0 = page.IndexOf("center", pos1) + 8;
        pos1 = page.IndexOf('<', pos0);
        data.fileName += '_' + page.Substring(pos0, pos1 - pos0);
        pos0 = page.IndexOf("center", pos1) + 8;
        pos1 = page.IndexOf('<', pos0);
        if(pos1 > pos0)
          data.fileName += '_' + page.Substring(pos0, pos1 - pos0);
        pos0 = page.IndexOf("center", pos1) + 8;
        pos1 = page.IndexOf('<', pos0);
        data.subscription = page.Substring(pos0, pos1 - pos0);
        fileData.Add(data);
        ListBox1.Items.Add(data);
      }
    }
Co robi? W stringu z pobranym kodem strony szuka przycisków i wycina powiązane linki do ListBoxa.