Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2008, 11:01   #11
amigo90
 
Регистрация: 16.04.2008
Сообщений: 7
По умолчанию

Со счетом слов ясно . А как быть с абзацами?
Arkuz предложил:
Цитата:
Сообщение от Arkuz Посмотреть сообщение
Код:
i:=1;
while s[i]=' ' do ink(i);
if (i=3) or (i=5) then writeln('табуляция из 3 или 5 пробелов')
Но как вписать в программу что бы было корректно ?
amigo90 вне форума Ответить с цитированием
Старый 26.10.2008, 11:32   #12
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Код:
function kolslov(st: string): byte;
const
  razdel = ['.', ','];
var
  k, d: integer;
begin
  d := 0;
  repeat
    inc(d);
    if st[d] in razdel then
    begin
      delete(st, d, 1);
      insert(' ', st, d);
    end;
  until d > length(st);
  st := ' ' + st + ' ';//для корректной обработки абзацев
  while pos('  ', st) > 0 do delete(st, pos('  ', st), 1);
  d := pos(' ', st);
  k := -1;//количество слов на 1 меньше кол-ва пробелов
  while d > 0 do
  begin
    delete(st, 1, d);
    d := pos(' ', st);
    inc(k)
  end;
  kolslov := k
end;

var
  t: text;
  abzac, strok, simvol, slov, stranic: longint;
  filname, s: string;
begin
  write('File = '); readln(filname);
  assign(t, filname);
  reset(t);
  while not eof(t) do
  begin
    readln(t, s);{читаем строку}
    inc(strok, 1 + length(s) div 80);{кол-во строк по 80 символов}
    inc(simvol, length(s));{длина всех строк}
    if (copy(s, 1, 3) = '   ') or (copy(s, 1, 5) = '     ')
    or (s[1] = #9) then inc(abzac);{#9 - это клавиша Tab}
    inc(slov, kolslov(s));
    //3 или 5 пробелов также считаем признаком абзаца
  end;
  close(t);
  stranic := 1 + strok div 60;
  writeln('stranic = ', stranic);
  writeln('abzac = ', abzac);
  writeln('strok = ', strok);
  writeln('slov = ', slov);
  writeln('simvolov = ', simvol);
  readln
end.
К каждой строке будут добавлены пробелы в начало и конец. Тогда любая строка будет выглядить так " слово1 слово2 слово3 " - 4 пробела и 4-1=3 слова
Сразу скажу, что и 4 и 6 и 10 пробелов (любая строка где вначале 3 или более пробелов) тоже будет считаться абзацем. Так что можно просто писать
Код:
if (copy(s, 1, 3) = '   ') or (s[1] = #9) then inc(abzac);
Но можете как Arkuz предложил
eoln вне форума Ответить с цитированием
Старый 02.11.2008, 17:46   #13
amigo90
 
Регистрация: 16.04.2008
Сообщений: 7
По умолчанию

Так, этот вариант разобрал. Но остались некоторые неясности. На сколько я понял строка:
Код:
st := ' ' + st + ' ';
( а точнее добавление пробела перед строкой) сделанно не для корректной обработки абзацев, а для корректной работы, что бы если в начале стоит пробел. А для абзацев вообще не понял как это может быть, так как ф-ция kolslov, в программе, запускается уже после подсчета абзацев. А так, все считает правильно, вот только не понял, почему Вы написали комментарий "/для корректной обработки абзацев" ...
amigo90 вне форума Ответить с цитированием
Старый 07.11.2008, 11:37   #14
amigo90
 
Регистрация: 16.04.2008
Сообщений: 7
По умолчанию

Последний вопрос все еще актуален
amigo90 вне форума Ответить с цитированием
Старый 07.11.2008, 18:34   #15
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Цитата:
Сообщение от amigo90 Посмотреть сообщение
На сколько я понял строка:
Код:
st := ' ' + st + ' ';
( а точнее добавление пробела перед строкой) сделанно не для корректной обработки абзацев, а для корректной работы, что бы если в начале стоит пробел. А для абзацев вообще не понял как это может быть, так как ф-ция kolslov, в программе, запускается уже после подсчета абзацев. А так, все считает правильно, вот только не понял, почему Вы написали комментарий "/для корректной обработки абзацев" ...
Да, вы правы. Несовсем удачный комментарий я написал там - имелось ввиду абзац в файле, вернее текст с "новой строки" в самом файле
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите (написть пару элементарных программ на С++) ВаньОК Общие вопросы C/C++ 6 10.02.2008 18:50
Число перемен знака в массиве. Количество слов в тексте. Pascal. Cartman18 Помощь студентам 1 10.12.2007 12:58
Поиск слов в тексте pleer Общие вопросы Delphi 5 23.09.2007 08:19
подсчитать количество символов слов и предложений nev Помощь студентам 4 09.06.2007 21:22