Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 10.01.2016
Сообщений: 5

Вывести на экран последние N слов из файла (слова вывести в строчку)

07.04.2019, 23:50. Показов 1345. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В задании просят вывести определённое количество слов с конца текстового файла. Решил пойти простым путём - переписал в буферный текстовый массив каждую строку, попутно считая количество этих строк, и, теперь, зная количество этих строк, несложно отсчитать от последней нужное и вывести требуемые слова. Код работает для текстов небольшого объёма. Но проблема возникает, когда тестируешь текст с большим количеством слов - например, для текста из 154 слов последние слова код вообще "не видит". В чём может быть проблема? Может быть кто-то из уважаемых форумчан подскажет?
Вот код:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var
   f1,f2:text;
   s:array[1..1000] of string; // вспомогательный массив
   sl: string;
   i,j,n,m,k: integer;
begin
  assign (f1, 'input.txt');
  reset(f1);
  n:=0; // счётчик строк вспомогательного массива
  while not eof(f1) do
        begin
             readln(f1, sl);
             n:=n+1; // открываем счёт строк вспомогательного массива
             for i:=1 to length(sl) do // посимвольно перебираем строку
// === запишем во вспомогательный массив ПОСТРОЧНО текст из файла ================
                 if sl[i]<>' ' then s[n]:=s[n]+sl[i] // пока не пробел - набираем посимвольно слова
                    else n:=n+1; // иначе - переходим на новую строку
       end;
 //===================
//for i:=1 to n do writeln(s[i]); // вывод по строкам вспомогательного массива - не обязательно
  close(f1);
//=====================
  writeln('Укажите какое количество последних слов нужно вывести: ');
  readln(m);
  for i:=n-m+1 to n do write(s[i],' ');
end.
Прикрепляю также текстовый файл, при тестировании которого "каша" и заварилась... (
Вложения
Тип файла: txt input.txt (1.1 Кб, 3 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.04.2019, 23:50
Ответы с готовыми решениями:

Cтрока: Вывести на экран последние буквы слов из файла.
1.В типизированном файле хранятся строки. Вывести на экран последние буквы этих слов.

Работа с файлом. Вывести на экран количество таких слов и вывести слова, имеющих длину менее 3х букв
помогите

Из 3 предложений взять последние слова и вывести их в новой строке на экран
программа должна из 3 предложений взять последние слова и вывести их в новой строке на экран. у меня вот(см ниже) но она работает только с...

2
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
08.04.2019, 08:41
У Вас что-то с файлом, программа не читает его до конца, проверял на своем файле, большего размера, все нормально. Ну и код конечно исправить нужно.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
const rz=[' ',',','.','?'];
var f1,f2:text;
    s:array[1..1000] of string; // вспомогательный массив
    sl:string;
    i,j,n,m,k: integer;
begin
assign (f1, '1.txt');
reset(f1);
n:=0; // счётчик слов вспомогательного массива
while not eof(f1) do
 begin
  readln(f1, sl);
 // writeln(sl); если хотите прочитать
  i:=1;
  while i<=length(sl) do
  if not(sl[i]in rz)and((i=1)or(sl[i-1]in rz)) then //если не разделитель, а перед ним разделитель
   begin
    inc(n); //новое слово
    s[n]:='';//будем его составлять
    j:=i;
    while (j<=length(sl))and not(sl[j] in rz) do//пока не разделитель
     begin
      s[n]:=s[n]+sl[j];
      inc(j);
     end;
    i:=i+length(s[n]); {перешагнем через слово}
   end
  else inc(i);{пропускаем разделители}
 end;
close(f1);
write('Укажите какое количество последних слов нужно вывести m=');
readln(m);
for i:=n-m+1 to n do write(s[i],' ');
end.
1
0 / 0 / 0
Регистрация: 10.01.2016
Сообщений: 5
08.04.2019, 21:08  [ТС]
Спасибо Вам, что нашли время ответить и поправить код и прописать ремарки - теперь он выглядит более законченным и грамотным! Параллельно провёл ещё один эксперимент. Вчера, когда копировал тексты в Блокнот, то, видимо, они вставлялись как одна большая строка. Сегодня после того, как Вы обратили внимание на то, что может быть что-то не так с текстовым файлом - то просто взял и в ручную расставил "перевод каретки" для строк по правой границе Блокнота. И - о, чудо! - код заработал...

Может быть кому-то пригодится данный танец с бубном!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2019, 21:08
Помогаю со студенческими работами здесь

Вывести на экран последние 10 строк файла
Сабж, интересен либо сам код, либо подсказка. Чем меньше памяти кушаем, тем лучше.

Вывести на экран последние 10 строк файла
Условие: вывести на экран последние 10 строк файла (с сохранением порядка). Примерный код: #include &lt;stdio.h&gt; #include...

Вывести на экран через один пробел последние буквы каждого слова
Дана текстовая строка, состоящая из слов, разделенных одним пробелом. Вывести на экран через один пробел последние буквы каждого слова.

Записать в файл строку. Скопировать в буфер последние два слова. Вывести содержимое буфера на экран
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main(){ ofstream fout(&quot;test.txt&quot;); if(!fout) { ...

Вывести новую строчку, в которой вывести все слова, не похожие на последнее
условие задания типо в строчке 2-30 слов, в слове 2-10 букв, надо вывести новую строчку, в которой вывести все слова, не похожие на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru