// Liczba słów.  Użycie: java Wc nazwa_pliku
// Wyświetla w kolejnych wierszach każde słowo występujące w pliku.
// Kolejnym krokiem jest wyświetlenie liczby słów.
// Słowo to dowolna sekwencja liter rozdzielonych innych znakami.

import java.io.*;

class Wc {
  public static void main(String argv[]) {

    // Otwarcie pliku wejściowego, zgłoszenie błędów
    try {

      // Otwarcie pliku wejściowego
      InputStream f=new FileInputStream(argv[0]);

      // Liczba słów
      int c;  // Aktualny znak
      boolean last_char_was_letter=false;  // Typ wcześniejszego znak
      int count=0;  // Number of words
      while ((c=f.read())>=0) {  // Aż do osiągnięcia -1 (EOF)
        if (Character.isLetter((char)c)) {
          c=Character.toUpperCase((char)c);
          if (!last_char_was_letter) {
            last_char_was_letter=true;
            ++count;
          }
          // System.out.write(c);
        }
        else if (last_char_was_letter) {
          last_char_was_letter=false;
          // System.out.write('\n');
        }
      }

      // Wyświetlenie wyniku
      System.out.println(argv[0]+" ma "+count+" słów");

      // Zamknięcie pliku
      f.close();

    }
    catch(FileNotFoundException x) {
      System.out.println("Nie odnaleziono pliku: "+argv[0]);
    }
    catch(ArrayIndexOutOfBoundsException x) {  // for argv
      System.out.println("Użycie: java Wc nazwa_pliku");
    }
    catch(IOException x) {  // Obsługa innych wyjątków
      System.out.println(""+x);
    }
  }
}

