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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2011, 15:49   #1
antojke
 
Регистрация: 08.12.2011
Сообщений: 3
Восклицание на Файл текстового типа

Из файла текстового типа переписать строки в другой файл в порядке возрастания их длин.(нужно без массива)
Код:
uses crt;
var
f,f1: text;
s: array [1..100] of string;
i,j,max,n: integer;
x: string;
begin
assign(f,'e:\1.txt'); {файл со строками}
assign(f1,'e:\2.txt');
reset(f);
rewrite(f1);
 
while not eof(f) do
begin
inc(n);
readln(f,s[n]);
end;
 
for i:=1 to n-1 do
 for j:=i+1 to n do
if length(s[i])>=length(s[j])
 then
  begin
   x:=s[i];
   s[i]:=s[j];
   s[j]:=x;
  end;
  
for i:=1 to n do
writeln(f1,s[i]);
 
writeln('Vse sdelano!');
close(f);
close(f1);
end.


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

Последний раз редактировалось Serge_Bliznykov; 14.12.2011 в 08:19.
antojke вне форума Ответить с цитированием
Старый 14.12.2011, 06:57   #2
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

хм... пока что единственное что приходит в голову:
1) циклом до конца файла считываем по строке и ищем минимальную длину
2) вторым циклом проходимся по файлу и записываем во второй файл только те строки, длина которых равна минимальной и затирем их в исходном файле
3) Повторяем (1,2) до тех пор, пока файл не станет пустым
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 14.12.2011, 08:35   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в целом я согласен с алгоритмом, предложенным Zer0
только с одной существенной попровочкой.
Текстовый файл - это не файл прямого доступа - поэтому затиреть строку в середине файла - это достаточно нетривиальная задача.
Поэтому я бы предложил такой алгоритм:
Код:
МинимальнаяДлинаНаПредыдущемШаге := -1;
начало цикла
   МинимальнаяДлина := MaxInt;
   перейти на начало текстового файла 
   цикл пока не конец файла читать строки 
      если (длина(строки)>МинимальнаяДлинаНаПредыдущемШаге)
                    И (длина(строки) < МинимальнаяДлина) 
         тогда МинимальнаяДлина := длина(строки)
   конец цикла пока не конец файла
   if МинимальнаяДлина < MaxInt then начало блока
       переписать из исходного файла в файл назначения все строки,
            длина которых равна МинимальнаяДлина
       МинимальнаяДлинаНаПредыдущемШаге := МинимальнаяДлина 
   конец
конец цикла когда МинимальнаяДлина < MaxInt

p.s. мнократные проходы по текстовому файлу - это ОГРОМНЕЙШАЯ дыра в быстродействии программы. А почему нельзя массивы использовать?!
и, если нельзя использовать массивы, надо использовать любые другие структуры, чтобы разместить (отсортировать) хотя бы часть файла в памяти...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
из текстового файл получить 5 наиболее часто встречающихся слов и число их появлений (на Delphi) sifa Помощь студентам 5 09.01.2012 18:34
Как из текстового файла перенести данные в excel файл hunter05 Microsoft Office Excel 1 08.09.2009 06:30
из одного текстового файла виделить цифры и поместить в другой(пустой) файл serguna005 Паскаль, Turbo Pascal, PascalABC.NET 2 07.12.2008 20:55
Где скачать исходник среднего текстового редактора (типа WordPad) с подробным описанием всех функций. Bill Gates Софт 2 07.01.2008 07:39