Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 01.12.2011
Сообщений: 9
1

Удаление пробелов.

10.12.2011, 15:36. Показов 650. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В исходном текстовом файле (File1.txt) сохранен текст со строками длинной до 250 знаков. Между каждыми двумя словами в строке один или более пробелов. Так же пробелы могут быть в начале и в конце строк или пустые строки состоящие только из пробелов. Напишите программу которая создаст копию такого файла так, чтобы строки, составляющие больше чем N-знаков(вводим с клавиатуры и меньше чем 250) делились на несколько строк если это необходимо. Слова при это не должны разделятся. Если следующее слово не помещается в строку по условию N, строка может быть короче, а слово переносится на новую. В строках нужно уместить максимальное количество слов которое позволяет условие N. При этом необходимо удалить все лишние пробелы (между каждым словом оставить по-одному). Готовый текст сохранить в новый файл (File1.txt).
Нужно учесть, что самое длинное слово в текстке не может быть длиннее чем заданное N и программа должна всегда работать.

Вот как-то так. Переводила задание, поэтому может немного несуразно.
Помогите пожалуйста. Срочно надо!)))

Есть кое-какие заготовки, скину через час...Может до этого времени будут идеи.

Добавлено через 1 час 1 минуту
Эта программа работает немного неккоректно. Удаляет все пробелы, но не заполняет все строки полностью. То есть не поднимает слова с других строк если количество знаков еще позволяет по условию. Может кто-нибудь поможет разобраться?))))

Заранее спасибо.
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
program pas;
 
procedure trim(f1name : string; f2name : string);
var f1 : text;
    f2 : text;
    s : string;
begin
    assign(f1, f1name);
    reset(f1);
 
    assign(f2, f2name);
    rewrite(f2);
 
    while not SeekEOF(f1) do
    begin
        readln(f1, s);
        while pos('  ', s) > 0 do delete(s, pos('  ', s), 1);
        while copy(s, 1, 1) = ' ' do delete(s, 1, 1);
        while copy(s, length(s), 1) = ' ' do delete(s, length(s), 1);
 
        if length(s)>0 then writeln(f2, s);
    end;
 
    close(f2);
    close(f1);
end;
 
function getNextBreakForSoftTrim(s : string; currentpos : integer; maxlen : integer) : integer;
var i : integer;
begin
{
    writeln('s [',s,']');
    writeln('currentpos [',currentpos,']');
    writeln('maxlen [',maxlen,']');
    writeln('length(s) [',length(s),']');
}
 
    if (length(s) <= maxlen) or (length(s) < (currentpos + maxlen - 1)) then
    begin
        getNextBreakForSoftTrim := length(s);
        exit;
    end;
 
    for i := currentpos to currentpos + maxlen do
    begin
        {
        writeln('copy(s, i, 1) [',copy(s, i, 1),']');
        }
        if copy(s, i, 1) = ' ' then
            getNextBreakForSoftTrim := i;
    end;
end;
 
procedure softTrim(f1name : string; f2name : string; maxlen : integer);
var f1 : text;
    f2 : text;
    s : string;
    i, j : integer;
begin
    assign(f1, f1name);
    reset(f1);
 
    assign(f2, f2name);
    rewrite(f2);
 
    while not SeekEOF(f1) do
    begin
        readln(f1, s);
        j := getNextBreakForSoftTrim(s, 1, maxlen);
        {writeln('Next end of line: ', j);}
        for i := 1 to length(s) do
        begin
            if (copy(s, i, 1) = ' ') and (i > j) then
            begin
                j := getNextBreakForSoftTrim(s, i, maxlen);
                {
                writeln('End of word: ', i);
                writeln('Next end of line: ', j);
                }
            end;
 
            if (i = j) and (i < length(s)) then
                writeln(f2,'')
            else
                write(f2, copy(s, i, 1));
        end;
    end;
 
    close(f2);
    close(f1);
end;
 
function getMinLen(fname : string) : integer;
var f : text;
    s : string;
    i, j, r : integer;
begin
    r := 0;
    assign(f, fname);
    reset(f);
 
    while not SeekEOF(f) do
    begin
        readln(f, s);
        j := 0;
        for i := 1 to length(s) do
        begin
            if copy(s, i, 1) = ' ' then
            begin
                if (r > (i - j)) or (r = 0) then
                    r := i - j - 1;
                j := i;
            end;
        end;
        if r < 1 then
            r := length(s);
    end;
 
    close(f);
    getMinLen := r;
end;
 
var minlen, maxlen, ex: integer;
    s : string;
begin
    trim('c:\temp\file1.txt', 'c:\temp\file2.txt');
    minlen := getMinLen('c:\temp\file2.txt');
    maxlen := 0;
    repeat
        write('Please put the max length of the line in resut file ( N >= ', minlen,'): ');
        readln(s);
        {$R+}
        val(s, maxlen, ex);
        {$R-}
    until maxlen>=minlen;
 
 
    softTrim('c:\temp\file2.txt', 'c:\temp\file3.txt', maxlen);
    writeln('done.');
    readln;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.12.2011, 15:36
Ответы с готовыми решениями:

Удаление пробелов из файла
Есть текстовый файл f. Из него надо далить пробелы,стоящие в углах строк и результат удаления...

Удаление лишних пробелов
Задачи 1)Определите, является ли заданная строка правильной записью идентификатора по...

Удаление лишних пробелов
дана строка, состоящая из слов, разделенных пробелами. напишите программу, удаляющую лишние...

Удаление пробелов в начале строки
var s:string; begin while (s=' ')and(s&lt;&gt;'') do delete(s,1,1); end; почему если не...

0
10.12.2011, 15:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2011, 15:36
Помогаю со студенческими работами здесь

Удаление лишних пробелов в файле
Помогите плиз решить лабы по паскалю) 2. Дан текстовый файл f. Переписать его содержимое в файл g...

Удаление из файла всех однобуквенных слов и лишних пробелов
Дан символьный файл f. Группы символов, разделенные пробелами (одним или несколькими) и не...

Удаление лишних пробелов, нахождение последнего слова, выравнивание
6. Ввести строку - предложение. a. Найти в отдельную переменную последнее слово....

Реализовать в виде модуля набор подпрограмм удаление пробелов в начале строки
Всем здарова проблема с расстановкой фактических параметров в функции при её вызове. Реализовать в...

удаление пробелов
Дана строка символов. Удалить из неё все пробелы

Удаление пробелов
Здравствуйте, нужно написать программу, которая будет удалять пробелы в строке, если предыдущее...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru