![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Caries |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Стоит следующая задача: дан внешний текстовый файл, нужно взять из него текст и записать в новый файл, причем разбив его типа как в ворде, 25 строк на странице и 80 символов строке.
1.Проблема - как реализовать , чтобы считывалось из текстовго файла по 80 символов и записывалось в массив и далее следующие 80 символов. 2. Нужно ставить символ | чтобы в итоге получилась рамка. Как реализовать чтобы в конце каждой строки скажем после 80 символа ставился такой символ. спасибо. |
![]() ![]() |
APAL |
![]()
Сообщение
#2
|
![]() Смотрю... ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: ![]() ![]() ![]() |
А что уже сделано?
-------------------- |
Caries |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Код program name; const n= 100; var t:text;s:string[50];c:char; m : array[1..n] of string; i:integer; min:string;z:integer;f:integer; begin i:=1; writeln('Enter filename'); readln(s); assign(t,s); {$I-} reset(t); {$I+} if ioresult<>0 then begin writeln('ERROR!!!! File not found!');readln; end else while(not eof(t))and (i<=n) do begin readln(t,m[i]); inc(i);inc(z); end; close(t); writeln('--------------------------------------------------------------------------------'); for i:=1 to z do begin writeln('| ',m[i],' |'); end; end; end. пока только это, так как реализовать эти 2 вопрос я не представляю Сообщение отредактировано: Caries - 28.03.2005 17:21 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Для начала, почему не пользуемся поиском... По-моему, вот эта задача довольно похожая... Разбить текст на строки
|
Caries |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
извиняюсь за невнимательность. по поводу 1 вопроса вроде ясно.
как решить 2 вопрос? |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата(Caries @ 27.03.05 14:52) 2. Нужно ставить символ | чтобы в итоге получилась рамка. Как реализовать чтобы в конце каждой строки скажем после 80 символа ставился такой символ. Значит, так ... Если поставить такой символ после 80-го и вывести на печать, то он просто перенесется на следующую строку, т.к. строка на экране содержит максимум 80 символов. Я бы разбивал не по 80, а по 78, и распечатывал вот так: Код Writeln(#179+s+#179); где s это полученная строка из 78 символов... Таким образом, эта строка будет находиться между двумя символами "|" ...P.S. Если же нужно сохранить в массиве измененную строку (с символами "|"), то: Код s := #179+s+#179; |
Caries |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
СТавит, но сразу после строки,а допустим если в строке будет не 78 символов а меньше? например последняя строка?
|
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Тогда проверять длину строки, и дополнять ее пробелами до 78, а потом - выводить, как описано выше...
|
Caries |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
в принципе можно так. Я думал можно как нить через GOTOXY или подобные функции задать позицию "y" в строке и крутить массив.
|
Caries |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Для начала, почему не пользуемся поиском... По-моему, вот эта задача довольно похожая... Разбить текст на строки Похожая но не та... Мне нужно желательно читть из текстового файла по 80 символов скажем в массив. А текстовый файл естественно более 255 смиволов чтобы загнать его в 1 строку и покрамсать по 80 символов в строку... как предложено в примере Открываем Фаронова: "Procedure Read([var F:text] v1 [,v2,...,vn]) считывает одно или более значений из текстового файла в одну или болеее переменых." Значит можно читать с помощбю read и более 1 переменной, но как? или что-то я не так понял. В общем я здесь мучался пока интернета не было накидал что не так? (пока разбиваю по 50 символов в строку) Код program name; const n= 100; var t:text;s:string[50];c:char; m : array[1..n] of string; i:integer; min:string;z:integer;f:integer; mi:string; begin i:=1; writeln('Enter filename'); readln(s); assign(t,s); {$I-} reset(t); {$I+} if ioresult<>0 then begin writeln('ERROR!!!! File not found!');readln; end else while(not eof(t))and (i<=n) do begin readln(t,m[i]); inc(i);inc(z); end; rewrite(t); for i:=1 to z do begin if length(m[i]) < 50 then begin if length (m[i+1]) >50 then begin m[i]:=m[i] + copy( m[i+1], 0, 50-length(m[i]));delete( m[i+1], 0 ,50-length(m[i])); end else m[i]:=m[i]+m[i+1];m[i+1]:=''; end; if length( m[i]) > 50 then begin m[i+1]:= copy(m[i],50,length(m[i])-50);delete(m[i],50,length(m[i])-50);end; end; writeln(t,'----------------------------------------------------'); for i:=1 to z do begin writeln(t,'|',m[i],'|'); if( i mod 25) = 0 then begin writeln(t,'----------------------------------------------------'); writeln(t,z); writeln(t,'----------------------------------------------------'); writeln; writeln;writeln; writeln(t,'----------------------------------------------------'); close(t); end; end; end. |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
![]() Ну и зачем такие сложности? Все проще гораздо: Код type arrStr = array[1 .. 100] of string[80]; var s: arrStr; f: text; begin { открываешь файл, и обрабатываешь ошибки } i := 1; s[i] := ''; len := 0; { начинаешь заполнять массив строк с первой } while not eof(f) do begin read(f, ch); { если длина превысила 80 символов, или встретился перевод строки } if (ch = #13) or (ch = #10) or (len > 80) then begin { переходим на след. элемент массива строк } inc(i); if len > 80 then s[i] := ch else s[i] := ''; len := 1; { длина снова = 1 } end { иначе просто добавить символ к текущей строке и увеличить ее длину } else begin s[i] := s[i] + ch; inc(len) end end; { вот тут все символы из файла будут считаны в строки длиной не более 80 символов и занесены в массив s } end. |
Caries |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Небольшой трабл выводит
строки и после каждой ставляет пустую.... Как избавиться? Сообщение отредактировано: Caries - 15.04.2005 21:29 |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Замени основной цикл:
while not eof(f) do begin |
Caries |
![]()
Сообщение
#14
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
я немного подругому писал
Код while(not eof(t))and (i<=n) do begin read(t,ch); if (ch=#13) or (ch=#10) or (length(m[i]) >80) then begin if length( m[i])<80 then begin d:=81-length(m[i]);(дополняю строку пустыми символами до 80, чтоб сохранить рамку) for f:=1 to d do m[i]:=m[i] + ' '; end;m[i]:=m[i] + ch; inc(i);m[i]:='' end else m[i]:=m[i] + ch; end; выводит вконце кажой строки значок ٱ и вставлет лишнюю рустую строку... Что у меня не так. Сообщение отредактировано: Caries - 17.04.2005 19:10 |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Ну я же тебе уже говорил, что произойдет:
Цитата(volvo @ 29.03.05 9:37) Значит, так ... Если поставить такой символ после 80-го и вывести на печать, то он просто перенесется на следующую строку, т.к. строка на экране содержит максимум 80 символов. Я бы разбивал не по 80, а по 78 ... Ничего не напоминает? |
Caries |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Полностью код проги того что уже сделано(хоть и коряво ;))
Код program name; const n= 100; var t:text;s:string[50]; m : array[1..n] of string; i:integer; min:string;z,d,l:integer;f,c:integer; mi:string;ch:char; begin i:=1;l:=1; m[i]:=''; writeln('Enter filename'); readln(s); assign(t,s); {$I-} reset(t); {$I+} if ioresult<>0 then begin writeln('ERROR!!!! File not found!');readln; end else while(not eof(t))and (i<=n) do begin read(t,ch); if (ch=#13) or (ch=#10) or (length(m[i]) >80) then begin if (length( m[i])<80) or (ch=#10) then begin d:=81-length(m[i]); for f:=1 to d do m[i]:=m[i] + ' '; end; inc(i);m[i]:='';read(t,ch) end else m[i]:=m[i] + ch; end; m[i]:=''; rewrite(t); writeln(t,'------------------------------------------------------------------------------------'); for z:=1 to i do begin writeln(t,'|',m[z],' |');inc(c); if (( z mod 25) = 0) or ( i= z) then begin writeln(t,'------------------------------------------------------------------------------------'); writeln(t,'| Strok in List ',c,'| List ',l);l:=l+1; writeln(t,'------------------------------------------------------------------------------------'); writeln; Все нормально, рамка ровно. но жрет теперь символы ну т.е если строка если больше 80 то он следубщий символ теряет... Кстати а нужно учесть , символ конца файла будет выводиться , его тоже нужно учесть? Цитата Ну я же тебе уже говорил, что произойдет: Я бы разбивал не по 80, а по 78 т.е мне перебить длину на 78? Сообщение отредактировано: Caries - 18.04.2005 21:36 |
Caries |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Блин мне через неделю уже сдавать (
Вот окончательный вариант. НО жерт последний символ. Помогите.... program kursach; |
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
Цитата(Caries @ 4.05.05 15:35) Вот окончательный вариант. НО жерт последний символ. Помогите.... Проверяй в пошаговом режиме (F7), и исправляй... Откуда можно узнать, где именно это происходит без отладки программы? |
Caries |
![]()
Сообщение
#19
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я так чувствую в процедуре Formats. Найти не могу...
|
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
Я бы переписал Formats вот так:
procedure formats;{Форматируем текст} |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 6:28 |