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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2017, 19:50   #1
Alexey1002
 
Регистрация: 14.11.2017
Сообщений: 9
По умолчанию Из файла 1 записать в файл 2 строки, упорядочив слова по алфавиту

Здравствуйте! Помогите пожалуйста задачей. Не могу сообразить, как сделать так, чтобы при копировании из файла f1 в файл f2 все слова каждой строки были упорядочены по алфавиту. Написал код, где ввожу строки файла 1 и все эти строки копируются во 2 файл. DELPHI. Вот мой код:
Код:
program projectfile;

{$APPTYPE CONSOLE}

uses
  SysUtils;

      Var f1,f2:textfile;
        i,n: integer;
        s: string;
    Begin
 AssignFile(f1,'file1.txt');  
Rewrite(f1);                  
writeln('Vvedite kol-vo strok faila:');
Readln(n);
Writeln('Vvedite stroki:');
for i:=1 to n do
 begin
readln(s);                    
writeln(f1,s);                
 end;
 close(f1);

 AssignFile(f1,'file1.txt');
reset(f1);
 AssignFile(f2,'file2.txt');
Rewrite(f2);
while not eof(f1) do begin
readln(f1, s);
writeln(f2, s);
write(f2, s);
end;
 close(f1);                  
 close(f2);

writeln('Stroki iz 1 faila skopirovani vo 2 fail');
writeln('END');
readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Заранее большое спасибо!
Alexey1002 вне форума Ответить с цитированием
Старый 03.12.2017, 23:58   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Цитата:
Сообщение от Alexey1002;1711663
[CODE
while not eof(f1) do begin
readln(f1, s);
s1 := Sort(s) ;
writeln(f2, s1);
end;
[/CODE]
Тут нужно ввести еще одну функцию - только и делов.
Нужно завести еще одну строку s1 и вспомогательную s_temp . Сортировка обычная. Помещаем в s_temp первое слово, все остальные слова из s поочередно сравниваем с s_temp : если < , удаляем в s_temp прежнее и помещаем туда новое, попутно запомнив место, откуда взяли. Когда просмотр закончится, s_temp добавляем к s1 (она предварительно д. быть очищена), а с запомненного места в s слово удаляем. Когда все в s поудаляли, можно писать s1 в f2.
Засада вот в чем: слова разделяются только пробелами? Если еще
. , ; : и пр.
- придется попыхтеть больше.

Последний раз редактировалось digitalis; 04.12.2017 в 00:16.
digitalis вне форума Ответить с цитированием
Старый 04.12.2017, 07:20   #3
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Ну раз это Дельфи - то можно распарсить строку по словам, засунуть их все в TStringList и там выполнить Sort. Или вся фишка задачи - сортировку запрограммировать?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 04.12.2017, 10:43   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Так оно же в консольном режиме... Writeln и TstringList - разве совместимо ?
digitalis вне форума Ответить с цитированием
Старый 04.12.2017, 10:58   #5
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Writeln и TstringList - разве совместимо ?
Почему нет?
Black Fregat вне форума Ответить с цитированием
Старый 04.12.2017, 11:02   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Так оно же в консольном режиме... Writeln и TstringList - разве совместимо ?
да, совместимо.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.12.2017, 11:03   #7
Alexey1002
 
Регистрация: 14.11.2017
Сообщений: 9
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Тут нужно ввести еще одну функцию - только и делов.
Нужно завести еще одну строку s1 и вспомогательную s_temp . Сортировка обычная. Помещаем в s_temp первое слово, все остальные слова из s поочередно сравниваем с s_temp : если < , удаляем в s_temp прежнее и помещаем туда новое, попутно запомнив место, откуда взяли. Когда просмотр закончится, s_temp добавляем к s1 (она предварительно д. быть очищена), а с запомненного места в s слово удаляем. Когда все в s поудаляли, можно писать s1 в f2.
Засада вот в чем: слова разделяются только пробелами? Если еще
. , ; : и пр.
- придется попыхтеть больше.
Да, слова разделяются только пробелами без остальных символов вроде запятых, двоеточий и т.д.
Alexey1002 вне форума Ответить с цитированием
Старый 04.12.2017, 12:08   #8
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Writeln и TstringList - разве совместимо ?
TStringList - это не визуальная компонента, это класс. На котором, конечно, основано достаточно много VCL, но тем не менее сам по себе он внешнего представления не имеет.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 04.12.2017, 12:10   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Alexey1002 Посмотреть сообщение
Да, слова разделяются только пробелами без остальных символов вроде запятых, двоеточий и т.д.
Если Вас устроит решение, использующее классы Delphi, тогда всё просто:
используя TStringGrid можно легко разделить строку(или весь текст) на отдельные слова (см. например, http://programmersforum.ru/showpost....71&postcount=5)
потом отсортировать полученный TStringList методом Sort
потом записать результат.

но, боюсь, что задача исключительно учебная и Вам нужно написать код, который разбирает строку на слова и помещает их в массив и потом написать код сортировки этого массива.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.12.2017, 15:01   #10
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
потом отсортировать полученный TStringList методом Sort
А я тут ещё вспомнил про существование TArray<T> начиная с некоторой версии дельфей
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Язык Си. открыть файл, считать строки, разбить их на слова, отсортировать по алфавиту Li_Me Помощь студентам 0 07.05.2013 22:10
Записать в файл слова из текста, считанного из первого файла, которые начинаются и заканчиваются заданными буквами (Паскаль) makgs123 Помощь студентам 0 11.12.2012 17:07
Составить строку символов, лексико-графически упорядочив слова исходной строки и разделив их пробелами (С++) trum Помощь студентам 0 20.03.2012 01:01
Строки. Проверка принадлежности слова латинскому алфавиту NinoZombie Общие вопросы C/C++ 3 16.05.2011 04:48