Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2012, 17:35   #1
Yrec
Пользователь
 
Регистрация: 31.01.2012
Сообщений: 11
По умолчанию

Даны два текстовых файла. Поменять местами содержимое этих файлов.

Чтение и запись текстовых файлов в программе
по этой системе над решать ребят помогите мля срочняк над)/
вот на подобие ток тут чё то не правильно

Код:
var
  x, y: text;
  
  s, d, z, q: string;

begin
  assign(x, 'D:\\x.txt');
  assign(y, 'D:\\y.txt');
  reset(x);
  reset(y);
  while not (eof(x)) do
  begin
    readln(x, z);
    s := s + z;
  end;
  while not (eof(y)) do
  begin
    readln(y, q);
    d := d + q;
  end;
  close(x);
  close(y);
  rewrite(x);
  rewrite(y);
  writeln(x, d);
  writeln(y, s);
  close(x);
  close(y);
  
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Stilet; 01.02.2012 в 10:59.
Yrec вне форума Ответить с цитированием
Старый 31.01.2012, 21:28   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

как насчет переименовать просто файлы?)))..
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 31.01.2012, 21:29   #3
Yrec
Пользователь
 
Регистрация: 31.01.2012
Сообщений: 11
По умолчанию

не вариант ) препод сказал что что то не так а я хз)
Yrec вне форума Ответить с цитированием
Старый 01.02.2012, 10:42   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
не вариант ) препод сказал что что то не так а я хз)
ну а нам откуда знать, что Вашего препода не устраивает?!

на мой взгляд - задача крайне тупая и бессмысленная (если Вы дословно процитировали её условие, тогда совет VIK_aka_TOR насчёт взаимного обмена имён файлов - это единственное реальное эффективное решение!)

но, допустим, Ваш преподаватель извращенец, садист и мазохист. И выдал Вам вместо веника лом не для того, чтобы Вы подмели плац чисто, а для того, чтобы вы задолбались..
ладно.
тогда.

вариант 1. можно доработать ваше решение. нужно писать в строки ещё символы перевода строк. И ещё учесть, что в TurboPascal максимальная длина строки равна 255 символов. поэтому, если любой из файлов больше этого размера, то решить задачу данным способом нельзя
это вариант будет выглядеть примерно так:
Код:
var
  f : file of byte;
  fSize : longint;
  x, y: text;

  sFile1, sFile2, z : string;

begin
  Assign(f, 'd:\x.txt');
  reset(f);
  fSize := filesize(f);
  close(f);

  if fSize>255 then begin
    WriteLn('Размер первого файла большее 255 - в строку не помещается! Выходим из программы!');
    Readln;
    Halt(1)
  end;

  assign(x, 'd:\x.txt');
  reset(x);
  sFile1 := ''; {обязательно очистим переменную, куда будем читать файл}
  while not eof(x) do
  begin
    readln(x, z);
    sFile1 := sFile1 + z;
    if not eof(x) then 
      sFile1 := sFile1 + #13#10;
  end;
  close(x);

  Assign(f, 'd:\y.txt');
  reset(f);
  fSize := filesize(f);
  close(f);

  if fsize>255 then begin
    WriteLn('Размер второго файла большее 255 - в строку не помещается! Выходим из программы!');
    Readln;
    Halt(1)
  end;

  assign(y, 'D:\y.txt');
  reset(y);
  sFile2 := ''; {обязательно очистим переменную, куда будем читать файл}
  while not eof(y) do
  begin
    readln(y, z);
    sFile2 := sFile2 + z;
    if not eof(y) then 
      sFile2 := sFile2 + #13#10;
  end;
  close(y);


  rewrite(x);
  rewrite(y);
  writeln(x, sFile2);
  writeln(y, sFile1);
  close(x);
  close(y);

  WriteLn('Готово!');
  Readln;
  
end.
второй вариант. создать статические массивы (ну, хотя бы на пару сотен строк). Тогда ограничение на размер файла можно довести примерно до 30 кб.

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

а вообще, ещё раз повторю - задача очень плохо придумана....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.02.2012, 11:21   #5
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

Еще как вариант - считывать построчно с каждого файла по строке и менять их местами. Потом так же со второй и так далее.
Помог - жми на весы!
ByAlex89@mail.ru
ByAlex вне форума Ответить с цитированием
Старый 01.02.2012, 11:30   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ByAlex
Еще как вариант - считывать построчно с каждого файла по строке и менять их местами. Потом так же со второй и так далее.
нет, не пойдёт такой способ.
Текстовые файлы не являются правилами ПРЯМОГО доступа (как типизированные). Спозиционироваться в произвольное место текстового файла невозможно (практически). да и если бы это даже и было возможно, то всё равно это не помогло бы - разные строки занимают в этих файлах РАЗЛИЧНУЮ длину. Никто сдвигать содержимое оставшихся строк не будет..

поэтому такой способ непременим.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстом. Marcus75 Паскаль, Turbo Pascal, PascalABC.NET 4 20.12.2011 00:35
работа с текстом с++ Dawka1305 Помощь студентам 1 31.01.2011 21:07
Работа с текстом С++ Verwolf Помощь студентам 4 02.11.2009 17:18
Работа с текстом. J0n1cK Паскаль, Turbo Pascal, PascalABC.NET 4 09.05.2009 00:29