Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
lexan
1 / 1 / 1
Регистрация: 31.12.2014
Сообщений: 25
1

Форматирование текста по заданной ширине

20.04.2015, 17:38. Просмотров 466. Ответов 2
Метки нет (Все метки)

Задача: заданный в файле текст из строк различной длины переформатировать по заданной ширине с выравниванием по ширине, без переноса слов, с соблюдением абзацев. Разделителями слов являются пробелы, знаки препинания: точка, запятая, точка с запятой.
Что здесь не так и как надо?
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
const d=[' ' , ';' , '.' , ','];
var
  f,f1:text;
  s,s1,a,infile:string;
  i,j,la,l,lk:integer;
begin
  repeat
    write('L=');
    readln(l);
  until l>1;
  repeat
    write('Enter filename>');
    readln(infile);
    assign(f,infile);
    {$i-}
    reset(f);
    {$i+}
  until IoResult=0;
  assign(f1,'temp.tmp');
  rewrite(f1);
  while not eof(f)  do begin
    readln(f,s);
    a:='';
    j:=1;
    while (s[j]=#32) and (j<length(s)) do begin inc(j);a:=a+#32;end;
    dec(j);
    delete(s,1,j);la:=j;
    lk:=length(s);
    while (s[lk]=#32) and (lk>0) do begin delete(s,lk,1);dec(lk);end;
    while (s[lk] in d) and (lk>0) do dec(lk);
    if length(s)<l-la then begin
    i:=0;
    for j:=1 to lk do
      if s[j] in d then inc(i);
    if i=0 then for j:=length(s) to l-la-1 do s:=s+#32 else
    repeat
        s1:='';j:=l-la-length(s);
           for i:=1 to length(s) do begin
           if (s[i] in d) and (j>0) and (i<lk) then
             begin
               s1:=s1+s[i]+#32;inc(lk);
               dec(j);
             end else
            s1:=s1+s[i];
         end;
        s:=s1;
    until (length(s)>=l-la);
    end;
    writeln(f1,a+s);
  end;
  close(f);
  erase(f);
  close(f1);
  rename(f1,infile);
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2015, 17:38
Ответы с готовыми решениями:

Выравнивание текста по ширине
Нужно сделать программу которая выравнивает текст по ширине добавляя пробелы...

Строковая обработка, вывод текста по указанной ширине
Задание состоит в следующем: пользователю показывается некий набор, именованный...

Заданный в файле текст из строк различной длины переформатировать по заданной ширине с выравниванием
Помогите пож-та с программой. Вот условие, нужно чтобы текст форматировался в...

Форматирование текста
Дана строка, состоящая из 10 слов. За последним словом точка. Напечатать эту же...

Форматирование текста
нужно переформатировать строку чтобы в ней было 30 символов , и она...

2
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
4017 / 2948 / 3689
Регистрация: 05.06.2014
Сообщений: 14,625
20.04.2015, 18:55 2
Посмотрите пример, как надо:
Выравнивание текста по ширине
0
lexan
1 / 1 / 1
Регистрация: 31.12.2014
Сообщений: 25
20.04.2015, 20:23  [ТС] 3
а как отвязаться от числа строк и связать с файлом? Я в этом просто не шарю

Добавлено через 1 час 6 минут
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
 var f1, f2 :text;
 a: array [0..300] of string[100];
 i, j: integer;
 begin
Assign(f1,'D:\work.txt');
 
Assign (f2, 'D:\word.txt');
reset(f1);
rewrite(f2);
 
while not eof(f1) do begin 
read(f1,a[i]);
 if pos(' ', a[i]) > 0
        then while length(a[i]) <= 79 do
          for j := length(a[i]) downto 1 do
            begin
              if a[i][j] = ' ' then insert(' ', a[i], j);
              if length(a[i]) = 80 then break
            end;
    end;
  
 
 writeln(f2,a[i]);
 
  
  close(f1);
  close(f2);
  end.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2015, 20:23

Форматирование текста
дан произвольный текст,нужно его выронить по ширине.по какому-то числу...

Форматирование текста
Дан текст, состоящий из предложений, разделяемых точками. Напишите программу,...

Анализ и форматирование текста
Дан символ C — прописная (заглавная) русская буква и текстовый файл. Создать...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru