Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 28.05.2019
Сообщений: 4

Поменять местами первый и второй абзацы текстового файла

10.09.2019, 21:42. Показов 2463. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
любой текст в отдельном файле
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.09.2019, 21:42
Ответы с готовыми решениями:

Поменять местами первый и второй столбец матрицы
Дан двумерный массив случайных чисел от -5 до 14 из 5-ти строк и 5-ти столбцов. Вывести на экран первоначальные значения элементов массива...

Поменять местами первый и второй столбец матрицы
Дан двумерный массив случайных чисел от -5 до 14 из 5-ти строк и 5-ти столбцов. Вывести на экран первоначальные значения элементов массива...

Поменять местами первый и второй элементы односвязного списка
Написать программу, содержащую процедуру, которая меняет местами требуемые элементы непустого списка: 1) первый и второй элементы; ...

7
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
11.09.2019, 10:27
Чем разделяются абзацы?
0
0 / 0 / 0
Регистрация: 28.05.2019
Сообщений: 4
11.09.2019, 23:18  [ТС]
обычные абзацы без раздела
только отступление в начале предложения
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
12.09.2019, 08:13
Какие отступления?
Один пробел — это уже достаточный отступ для начала абзаца? Два? Четыре? Символ табуляции? Один или больше? А разрыв страницы начинает абзац?
0
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
12.09.2019, 08:17
bormant, а если за начало абзаца брать знак окончания строки & три пробела? ( в итоговой программе так и указать, что считается за начало абзаца. Файл все равно будет формата txt.)
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
12.09.2019, 08:28
ValentinNemo,
Нам ТС скажет, сколько минимум пробелов должно быть для начала абзаца и допустим ли символ глризонтальной табуляции в этом качестве. А заодно, являются ли пустые строки началом абзаца после них. А также строки, только выглядящие пустыми.

В остальном решение тривиальное: поскольку два абзаца занимают один и тот же размер, читаем их в память, меняем местами, пишем обратно. Не забыть найти начало первого абзаца.

Добавлено через 2 минуты
Да-да, как раз тот случай, когда с текстовым файлом удобнее обращаться как с файлом произвольного доступа.
0
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
12.09.2019, 09:18
bormant, а когда я нажимаю клавишу "Enter" при вводе текста в простой текстовый файл, то по моим представлениям в текст вводится знак окончания строки и машина начинает работать с новой строкой. Правильно я понимаю алгоритм работы?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8663 / 4500 / 1670
Регистрация: 01.02.2015
Сообщений: 13,921
Записей в блоге: 13
12.09.2019, 16:27
Если принять за начало абзаца отступ в один пробел в начале строки, то можно попробовать так
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
program ExchangeParagraphs;
 
{$mode delphi}
{$APPTYPE CONSOLE}
 
uses
  SysUtils,
  Classes;
 
type
  TMyStringList = class(TStringList)
  public
    procedure Reverse(AFirst, ALast: integer);
    procedure LeftRotate(AIndex, ASize, AShift: integer);
  end;
 
  procedure TMyStringList.Reverse(AFirst, ALast: integer);
  begin
    if (AFirst > pred(Count)) or (AFirst < 0) then
      exit;
    if (ALast > pred(Count)) or (ALast < 0) then
      exit;
    while (AFirst < ALast) do
    begin
      Exchange(AFirst, ALast);
      Inc(AFirst);
      Dec(ALast);
    end;
  end;
 
  procedure TMyStringList.LeftRotate(AIndex, ASize, AShift: integer);
  begin
    if (AIndex < 0) or (AIndex >= Count) then
      exit;
    if (ASize <= 0) or (AIndex + ASize > Count) then
      exit;
    if (AShift > ASize) then
      AShift := AShift mod ASize;
    if ASize = 0 then
      exit;
    Reverse(AIndex, AIndex + AShift - 1);
    Reverse(AIndex + AShift, AIndex + ASize - 1);
    Reverse(AIndex, AIndex + ASize - 1);
  end;
 
const
  cInFileName  = 'infile.txt';
  cOutFileName = 'outfile.txt';
var
  slBook: TMyStringList;
  IndexFirstParagraph, IndexSecondParagraph, IndexThirdParagraph: integer;
  i: integer;
begin
  {Файл с ткстом считывается без изменений в переменную slBook}
  slBook := TMyStringList.Create;
  slBook.Sorted := False;
  slBook.Duplicates := dupAccept;
  {Чтение текста из файла}
  try
    slBook.LoadFromFile(cInFileName);
  except
    on Exception do
      WriteLn('File open error');
  end;
  {Обработка текста - поменять местами первый и второй абзацы текстового файла}
  {Ищем номер строки с первым абзацем}
  IndexFirstParagraph := -1;
  IndexSecondParagraph := -1;
  i := 0;
  for i := 0 to slBook.Count - 1 do
    if (length(slBook.Strings[i]) > 0) and (slBook.Strings[i][1] = ' ') then
    begin
      IndexFirstParagraph := i;
      break;
    end;
  {Ищем номер строки со вторым абзацем}
  for i := IndexFirstParagraph + 1 to slBook.Count - 1 do
    if (length(slBook.Strings[i]) > 0) and (slBook.Strings[i][1] = ' ') then
    begin
      IndexSecondParagraph := i;
      break;
    end;
  {Ищем номер строки с третьим абзацем - конец второго абзаца}
  IndexThirdParagraph := IndexSecondParagraph + 1;
  while (IndexThirdParagraph < slBook.Count) do
  begin
    if (length(slBook.Strings[IndexThirdParagraph]) > 0) and
      (slBook.Strings[IndexThirdParagraph][1] = ' ') then
      break;
    Inc(IndexThirdParagraph);
  end;
  if (IndexFirstParagraph <> -1) and (IndexSecondParagraph <> -1) then
    slBook.LeftRotate(IndexFirstParagraph, IndexThirdParagraph - IndexFirstParagraph,
      IndexSecondParagraph - IndexFirstParagraph);
  {Вывод результатов}
  try
    slBook.SaveToFile(cOutFileName);
  except
    on Exception do
      WriteLn('File write error');
  end;
  {Очистка памяти}
  slBook.Free;
end.
Перестановка параграфов - это обычный циклический сдвиг элементов массива (в данном случае массива строк). Циклический сдвиг осуществлён при помощи алгоритма реверса (т.к. он у меня уже набран и проверен).

Проверил на файле из одного, двух, трёх абзацев без пустых строк. Для пустых строк в качестве разделителей абзацев нужно что-то дорабатывать.

Добавлено через 4 минуты
Пример обрабатываемого файла infile.txt
Code
1
2
3
4
5
6
7
8
9
10
11
 111111111111
1111111111111111
1111111111111111111111
1111
 222222222222
22222222
222222222222222222
222222222
 33333333333
333333333333333333
33333333333333333333333
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.09.2019, 16:27
Помогаю со студенческими работами здесь

Первый и второй, третий и четвертый и т.д. отрицательные элементы поменять местами
Дан одномерный массив. Первый и второй, третий и четвертый и т.д. отрицательные элементы поменять местами.

Первый столбец матрицы поменять местами с последним, второй - с предпоследним, и так далее
В двухмерной массиве первый столбец поменять местами с последним столбцом, второй столбец с предпоследним столбцом и так далее. ...

в матрице размером m x n в каждой строке сделать перестановку:поменять местами первый и последний элементы,второй и предпоследний и т.д.
в матрице размером m x n в каждой строке сделать перестановку:поменять местами первый и последний элементы,второй и предпоследний и т.д.

дан одномерный массив А. Поменять местами последний положите и второй элемент массива. Разделить все элементы с четными номерами на первый элемент.
дан одномерный массив А. Поменять местами последний положите и второй элемент массива. Разделить все элементы с четными номерами на первый...

В текстовом файле определить второй максимальный и второй минимальный элементы, и поменять их местами
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru