Wątek przeniesiony 2014-01-14 22:37 z Delphi i Pascal przez furious programming.

Nie wyszukuje w pliku

0

Witam
Mam problem z kodem wyszukiwania w pliku. Chce aby po wyszukaniu tego co chce wyswietlil mi to w listboxie. Ale nie wyswietla
Oto kod

procedure TForm1.Button4Click(Sender: TObject);
begin
  AssignFile(plik,'C:\Users\David\Desktop\projekt WDP\baza.txt');
  reset(plik);
  ListBox1.Clear;
      Button3.Enabled:=true;
      Read(plik,ciag);

      repeat

              if (Edit6.Text=ciag) then
               begin
               ShowMessage('Wyszukano');
               ListBox1.Items.Add(ciag);
               end;

            until EOF(plik);

      CloseFile(plik);
end;

dodanie znacznika <code class="delphi"> - fp

1

Zmień pętlę Repeat na While bo może się zdarzyć, że plik będzie pusty i kod się potknie; Poza tym napisz co dokładnie chcesz zrobić, bo ani z Twojego opisu ani z kodu nic wiele nie wiadomo;

Poza tym zmień Read na Readln i albo porównuj szukany tekst całą linię np. przez funkcję CompareStr lub CompareText, albo wyszukuj dany tekst wewnątrz linii za pomocą Pos; To chyba tyle, a wątek przenoszę do działu Newbie bo dotyczy podstaw.

0

Można się tylko z tego kodu domyśleć (btw, dlaczego znowu ktoś pokazuje niesformatowany? Ileż można o takie coś prosić?!), że chce by wczytany wiersz z pliku trafił do zmiennej o nazwie ciag. I jeżeli jest ona równa z tym co wpisano do - jakże wspaniale nazwanego - Edit6, to zmienna ciag dodała się do ListBoxa.

Ja bym doradził tak, po pierwsze formatujesz kod, po drugie nazywasz sensownie komponenty, po trzecie pomimo iż operacje porównania w if poprzez = można zamienić miejscami, to na logikę powinno być Ciag = Text. Bo tak jak masz teraz zaciemnia sens. I nawet @furious programming się w tym nie mógł połapać. Dodatkowo na cholere pod VCL używać konstrukcji odczytujących tekst z pliku rodem chyba z Turbo Pascala. Piszez pod VCL, to używaj go z całym dobrodziejstwem inwetnarza.

Czyli najlepiej załadować plik tekstowy do obiektu typu TStringList i posłużyć się jego funkcją IndexOf. Odpada nam wtedy sprawdzanie wielkości znaków. Zaś samo IndexOf jest już funkcją z odpowiednią pętlą. Tak przynajmniej ja bym kobinował.

1
      Read(plik,ciag);
 
      repeat
 
              if (Edit6.Text=ciag) then
               begin
               ShowMessage('Wyszukano');
               ListBox1.Items.Add(ciag);
               end;
 
            until EOF(plik);

1.Wczytaj fragment tekstu z pliku do zmiennej ciag.
2.Porównaj zawartość pola tekstowego ze zmienną ciąg (powinno być na odwrót: ciag = Edit6.Text).
3.Jeżeli zawartość się zgadza, wyświetl wiadomość i dodaj ciąg do ListBoxa.
4.Jeżeli koniec pliku, idź dalej, w przeciwnym wypadku idź do punktu DRUGIEGO.
Widzisz błąd?

0

no to tak
nie widze za bardzo bledu :/ niestety
moglbys powiedziec co i jak
a moze to ze nie przechodzi do nastepnej linii
tylko jak zrobic zeby wyswietlilo tylko potrzebna linie?

usunięcie cytowania całego poprzedniego posta - fp

0

up

teraz juz tak ;) tylko ze dalej nie wyszukuje a nawet lepiej
zawiesza program a jak zostawie edit6 pusty to mi wyswietla komunikat w kolko

0

ok juz nie ważne

zrobilem na pos i dziala
dzieki za pomoc ;)

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