logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Pascal - jak wypisać całą linię z pliku zawierającą dane słowo?

Wilczan 26 Lis 2009 20:41 1960 9
REKLAMA
  • #1 7312723
    Wilczan
    Poziom 10  
    Posty: 6
    Witam. Mam do napisania słownik. Ma działać na zasadzie, że podaje się słowo, a program wypisuje (z pliku .txt) całą linijkę w której znajduje się to słowo, to znaczy podane słowo i tłumaczenie. Oto mój program:

    
    Uses Crt;
    
    var
      slowo,linia:string;
      plik:text;
      c:char;
      znaleziono: boolean;
    
    BEGIN
      znaleziono := false;
      writeln('Podaj slowo: ');
      readln(slowo);
      Assign(plik,'D:\FPC\slowo.txt');
      Reset(plik);
      while (not eof(plik)) do
      BEGIN
        readln(plik,linia);
        if linia=slowo then
        begin
        znaleziono := true;
        break;
      end;
    end;
    
    if znaleziono then
    
    begin
      writeln(linia);
    end;
    
    if znaleziono = false then
    writeln('Brak rekordu');
    
    readln;
    end.
    

    Chodzi mi o to żeby przerobić ten program tak aby wyświetlał całą linijkę, a nie tylko, że podane słowo znajduje się w pliku.
  • REKLAMA
  • #2 7312804
    Dżyszla
    Poziom 42  
    Posty: 7075
    Pomógł: 1095
    Ocena: 225
    if linia=slowo then - ten warunek jest błędny. Musisz porównywać wyłącznie ciąg o długości odpowiadającej długości słowa lub ewentualnie odszukiwać, czy dane słowo występuje gdziekolwiek w linii (Pos, ale nie pamiętam, czy TP miał tą funkcję)
  • REKLAMA
  • REKLAMA
  • #4 7313024
    Wilczan
    Poziom 10  
    Posty: 6
    Częściowo mi pomogłeś Wrych. Teraz wyświetla się cała linia ale tylko pierwsza.

    
    uses crt;
    var
    
    slowo,linia:string;
    plik:text;
    c:char;
    znaleziono: boolean;
    
    BEGIN
      znaleziono := false;
      writeln('Podaj slowo: ');
      readln(slowo);
      Assign(plik,'D:\FPC\slowo.txt');
      Reset(plik);
      while (not eof(plik)) do
      BEGIN
        readln(plik,linia);
        if Pos(slowo, linia)<>0 then writeln(linia);
        begin
        znaleziono := true;
        break;
      end;
    end;
    
    if znaleziono then
     writeln(linia);
    
    if znaleziono = false then
    writeln('Brak rekordu');
    
    readln;
    end.
    


    Jakieś pomysły?
  • REKLAMA
  • #6 7313260
    Wilczan
    Poziom 10  
    Posty: 6
    Albo ty nie zrozumiałeś mnie albo ja ciebie. Podaje jedno słowo, które program ma wyszukać w pliku i wypisać je z tłumaczeniem. Jest pętla WHILE i EoF więc raczej przeszukuje cały plik.
  • #7 7314116
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Moim zdaniem fragment:
    if Pos(slowo, linia)<>0 then writeln(linia);
        begin
        znaleziono := true;
        break;
        end;
     

    powinien wyglądać tak:
    if Pos(slowo, linia)<>0 then 
    begin
        writeln(linia);
        znaleziono := true;
        break; 
    end;

    Raczej robi różnicę... ;)
  • #8 7314655
    wrych
    Poziom 20  
    Posty: 279
    Pomógł: 37
    Ocena: 22
    Funkcja Pos(słowo, linia) zwraca wartość 0 gdy łańcuch "słowo" nie występuje w łańcuchu "linia" oraz pozycję od której w łańcuchu "linia" występuje "słowo" (w kodzie oczywiście nie może być litery "ł"). Zatem z mienna "znaleziono" nie jest potrzebna.

    Mam wątpliwości co do użycia "break" - a co będzie w sytuacji, gdy słownik zawiera:
    zamek - część karabinu...
    zamek - budowla...
    zamek - w drzwiach.

    Moja propozycja oczywiście spowoduje również wyświetlenie takiego hasła:
    Wawel - zamek...
    ale to można wyeliminować badając wartość zwracaną przez funkcję "Pos".

    Inny problem to słówka postaci: auto, autobus, autokar... To też da się w prosty sposób obejść.
  • #9 7316059
    Wilczan
    Poziom 10  
    Posty: 6
    Dzięki Wrych. Program działa. To powiedz jeszcze jaki masz sposób na te auto, autobus, autokar. Przydałoby się.
  • Pomocny post
    #10 7316124
    wrych
    Poziom 20  
    Posty: 279
    Pomógł: 37
    Ocena: 22
    Zamiast szukać "auto" szukaj "auto ".

Podsumowanie tematu

✨ Użytkownik poszukiwał sposobu na modyfikację programu w Pascalu, który miał wypisywać całą linię z pliku tekstowego zawierającą podane słowo. Otrzymał kilka wskazówek dotyczących użycia funkcji Pos do wyszukiwania słowa w liniach pliku. Wskazano, że warunek porównujący linie z podanym słowem był błędny i powinien być zmieniony, aby program wypisywał wszystkie linie zawierające dane słowo. Użytkownik napotkał problem z wypisywaniem tylko pierwszej linii, co zostało rozwiązane poprzez odpowiednie umiejscowienie instrukcji w pętli. Dodatkowo, poruszono kwestie związane z wyszukiwaniem słów o podobnych formach, sugerując dodanie spacji po słowie kluczowym, aby uniknąć niepożądanych wyników.
Wygenerowane przez model językowy.
REKLAMA