1 / 1 / 1
Регистрация: 31.12.2014
Сообщений: 25
1

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

20.04.2015, 17:38. Показов 2320. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2015, 17:38
Ответы с готовыми решениями:

Форматирование текста по ширине
Здравствуйте. Мне нужно отформатировать текст(одну строку) по ширине(вводится с клавиатуры) - т.е....

Подкорректировать программу по форматированию текста по заданной ширине
Есть программа форматирования текста по заданной ширине,надо добавить сюда чтото, так чтобы, когда...

RichEdit 3.0 и форматирование по ширине
Я использую MFC. Пытаюсь сделать в RichEditView форматирование абзацев по ширине, но ничего не...

Форматирование строки по ширине
Дан текст, состоящий из предложений. Ввод текста осуществляется в несколько строк (не более 20)....

2
Эксперт Pascal/Delphi
6799 / 4560 / 4815
Регистрация: 05.06.2014
Сообщений: 22,438
20.04.2015, 18:55 2
Посмотрите пример, как надо:
Выравнивание текста по ширине
0
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2015, 20:23
Помогаю со студенческими работами здесь

ListBox - форматирование по ширине строки
Всем доброго дня, назрел вопрос - есть listbox в него загружаю данные(строка представлена двумя...

RichEdit или RTF форматирование текста, а лучше HTML форматирование
Привет формучани. Подскажите бесплатный компонент который позволил бы выводить текст в формате...

Выравнивание текста по ширине верхнего текста
Подскажите можно ли в layout файле задать выравнивание (отступ) текста по ширине верхнего текста,...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru