Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 06.06.2010, 02:21   #1 (permalink)
Tanusha
Новичок
 
Регистрация: 06.06.2010
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Вставка символа "конец строки" (Pascal)

Здравствуйте уважаемые обитатели форума!

нужно вставить #10 (конец строки) через каждые 150 символов в нетипизированный файл.
если встречается #13 (enter), то далее отсчет символов начинать заново.
причем слова в тексте не должны разрываться, т.е. вставку делать перед следующим пробелом

кое-что нашла, но не могу понять, что такое in, и как его обозначить в var
Код:
var
f: file;
f2:file;
j,n:integer;
 
s:string
begin
assign(f, text.txt);
reset(f);
assign(f2, file1.txt);
rewrite(f2);
 
n:=0;
while n+150<length(s) do 
begin
  for j:=n+150 to n+1 do 
  begin
    if s[j]=' ' then 
    begin
      in:=j;
      break;
    end;
  end;
  insert(#10,s,n);
end;
 
writeln(f2,s);
close(f);
close(f2);
end.
и это, кажется, для одной строки? а если для всех, то надо добавить цикл?
Код:
while not EOF(f) do
Tanusha вне форума   Ответить с цитированием

Старый 06.06.2010, 02:21
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Ваша тема очень схожа с некоторыми топиками на форуме, которые вы скорее всего не просмотрели

"Никитин" пообещал новые иски против пользователей "ВКонтакте"
Пропали кнопки "Вперёд", "Назад" и "Вверх"
Видеокамера SONY записывала в формате в "mpg", а теперь стала в "m2ts". Почему?
Увеличение "бегущей строки"

Старый 06.06.2010, 09:39   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Tanusha Посмотреть сообщение
Здравствуйте уважаемые обитатели форума!

нужно вставить #10 (конец строки) через каждые 150 символов в нетипизированный файл.
если встречается #13 (enter), то далее отсчет символов начинать заново.
причем слова в тексте не должны разрываться, т.е. вставку делать перед следующим пробелом

кое-что нашла
Уважаемая Танюша, прежде всего позволю себе дать Вам один совет. Осваивая программирование, старайтесь решать задачи самостоятельно, а не шарить по всяким помойкам в поисках "кое-чего". Взять хотя бы приведенный Вами листинг. Да он просто изобилует ошибками и неряшливостями! Начнем с начала:
Код:
f: file;
f2:file;
j,n:integer;
s:string
Для данной задачи следует использовать тип файла TEXT.
Идем дальше:
Код:
assign(f, text.txt);
reset(f);
assign(f2, file1.txt);
rewrite(f2);
Не пойдет! Параметром функции Assign является СТРОКОВАЯ переменная (полное, включая путь, имя файла), поэтому надо либо ввести такие переменные и присвоить им значения путей, например
Код:
var
 st:String;
begin
 st:='D:\text.txt';
 Assign(f, st);
end;
либо, если имя файла указывается явно, по крайней мере взять его в кавычки:
Код:
assign(f, 'text.txt');
Далее:
Код:
for j:=n+150 to n+1 do
Абсолютно бессмысленная запись, потому что при любом n справедливо условие n+150>n+1, следовательно цикл выполняться не будет (для нисходящих значений переменной цикла используется downto, но здесь это ни к селу, ни к городу).
Можно и дальше продолжать, но, я полагаю, достаточно.
Мне кажется, что программа должна выглядеть как-то так:
Код:
var
 f,f2: TEXT;
 n:Byte;
 s:string;

begin
 assign(f, 'D:\text.txt');
 reset(f);
 assign(f2, 'D:\file1.txt');
 rewrite(f2);

 Repeat
  ReadLn(f,s);
  If Length(s)>150 then
   begin
    n:=150;
    Repeat
     Inc(n);
    Until (s[n]=' ') or (s[n]=#13);
    If s[n]=' ' then  insert(#10,s,n);
   end;
  WriteLn(f2,s);
 Until EoF(f);
 close(f);
 close(f2);
end.
Попробуйте - если что-то не так, поправьте сами или напишите сюда.
Да, естественно, пути к файлам поставьте свои.
Vladimir_S вне форума   Ответить с цитированием
Старый 06.06.2010, 15:58   #3 (permalink)
Tanusha
Новичок
 
Регистрация: 06.06.2010
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Дело в том, что решила использовать нетипизированный тип файлов потому, что строки в моем случае привышают 255 символов. а в дальнейшем к этим строкам еще и добавляеются символы. вот и ищу выход, как разбить эти строки на более маленькие, чтобы можно было далее работать с текстовым типом.
может, конечно, есть другой выход, но пока в голову пришло только делить на более маленькие. а может Вы знаете, как увеличить эти 255?
text.txt
попыталась переделать в нетипизированный, но при этом текст просто переносится без изменений
Код:
var
 f,f2:file of char;
 n:Byte;
 s:string;
 b:char;
begin
 assign(f, 'text.txt');
 reset(f);
 assign(f2, 'file1.txt');
 rewrite(f2);

 Repeat
Read(f,b);
  If Length(s)>150 then
   begin
    n:=150;
    Repeat
     Inc(n);
    Until (s[n]=' ') or (s[n]=#13);
    If s[n]=' ' then  insert(#10,s,n);
   end;
  Write(f2,b);
 Until EoF(f);
 close(f);
 close(f2);
end.
Tanusha вне форума   Ответить с цитированием
Старый 06.06.2010, 18:21   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Tanusha Посмотреть сообщение
Дело в том, что решила использовать нетипизированный тип файлов потому, что строки в моем случае привышают 255 символов. а в дальнейшем к этим строкам еще и добавляеются символы. вот и ищу выход, как разбить эти строки на более маленькие, чтобы можно было далее работать с текстовым типом.
может, конечно, есть другой выход, но пока в голову пришло только делить на более маленькие. а может Вы знаете, как увеличить эти 255?
Ну во-первых, если я правильно помню, типы файлов "Text" и "File of Char" абсолютно тождественны, можно и так, и так. Теперь что касается ограничения в 255 символов, то оно относится не к файлам, а к строкам, и значит в данном случае пользоваться строковыми переменными нельзя. В итоге у меня получилось как-то так:
Код:
var
 f,f2:file of char;
 n:Byte;
 b:char;
begin
 assign(f, 'D:\text.txt');
 reset(f);
 assign(f2, 'D:\file1.txt');
 rewrite(f2);
 n:=0;
 Repeat
  Repeat
   Inc(n);
   Read(f,b);
   Write(f2,b);
  Until (n=150) or (b=#13) or Eof(f);
  If b=#13 then n:=0 else
  If n=150 then
   begin
    Repeat
     Read(f,b);
     Write(f2,b);
    Until (b=' ');
    Write(f2,#10);
    n:=0;
   end;
 Until Eof(f);
 close(f);
 close(f2);
end.
Vladimir_S вне форума   Ответить с цитированием
Старый 06.06.2010, 19:35   #5 (permalink)
Tanusha
Новичок
 
Регистрация: 06.06.2010
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

не работает. просто копирует текст без изменения
сначала не понравилась строка
Код:
Write(f2,#10);
но я ее заменила на
Код:
p:=#10;
Write(f2,p);
и все равно не работает
Tanusha вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 06.06.2010, 19:47   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Tanusha Посмотреть сообщение
не работает. просто копирует текст без изменения
Да нет, работать-то она работает:
nc001.jpg nc002.jpg
К сожалению, в Вашем файле русский текст и под DOS кодировка не соответствует, но вставленные символы #10 (светлые на темном фоне) очень даже видны. Другое дело - как тот или иной редактор их обрабатывает, и вообще показывает или скрывает. Но задача, как видите, решена.
Vladimir_S вне форума   Ответить с цитированием
Старый 06.06.2010, 19:52   #7 (permalink)
Tanusha
Новичок
 
Регистрация: 06.06.2010
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

попробую еще раз проверить
Tanusha вне форума   Ответить с цитированием
Старый 06.06.2010, 20:58   #8 (permalink)
Tanusha
Новичок
 
Регистрация: 06.06.2010
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

не идет ни в какую. даже исправляла, чтобы он интеры вставлял. все равно никак.
пишу в Turbo Pascal
результат смотрю через блокнот. Уж интеры бы точно в блокноте отобразились.
Вы бы не могли выложить свой .pas файл
Tanusha вне форума   Ответить с цитированием
Старый 06.06.2010, 21:15   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Tanusha Посмотреть сообщение
не идет ни в какую. даже исправляла, чтобы он интеры вставлял. все равно никак.
пишу в Turbo Pascal
результат смотрю через блокнот. Уж интеры бы точно в блокноте отобразились.
Вы бы не могли выложить свой .pas файл
Так вот же он в #4 и выложен. Просто через copy-paste.
Боюсь, что блокнот тут не годится. В DOS я знаю, как увидеть символы, а вот в Windows... Сейчас кое-что попробую. Пока же могу посоветовать написать простенькую программку посимвольного чтения файлов и выдачи на экран их кодов (командой Ord(p)). Считать оба файла и сверить результаты.
Vladimir_S вне форума   Ответить с цитированием
Старый 06.06.2010, 21:22   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Так, проверил одну идею - работает. Если у Вас установлен пакет MS Office, то откройте оба файла WORD'ом и нажмите кнопку отображения символов. Увидите различия.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 09:09.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.