[Pascal] Ilość wyrazów w tekście

0

Witam.
Rozwiązanie tego problemu szukałem niemal wszędzie - w FAQ 4p, na forum 4p, na Google, w Pascalu i C++ ale żadnego śladu. Więc może ktoś z forumowiczów zna procedurę/funkcję, która zliczy ilość wyrazów w podanym tekście?

Dzięki z góry za pomoc ;)

0

nie wiem czy to cos da .. ale ja bym szykal znaku SPACJI i wtedy dodawaj do jakiejs zmiennej np:

{ wszystko z glowy wiec nie wiem czy dziala }
for i := 0 to Length(Text) - 1 do
begin
  if Text[i] = ' ' then Inc(Ile);
end;

//Jak nie o to chodzi to wywalcie to :)

0

możesz przeszukać po literce i jak znajdziesz ' ' (spacje) to masz jeden wyraz, no chyba że któs robi kilka spacji zmiast jednej ;)

0

taka procedura raczej nie istnieje... Bo zastanow sie czym sa slowa... Jest to ciag znakow oddzielonych znakami interpunkcyjnymi i odstepami...
Ale mozna to samemu napisac, wystarczy po kolei szukac znakow z listy, np tablicy (a w tablicy zdefiniowac m.in. spacje , przecinek etc. ) a potem leciec po znakach z ciag i jak znajdzie jakis z nich to kopiowac do nowej tablicy (dynamicznej) a kopiowac od ostatnio znalezionego znaku do obecnego-1.

0

Nieco to toporne, ale może Ci się przydać.

Wyciąganie słów z podanego pliku tekstowego. Wynik zapisywany jest do pliku Wyrazy.txt :

function RemoveNonChars(Text: string): string;
var
  s: string;
begin
  s := Text;
  s := StringReplace(s, ',', ' ', [rfReplaceAll]);
  s := StringReplace(s, ';', ' ', [rfReplaceAll]);
  s := StringReplace(s, '!', ' ', [rfReplaceAll]);
  s := StringReplace(s, '@', ' ', [rfReplaceAll]);
  s := StringReplace(s, '#', ' ', [rfReplaceAll]);
  s := StringReplace(s, '$', ' ', [rfReplaceAll]);
  s := StringReplace(s, '%', ' ', [rfReplaceAll]);
  s := StringReplace(s, '^', ' ', [rfReplaceAll]);
  s := StringReplace(s, '&', ' ', [rfReplaceAll]);
  s := StringReplace(s, '*', ' ', [rfReplaceAll]);
  s := StringReplace(s, '(', ' ', [rfReplaceAll]);
  s := StringReplace(s, ')', ' ', [rfReplaceAll]);
  s := StringReplace(s, '-', ' ', [rfReplaceAll]);
  s := StringReplace(s, '_', ' ', [rfReplaceAll]);
  s := StringReplace(s, '+', ' ', [rfReplaceAll]);
  s := StringReplace(s, '=', ' ', [rfReplaceAll]);
  s := StringReplace(s, '[', ' ', [rfReplaceAll]);
  s := StringReplace(s, '{', ' ', [rfReplaceAll]);
  s := StringReplace(s, ']', ' ', [rfReplaceAll]);
  s := StringReplace(s, '}', ' ', [rfReplaceAll]);
  s := StringReplace(s, '\', ' ', [rfReplaceAll]);
  s := StringReplace(s, '|', ' ', [rfReplaceAll]);
  s := StringReplace(s, ':', ' ', [rfReplaceAll]);
  s := StringReplace(s, '"', ' ', [rfReplaceAll]);
  s := StringReplace(s, '''', ' ', [rfReplaceAll]);
  s := StringReplace(s, '<', ' ', [rfReplaceAll]);
  s := StringReplace(s, '>', ' ', [rfReplaceAll]);
  s := StringReplace(s, '.', ' ', [rfReplaceAll]);
  s := StringReplace(s, '/', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '`', ' ', [rfReplaceAll]);
  s := StringReplace(s, '~', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);

  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '', ' ', [rfReplaceAll]);
  s := StringReplace(s, '', ' ', [rfReplaceAll]);
  s := StringReplace(s, '', ' ', [rfReplaceAll]);
  s := StringReplace(s, '', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, 'ˇ', ' ', [rfReplaceAll]);
  s := StringReplace(s, '˘', ' ', [rfReplaceAll]);
  s := StringReplace(s, '¤', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);

  s := StringReplace(s, '§', ' ', [rfReplaceAll]);
  s := StringReplace(s, '¨', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '°', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '˛', ' ', [rfReplaceAll]);
  s := StringReplace(s, '´', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '¸', ' ', [rfReplaceAll]);
  s := StringReplace(s, '?', ' ', [rfReplaceAll]);
  s := StringReplace(s, '˝', ' ', [rfReplaceAll]);

  s := StringReplace(s, '×', ' ', [rfReplaceAll]);
  s := StringReplace(s, '÷', ' ', [rfReplaceAll]);
  s := StringReplace(s, '˙', ' ', [rfReplaceAll]);
  s := StringReplace(s, Chr($0A), ' ', [rfReplaceAll]);
  s := StringReplace(s, Chr($AD), ' ', [rfReplaceAll]);
  s := StringReplace(s, Chr($A0), ' ', [rfReplaceAll]);
  s := StringReplace(s, Chr($82), ' ', [rfReplaceAll]);

  Result := s;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  sl, slWords: TStringList;
  i, x: integer;
  s, s2: string;
begin

  sl := TStringList.Create;
  slWords := TStringList.Create;

  try

    sl.LoadFromFile(Edit1.Text);
    sl.Text := StringReplace(sl.Text, Chr(0), ' ', [rfReplaceAll]);

    for i := 0 to sl.Count - 1 do
    begin
      s := Trim(sl[i]);
      s := RemoveNonChars(s);

      s2 := '';
      while Pos(' ', s) > 0 do
      begin
        s := Trim(s);
        x := Pos(' ', s);
        if x > 0 then
        begin
          s2 := Copy(s, 1, x - 1);
          s := Copy(s, x + 1, Length(s));
          if Length(s2) > 1 then
            slWords.Add(s2);
        end;
      end;
      s := Trim(s);
      if Length(s) > 1 then slWords.Add(s);

    end; // for


    for i := slWords.Count - 1 downto 0 do
    begin
      s := slWords[i];
      for x := 1 to Length(s) do
      begin
        if s[x] in ['0'..'9'] then
        begin
          slWords.Delete(i);
          Break;
        end;
      end;
    end;

    slWords.SaveToFile('Wyrazy.txt');
    ShowMessage('Liczba wyrazów w pliku ' + Edit1.Text + ' : ' + IntToStr(slWords.Count));

  finally
    sl.Free;
    slWords.Free;
  end;

end;
0

jack - w Pascalu to nie pójdzie bo tam nie ma TStringList :/

0

Dzięki mitring, o to mi chodziło. Może to nie jest idealne, ale chodziło mi głównie o koncepcję, reszta jest nieważna :D

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