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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2018, 22:12   #1
porubilo
Новичок
Джуниор
 
Регистрация: 13.02.2018
Сообщений: 1
По умолчанию Отсортировать записи файла по алфавиту.

Помогите решить задачу: Дан файл, записи которого содержат наименования и цены деталей. Отсортировать записи файла по алфавиту. ( С++ / Delphi )
porubilo вне форума Ответить с цитированием
Старый 13.02.2018, 22:34   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

С++ и Delphi - это кэгбэ немножко разные минералы, ну да ладно. Какие проблемы ? Считываешь файл в массив структур, сортируешь любым методом, хотя бы тем же "пузырьком" (не путать с чекушкой), и записываешь файл обратно. Чтобы не таскать туда-сюда структуры, можно сделать индексный массив и обменивать местами индексы.
Можно по другому. Находишь минимальный элемент, заносишь в выходной массив, затем следующий и т.д. - если задача допускает два массива.
digitalis вне форума Ответить с цитированием
Старый 15.02.2018, 11:46   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Ладно, я сегодня добрый. Приблизно так:
Код:
type
    Price_rec = record
      name : string[64] ;
      price : string[12] ;
    end;
    TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure FormActivate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1  ;
  A1: array[0..1000] of Price_Rec ;
  F1,F2: File of  Price_Rec ;
  N_C: integer ;
  File1_Name,File2_Name: string ;

implementation

{$R *.dfm}


procedure TForm1.FormActivate(Sender: TObject);
begin
   Memo1.Clear 
end;

procedure TForm1.Button1Click(Sender: TObject);
var i,j,k : integer ;
tmp: Price_rec ;
stro: string ;
begin
// Чтение
      AssignFile (F1,File1_Name) ;
      {$I-}
      Reset (F1) ;
      {$I+}
      if IOResult <>0 then
        begin Memo1.Lines.Add('No file') ; Exit end
      else
// Сортировка
        begin
           N_C := 0 ;
           while not Eof(F1) do
             begin
               Read(F1,A1[N_C]);
               Inc (N_C)
             end ;
           for i := 0 to N_C-1 do
             for j := 0 to N_C-i-1 do
               if A1[j+1].name < A1[j].name then
                begin
                 tmp := A1[j] ;
                 A1[j] := A1[j+1] ;
                 A1[j+1] := tmp
                end ;
           for i := 0 to N_C do
              Memo1.Lines.Add(A1[i].name + A1[i].price) ;
// Запись
           AssignFile (F2,File2_Name) ; // ! ! ! !
           {$I-}
           Rewrite (F2) ;
           {$I+}
           if IOResult <>0 then
              begin
                N_C := IOResult ;
                Memo1.Lines.Add('Error' + IntToStr(N_C))
              end ;
           for i := 0 to N_C do Write (F2,A1[i]) ;
           CloseFile (F2) ;
        end ;
end;

end.
И в результате легкого клика мыши файл

Самогонка 5.65
Соленый огурчик 0.60
Коньяк 9.80
Семечки арбузные 0.24
Ноутбук ASUS1200 456.00
Дыня чарджовская 0.99


превращается файл в

Дыня чарджовская 0.99
Коньяк 9.80
Ноутбук ASUS1200 456.00
Самогонка 5.65
Семечки арбузные 0.24
Соленый огурчик 0.60

Каким образом имена файлов получаются - меня не кусается - хошь через диалоговое окно, хошь из Эдиты. Не говоря уже за гарнир вроде динамического массива. Это отдельная песня, поется за отдельные деньги.

А вообще никогда не нужно не то, что отвечать, а даже читать сообщения автора-одно_постовика, который создал аккаунт с единственной целью - получить на халяву решение. Потому что за решение проставить сухонькое однокурснику, у которого голова из правильного места растет - жаба душит.

Последний раз редактировалось digitalis; 16.02.2018 в 11:03.
digitalis вне форума Ответить с цитированием
Старый 17.02.2018, 10:37   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

А ему это и на фиг не нужно было...
digitalis вне форума Ответить с цитированием
Старый 17.02.2018, 11:22   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Если тупо текст, то можно
Код:
StringList.LoadFromFile 
StringList.Sort
StringList.SaveToFile
В шарпе аналогично

А если не текст, то почти также )

Последний раз редактировалось eoln; 17.02.2018 в 11:24.
eoln вне форума Ответить с цитированием
Старый 17.02.2018, 20:39   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Ну тут вроде как не однострочный текст, а каждая запись - : string - float или string - string. Впрочем, можно было и в одной строке с разделителями. Но т.к. это студент (да?), то ему 3-строчный вариант не годится, нужно шоб "много и подробно", I think.
digitalis вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отсортировать файл по алфавиту Dimafeel Общие вопросы C/C++ 0 16.12.2015 00:42
Отсортировать числа по алфавиту Scorpil Общие вопросы C/C++ 3 18.10.2008 01:32
Отсортировать по алфавиту Rio309 Помощь студентам 2 09.03.2008 22:52
Отсортировать по алфавиту asale Microsoft Office Excel 5 19.11.2007 22:01